解决可执行jar包的打包问题;上一篇文章我们介绍了mvn package可以打包,那么如果是一个可执行的jar包,该如何打包呢?
拥有函数入口(public static void main(String[] args) {}),我们可以通过java -jar xxx.jar 来执行进入这个main函数。打成可执行效果,是通过mainfest.mf文件来指定的。因此如果不依赖其他工具进行打包,需要手动添加 MANIFEST.MF 到 META-INF/MANIFEST.MF
例如:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: wangzhiping
Created-By: Apache Maven 3.1.0
Build-Jdk: 1.8.0_101
Main-Class: wzp.study.maven.mainclass.HelloWorld
pom.xml 配置
4.0.0
study.wzp.maven
maven-hello
1.0-SNAPSHOT
jar
maven-hello
junit
junit
4.10
org.apache.maven.plugins
maven-jar-plugin
study.wzp.maven.App
true
/lib
org.apache.maven.plugins
maven-dependency-plugin
copy-dependencies
package
copy-dependencies
${project.build.directory}/lib
MANIFEST.MF
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: wangzhiping
Class-Path: /lib/junit-4.10.jar /lib/hamcrest-core-1.1.jar
Created-By: Apache Maven 3.1.0
Build-Jdk: 1.8.0_101
Main-Class: study.wzp.maven.App
生成的目录
使用maven-jar-plugin,存在外部依赖时,需要指定外部依赖的位置(建议使用:maven-dependency-plugin)帮助管理,不能打包在一块,感觉不是很方便。
详细参考: https://maven.apache.org/plugins/maven-jar-plugin/
pom.xml 配置
4.0.0
study.wzp.maven
maven-hello
1.0-SNAPSHOT
jar
maven-hello
junit
junit
4.10
MANIFEST.MF
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: wangzhiping
Created-By: Apache Maven 3.1.0
Build-Jdk: 1.8.0_101
Main-Class: study.wzp.maven.App
项目目录
会生成maven-hello-1.0-SNAPSHOT.jar 和 origin-maven-hello-1.0-SNAPSHOT.jar 两个打包文件,
1、maven-hello-1.0-SNAPSHOT.jar :将依赖一起合并打包的jar;
2、origin-maven-hello-1.0-SNAPSHOT.jar:不包含任何依赖的jar,如果存在依赖,那么这个文件会报错;
详细使用参考:https://maven.apache.org/plugins/maven-shade-plugin/
pom.xml 配置
org.apache.maven.plugins maven-assembly-plugin study.wzp.maven.App with-dependencies
make-assembly
package
single
项目目录
与shade相比,基本一致,会生成两个文件
1、maven-hello-1.0-SNAPSHOT.jar:无依赖关系,不可执行;
2、maven-hello-1.0-SNAPSHOT-jar-with-dependencies.jar:依赖合并打包,可执行。
详细可参考:https://maven.apache.org/plugins/maven-assembly-plugin/
如果打包可执行jar,建议使用maven-shade-plugin或者maven-assembly-plugin,一起打包会更好些。可以直接执行。
[1] http://blog.csdn.net/xiao__gui/article/details/47341385
[2] https://baike.baidu.com/item/MANIFEST.MF