Java开发中创建JAR文件的方法
简介
在日常开发中,我们不可能给用户自己的开发项目来让用户来使用,常常我们都是只给用户提供一个单独的文件,而非一个包含大量类的目录结构。故java归档(JAR)文件就是为此目的而设计的。一个JAR文件既可以包含类文件,也可以包含图像,声音等其他文件。
jar文件更类似于一种压缩包(你甚至可以用压缩软件打开它)
创建方法
代码方式
创建jar 包的常用代码如下 jar cvf jarFileName file1 file2 ......
demo如下:
jar cvf demoClasses.jar *.class icon.gif
在类文件,图像等替他资源外,jar文件中还有一个清单文件(manifest),用于描述归档文件的属性和特性。
清单文件被命名为MANIFEST.MF,位于JAR中的META-INF子目录。符合标准的最小清单文件极为简单,只有一条:Manifest-Version: 1.0
复杂的清单文件往往包含多节条目,第一节被称为主节,其他文件被指定命名实体的属性(比如单个文件,包,url等等)。他们都需要以一个Name条目开始,节与节之间用空行分开。
Manifest-Version: 1.0
Name: Demo.class
Name: com/raven/demo
创建一个包含清单文件的jar文件方法:
jar cfm jarFileName manifestFileName ...
代码例子:
jar cfm Demo.jar manifest.mf com/raven/demo/*.class
更新manifest代码例子
jar cfm Demo.jar manifest-additions.mf
IDEA方法
对于传统的代码而言,idea早已将这种开发整合在开发工具中。故可以直接使用 >file>project structure>Artifacts 点击加号选择jar from model.....后进行主类和文件配置即可。
图例如下:
多版本JAR文件
为了解决多版本冲突,Java 9 引入了多版本JAR(multi-release JAR),其中可以包含面向不同Java版本的类文件
为了保证向后兼容,额外的类文件放在META-INF/versions
Application.class
BuildingBlocks.class
Util.class
META-INF
MANIFEST.MF
versions
9
Application.class
BuildingBlocks.class
10
BuildingBlocks.class
java 8 完全不知道META-INF/versions目录,他只会直接加载类,java9读取这个java文件时就会使用新版本了。
要增加不同版本的类文件,可以使用--release表示:
jar uf Demo.jar --release 9 Application.class
要从头构建一个多版本JAR文件,可以使用-C选项,对应每个版本要切换到一个不通的类文件目录:
jar cf Demo.jar -C bin/8 . --release 9 -C bin/9 Application.class
javac -d bin/8 --release 8 . . .
在Java 9 中,-d选项会创建这个目录(如果目录不存在)