springboot发布默认打成的jar包都是很大的,自己的测试工具项目系统没有持续集成,就是打包上传服务器手动发布,每次上传发布都要花点时间(靠网络)。
研究了下springboot依赖包分离的maven插件,最后就是将项目的jar包缩减,将依赖的jar包不打进去,将所有的依赖包上传到linux文件夹里,然后就是用上传轻量级的jar到服务器。写好批处理文件,直接运行批处理文件就可以实现发布了。
- 实例
本地项目打包pom.xml文件插件为依赖包分离,资源包分离,第一次打包将lib放在linux上,没有变化的话,jar不用再更新,有则更新,打包完成之后,将执行jar和resource文件夹一起打包zip,上传至linux上的批处理同目录下,然后执行批处理文件即可完成发布
pom.xml文件打包插件
<plugins>
<!--打包jar-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!--不打包资源文件-->
<excludes>
<exclude>*.**</exclude>
<exclude>*/*.xml</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!--MANIFEST.MF 中 Class-Path 加入前缀-->
<classpathPrefix>lib/</classpathPrefix>
<!--jar包不包含唯一版本标识-->
<useUniqueVersions>false</useUniqueVersions>
<!--指定入口类-->
<mainClass>com.yy.Application</mainClass>
</manifest>
<manifestEntries>
<!--MANIFEST.MF 中 Class-Path 加入资源文件目录-->
<Class-Path>./resources/</Class-Path>
</manifestEntries>
</archive>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
<!--拷贝依赖 copy-dependencies-->
<!--<plugin>-->
<!--<groupId>org.apache.maven.plugins</groupId>-->
<!--<artifactId>maven-dependency-plugin</artifactId>-->
<!--<executions>-->
<!--<execution>-->
<!--<id>copy-dependencies</id>-->
<!--<phase>package</phase>-->
<!--<goals>-->
<!--<goal>copy-dependencies</goal>-->
<!--</goals>-->
<!--<configuration>-->
<!--<outputDirectory>-->
<!--${project.build.directory}/lib/-->
<!--</outputDirectory>-->
<!--</configuration>-->
<!--</execution>-->
<!--</executions>-->
<!--</plugin>-->
<!--拷贝资源文件 copy-resources-->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<outputDirectory>${project.build.directory}/resources</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!--spring boot repackage,依赖 maven-jar-plugin 打包的jar包 重新打包成 spring boot 的jar包-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--重写包含依赖,包含不存在的依赖,jar里没有pom里的依赖-->
<includes>
<include>
<groupId>null</groupId>
<artifactId>null</artifactId>
</include>
</includes>
<layout>ZIP</layout>
<!--使用外部配置文件,jar包里没有资源文件-->
<addResources>true</addResources>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
批处理中实现的就是,
1.判断执行jar的pid,有则干掉
2.解压zip,删除jars(jar运行)目录下几个文件并将解压的文件移入jars目录
3.执行jar包,删除zip,删除备份jar,并将新的jar移入备份目录
source /etc/profile
echo "Restarting Application"
mjar=test-0.0.1-SNAPSHOT.jar
mzip=test-0.0.1-SNAPSHOT.zip
jars=/home/Test/jars/
backup=/home/Test/backup/
pid=`ps -ef | grep $mjar | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
kill -9 $pid
echo "closed process "$pid
fi
unzip -q $mzip
echo "unzip over"
echo "remove old file"
if [ -f "$mjar" ];then
rm -rf $jars/$mjar
rm -rf $jars/om.log
rm -rf $jars/resources/
echo "move new file"
mv $mjar $jars
mv resources/ $jars
fi
echo "running"
export BUILD_ID=dontKillMe
nohup java -jar $jars/$mjar >$jars/om.log>&1&
sleep 5
echo "copy file"
rm -rf $mzip
rm -rf $backup/$mjar
cp $jars/$mjar $backup
sleep 3