借助assembly打可执行jar包前言一、idea引入assembly依赖二、添加assembly.xml配置文件三、打包总结
前言
最近在做的一个功能需要将单java文件(main方法)打成可执行的jar包,进行部署调用,从网上搜集了一些相关的内容,在实现过程中也踩了一些坑,特此记录一下,做个备份。
一、idea引入assembly依赖
二、添加assembly.xml配置文件org.apache.maven.plugins maven-assembly-plugin 3.0.0 make-assembly package single com.xxx.MainClass ProjectName src/main/assembly/assembly.xml
我是在src/main目录下新建assembly文件夹,在文件夹下添加assembly.xml文件,文件用于指定assembly 插件的一些参数,比如包的类型,jar、zip、war,以及生成的包内包含的文件所在目录等等 直接上配置:
dep jar false src/main/java / 0644 src/main/resources / 0644 ${profile.dir} / *.xml *.properties ***.properties 0644 ${project.basedir}/target/classes/ / *.class *.xml *.properties *.yaml / true true runtime / true true system lib
| 字段 | 含义 |
|---|---|
| fileSet | 用于指定包内包含文件所在的路径,需要将class文件和模板文件打到jar包中,所以需要指定resources和classes所在的路径 |
| dependencySet | dependencySet可将项目的依赖打入jar包中,unpack为true,表示将依赖的jar包解成.class文件,false表示使用依赖的jar包形式 |
| outputDirectory | 依赖的路径 |
总结执行maven命令进行打包 mvn clean package ,由于pom文件中phase配置将插件运行绑定到package命令,所以执行package命令时会将assembly的包一起打出来。最后jar包的命名为{finalName}-{assembly.xml中id}.jar
在开始使用的时候,打包可以成功,但是执行java -jar的时候会报出
Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/ParseException
的错误,经过调试,发现是jar包中没有main方法的依赖文件,后来增加assembly.xml中增加dependencySet属性,会将main的依赖解出.class文件,才可以运行。



