springcloud项目打包动辄100多兆,在文件上传部署的时候非常耗时,多数情况下是毫无意义的耗时,因为依赖包很多情况下不需要改变,只是修改了业务逻辑,那么每次打包上传的时间都浪费了,尤其在开发环境下,需要快速部署启动测试,那么减少依赖包提高效率非常必要;
springboot项目因为他默认打包了所有依赖的jar包。此时就可以通过maven-dependency-plugin插件将依赖包复制到独立的文件夹,在启动jar包的时候引用即可。
maven-compiler-plugin 1.81.8UTF-8${project.basedir}/src/main/resources/liborg.springframework.boot spring-boot-maven-plugin com.xxx.XXXXApplicationZIP${project.groupId} ${project.artifactId} org.apache.maven.plugins maven-dependency-plugin cdnpackagecopy-dependenciesjarjarruntime${project.build.directory}/libsorg.apache.maven.plugins maven-surefire-plugin 2.22.2true${project.basedir}/src/main/resources/lib${project.build.directory}/libs/**/*.jar**/*.properties${project.basedir}/src/main/resources/config/**src/main/resources**/*.properties**/*.xml**/*.html${project.basedir}/src/main/resources/config/**/*.propertiesfalsesrc/main/resources/config/${profiles.active}/BOOT-INF/classes/**/*.properties**/*.htmlsrc/main/java**/*.properties**/*.xmlfalse
重点关注以下这段
org.apache.maven.plugins maven-dependency-plugin cdnpackagecopy-dependenciesjarjarruntime${project.build.directory}/libs
maven-dependency-plugin:插件在打包的时候会在自定义目录(${project.build.directory}/libs)下生成所有依赖包。
单独提出依赖包,那么springboot项目启动肯定是需要有额外配置的,不然不能正常启动,所有启动命令中需要添加-Dloader.path=libs/,即为java -Dloader.path=libs/ -jar demo.jar
如果使用Jenkins打包上传怎么全量更新依赖包呢?
jenkins在Jenkins中编译完成后需要把${project.build.directory}/libs生成的jar文件上传到服务器,那就需要build后添加Post Steps
添加Execute shell ,即添加shell脚本打包命令
cd demo/target/libs
tar -cvf demo.tar *.jar
然后需要Post Steps中添加Send files or execute commands over SSH
也就是发送文件或者执行shell命令
Source files :demo/target/libs/demo-libs.tar
Remove prefix:demo/target/libs
Remote directory:
Exec command:
cd /home/demo/jar
if [ ! -d "demo-libs-tmp" ]; then
mkdir demo-libs-tmp
fi
tar -xvf demo-libs.tar -C demo-libs-tmp
rm -f demo-libs.tar
这样配置下,启动脚本中修改启动命令即OK
java -Dloader.path=libs/ -jar demo.jar