引入
jar文件具有跨平台、数据压缩、多文件封装的优点,所以我们常将java源程序和其他的文件(比如资源文件、签名)打包到一起,变成jar包。这样对java程序的部署会更方便,也更安全。
用IDEA等IDE,可以直接将java文件转换为jar包。本文讲解如何用JDK命令来转换。
本文实验环境
- windows10
- JDK
最简单的jar包
jar包中可以含有很多文件(具体见[1]),最简单的jar包,就只含有class和META-INF/MANIFEST.MF。
- 写一个Hello.java
public class Hello
{
public static void main(String[] args)
{
System.out.println("hello ybdesire");
}
}
- 将Hello.java转换为Hello.class
E:\one_class>javac Hello.java
- 将Hello.class打包jar
用jar命令,具体如下
E:\one_class>jar -cvf hello.jar Hello.class
added manifest
adding: Hello.class(in = 418) (out= 288)(deflated 31%)
其中参数c表示要创建一个新的jar包,v表示创建过程详细内容输出,f表示对jar包命名。
- 运行jar包
用java命令加-jar参数来运行jar包,如下
E:\one_class>java -jar hello.jar
no main manifest attribute, in hello.jar
被告知,jar包中缺少main manifest参数。
- 在jar包中添加参数
用7zip打开hello.jar文件,右键选中META-INF/MANIFEST.MF的编辑。
原始内容如下(注意最后一行为空行):
Manifest-Version: 1.0
Created-By: 1.8.0_201 (Oracle Corporation)
在最后一行插入Main-Class: Hello
,并留一行空行。改动后的内容为:
Manifest-Version: 1.0
Created-By: 1.8.0_201 (Oracle Corporation)
Main-Class: Hello
保存修改到jar包。
- 运行改动后的jar包
用java命令加-jar参数来运行jar包,如下,得到最终结果
E:\one_class>java -jar hello.jar
hello ybdesire
将在windows10上打包的hello.jar移动到ubuntu 16.04,仍然可以用如上命令来运行,因为jar是跨平台的。
补充:.class文件也是跨平台的。
参考
- [1] jar细节:https://www.ibm.com/developerworks/cn/java/j-jar/index.html
- [2] jar打包过程:https://www.cnblogs.com/flashsun/p/7246260.html
- [3] dex/jar转换:https://blog.youkuaiyun.com/MayData/article/details/53466126