Java千百问_02基本使用(003)_不使用IDE如何打jar包

简介:

不使用IDE如何打jar包

1.什么是jar包

jar包,最直白的感受就是后缀是.jar的一种压缩文件,它是以zip文件格式为基础的压缩包

与zip文件不同的是,jar文件不仅用于压缩和发布,而且还用于部署和封装组件插件程序
jar包可以被类似Jvm这样的工具直接使用,通过MANIFEST部署描述符等特殊文件,来指示工具处理特定的jar。
jar包大体分为2种,可执行jar包不可执行jar包
目前大多数的jar包都是不可被执行的,这类jar包就是提供给其他应用显现某些特定功能的。而可执行jar包可以在java环境上直接运行,大多数体现为小型工具。

2.不使用IDE如何打jar包

本文是延续:如何用记事本编写Java程序,所以还是通过记事本来完成教程。
1.首先,为了区别单文件,这次我们在不同的包下编写了两个类。类的具体功能非常明确,不再多说。

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.helloword;  
  2.   
  3. import com.helloword.impl.HelloWordImpl;  
  4.   
  5. public class HelloWord {  
  6.   
  7. public static void main(String[] args) {  
  8. HelloWordImpl helloWordImpl = new HelloWordImpl();  
  9. System.out.println(helloWordImpl.getText());  
  10. }  
  11. }  
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.helloword.impl;  
  2.   
  3. public class HelloWordImpl {  
  4.   
  5.     public String getText() {  
  6.         return "Hello word jar";  
  7.     }  
  8. }  

2.其次,把这两个类放在对应目录下,所谓"对应"及要求类的包与实际路径相符,只有这样,运行时才能找到正确路径下的类。


3. 然后,使用javac工具进行批量编译,如果需要编译的量很大的话,需写一些工具脚本进行大量编译(TODO,以后会有文章介绍)。
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. javac com/helloword/impl/HelloWordImpl.java com/helloword/HelloWord.java  


编译后会在对应目录生成.class文件。


4.最后,对其进行打包。在打包之前,我们需要把我们的整个文件夹移动到一个新的文件夹下,这里将com放在了一个叫bin的文件夹下(如果不想把源代码打入其中,需要将.java文件移除)。
打包需要使用jar工具,这个工具会将所制定的文件夹里的内容打包成jar。cmd/终端进入bin所在的路径,输入:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. jar cvf myHelloWord.jar -C bin .  
其中"myHelloWord.jar"是生成jar包的名称,"bin"是我们的文件夹目录。

P.S.

该方式打的jar包是没有办法运行的。其中,cvf是jar工具提供的几个参数,下面是jar命令的帮助说明:

用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项包括:
-c 创建新的归档文件
-t 列出归档目录
-x 解压缩已归档的指定(或所有)文件
-u 更新现有的归档文件
-v 在标准输出中生成详细输出
-f 指定归档文件名
-m 包含指定清单文件中的清单信息
-e 为捆绑到可执行 jar 文件的独立应用程序,指定应用程序入口点
-0 仅存储;不使用任何 ZIP 压缩
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息

-C 更改为指定的目录并包含其中的文件,如果有任何目录文件,则对其进行递归处理。

清单文件名、归档文件名和入口点名的指定顺序与 "m"、"f" 和 "e" 标志的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的归档文件中:
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. jar cvf classes.jar A.class B.class  
示例 2: 使用现有的清单文件 "mymanifest" 并将 my/ 目录中的所有文件归档到 "classes.jar" 中:
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. jar cvfm classes.jar mymanifest -C my/ .  
5. 我们需要的是一个能够运行的jar,所以我们需要编写并指定MANIFEST.MF,告诉java工具jar包的执行入口(即我们的main方法)。
在com的同级目录(bin下面)下创建名称为"MANIFEST.MF"的文件,并输入如下内容(还可以指定更多jar包的信息,这里我们只指定它的main类):

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Manifest-Version: 1.0  
  2. Main-Class: com.helloword.HelloWord  
保存之后,通过jar工具打包,这里要指定MANIFEST.MF文件:
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. jar cvfm counter.jar MANIFEST.MF -C bin .  
打包结果如下:

这样就能在bin下看到打好的myHelloWord.jar包。

3.如何运行jar包

cmd/终端 进入jar包所在的路径,输入:
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. java -jar myHelloWord.jar  
运行结果:


原文地址:http://blog.csdn.net/ooppookid/article/details/50921672
相关文章
|
16天前
|
安全 Java API
JAVA并发编程JUC包之CAS原理
在JDK 1.5之后,Java API引入了`java.util.concurrent`包(简称JUC包),提供了多种并发工具类,如原子类`AtomicXX`、线程池`Executors`、信号量`Semaphore`、阻塞队列等。这些工具类简化了并发编程的复杂度。原子类`Atomic`尤其重要,它提供了线程安全的变量更新方法,支持整型、长整型、布尔型、数组及对象属性的原子修改。结合`volatile`关键字,可以实现多线程环境下共享变量的安全修改。
|
2月前
|
Java 中间件 测试技术
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
|
2月前
|
Java Linux Maven
java依赖冲突解决问题之容器加载依赖jar包如何解决
java依赖冲突解决问题之容器加载依赖jar包如何解决
|
4天前
|
Java API 数据处理
Java 包(package)的作用详解
在 Java 中,包(package)用于组织和管理类与接口,具有多项关键作用:1)系统化组织代码,便于理解和维护;2)提供命名空间,避免类名冲突;3)支持访问控制,如 public、protected、默认和 private,增强封装性;4)提升代码可维护性,实现模块化开发;5)简化导入机制,使代码更简洁;6)促进模块化编程,提高代码重用率;7)管理第三方库,避免命名冲突;8)支持 API 设计,便于功能调用;9)配合自动化构建工具,优化项目管理;10)促进团队协作,明确模块归属。合理运用包能显著提升代码质量和开发效率。
|
4天前
|
Java 数据安全/隐私保护
Java 包(package)的使用详解
Java中的包(`package`)用于组织类和接口,避免类名冲突并控制访问权限,提升代码的可维护性和可重用性。通过`package`关键字定义包,创建相应目录结构即可实现。包可通过`import`语句导入,支持导入具体类或整个包。Java提供多种访问权限修饰符(`public`、`protected`、`default`、`private`),以及丰富的标准库包(如`java.lang`、`java.util`等)。合理的包命名和使用对大型项目的开发至关重要。
|
2月前
|
Java Maven 数据库
Java 包(package)
Java 包(package)
29 1
|
2月前
|
Java
Java应用结构规范问题之在biz层的convert包实现转换的问题如何解决
Java应用结构规范问题之在biz层的convert包实现转换的问题如何解决
|
2月前
|
Java Maven C++
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
|
2月前
|
Java Spring
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)
|
2月前
|
前端开发 JavaScript Java
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
下一篇
无影云桌面