1. Idea自身打包方式
1.1 创建Artifacts
快捷键(Ctrl+Alt+Shift+S)打开项目的Project Structure。在Artifacts创建
接着,指定main class,如下:
最后,得到创建得到的artifacts
1.2 打包Artifacts
在菜单栏目选Build,最后一栏Build Artifacts
最后,在出现的窗口创建
得到打包结果:
2. maven打包方式
maven打包的步骤:
- 先mvn clean,再 package即可
- 如需把项目编译成jar包,打进maven仓库里面,可以运行install命令
2.1 maven-jar-plugins 无依赖第三方jar的打包
pom.xml配置如下:
${project.build.directory}/classes src/main/resources true **/*.xml **/*.conf net.alchim31.maven scala-maven-plugin 3.2.1 scala-compile-first process-resources add-source compile org.apache.maven.plugins maven-compiler-plugin 3.1 compile compile org.apache.maven.plugins maven-jar-plugin 2.4 true lib/ com.swordfall.restserver.base.WebServer
运行:在target中找到打包出来的xxx.jar包,运行java -jar xxx.jar即可,但是如果程序有依赖其他包,比如程序依赖jdbc去查询db,这时候再执行就会出现找不到jdbc依赖,因为我们并没有将依赖包打进去。
2.2 maven-assembly-plugins 解决依赖第三方jar包,并可执行jar的打包
以下方式用的比较少,因为我们依赖的jar,也会打进到我们最终生成的jar中,会导致一个jar文件过大,而且如果要给第三方使用,最好给一个纯净的。
pom.xml配置如下:
${project.build.directory}/classes src/main/resources true **/*.xml **/*.conf net.alchim31.maven scala-maven-plugin 3.2.1 scala-compile-first process-resources add-source compile org.apache.maven.plugins maven-compiler-plugin 3.1 compile compile org.apache.maven.plugins maven-assembly-plugin 2.3 false jar-with-dependencies com.swordfall.restserver.base.WebServer make-assembly package assembly
2.3 maven-assembly-plugins zip打包
在2.2基础上,我们还可以利用assembly,将我们依赖的jar归类,打包成一个zip。发布项目的时候,将zip包copy到服务器上,直接unzip xxx.zip,里面包含要运行的jar以及依赖的lib,还有配置的config文件,还可以包括执行脚本,可以直接启动服务。
src/main/resources **/*.properties **/*.xml net.alchim31.maven scala-maven-plugin 3.2.1 scala-compile-first process-resources add-source compile org.apache.maven.plugins maven-compiler-plugin 3.1 compile compile org.apache.maven.plugins maven-jar-plugin 2.4 *.properties *.xml *.txt false true lib/ com.swordfall.restserver.base.WebServer conf/ org.apache.maven.plugins maven-assembly-plugin 2.4 src/main/assembly/assembly.xml make-assembly package single
maven-assembly-plugin还需要配置一个assembly.xml文件,用于过滤不必要的第三方jar包文件,或者确定自己编译的项目文件路径、项目的启动脚本文件目录,打包的类型格式zip或者tar.gz等。 assembly.xml文件内容为:
bin false zip false lib false ${project.build.directory} *.jar ${project.basedir}/src/main/scripts bin startup.*
打包结果为:
2.4 maven-shade-plugin 打包
使用这种方式打出来的是揉合在一起,成为一个jar文件。这种打包方式的优点是可以利用transformer把第三方jar相同的配置文件组合成一个文件,如reference.conf文件等等。
pom.xml配置如下:
${project.build.directory}/classes src/main/resources true **/*.xml **/*.conf net.alchim31.maven scala-maven-plugin 3.2.1 scala-compile-first process-resources add-source compile org.apache.maven.plugins maven-compiler-plugin 3.1 compile compile org.apache.maven.plugins maven-shade-plugin 2.4.3 package shade com.hongshan.bdp.restserver.base.WebServer reference.conf version.conf akka-http-version.conf true jar-with-dependencies io.spray:spray-json_2.11:jar: org.slf4j:slf4j-api:jar: org.slf4j:slf4j-log4j12:jar: log4j:log4j:jar: commons-logging:commons-logging:jar: commons-lang:commons-lang:jar: true
打包结果:
总结
【github地址】
https://github.com/SwordfallYeung/MavenPackage
【参考资料】
scala打包插件配置①
scala打包插件配置②
spring-boot配置读取外部配置文件
普通jar包如何读取外部的配置文件
linux shell脚本启动或停止jar
IDEA如何打包可运行jar,外部引用jar包版
IDEA自身打包方式
shade 过滤包名