1.pom.xml中使用maven-assembly-plugin maven组件,标识使用assembly.xml方式打包
<build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.1</version> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.xxx.rcms.RWebApplication</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build>
2.assembly.xml内容如下:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd"> <id>distribution</id> <formats> <format>zip</format> </formats> <fileSets> <fileSet> <directory>${project.basedir}</directory> <outputDirectory>./</outputDirectory> <includes> <include>README*</include> <include>LICENSE*</include> <include>NOTICE*</include> </includes> </fileSet> <!-- 把项目的脚本文件,打包进zip文件的bin目录,bin目录下创建startup.sh stop.sh 启动文件,停止文件 --> <fileSet> <directory>${project.basedir}/bin</directory> <outputDirectory>bin</outputDirectory> </fileSet> <!-- 把项目的配置文件,打包进zip文件的config目录 --> <fileSet> <directory>${project.basedir}\src\main\resources</directory> <outputDirectory>conf</outputDirectory> <includes> <include>*.yml</include> <include>logback-*.xml</include> </includes> </fileSet> <fileSet> <directory>${project.build.directory}/</directory> <outputDirectory>./</outputDirectory> <includes> <include>*.jar</include> </includes> </fileSet> </fileSets> <!-- 依赖打包到lib目录下 --> <dependencySets> <dependencySet> <outputDirectory>/lib</outputDirectory> <useProjectArtifact>false</useProjectArtifact> <scope>runtime</scope> </dependencySet> </dependencySets> </assembly>
3.工程目录下创建bin目录

4.bin目录下创建startup.sh、stop.sh 脚本
startup.sh :
#!/bin/bash #sed -i "s/\r//" stop.sh 修改文件格式 source /etc/profile cmd1="nohup java -Xms512M -Xmx1024M -XX:+PrintGCDetails -Xloggc:gc.log -jar $1 -Dspring.config.location=../conf/application.yml -Dlogging.config=../conf/logback-pro.xml ../rweb.jar > output 2>&1 &" echo $cmd1 eval $cmd1
stop.sh :
#!/bin/bash #sed -i "s/\r//" stop.sh 修改文件格式 services=(rweb) #echo $services ps -aux|egrep "(rweb.jar)" ps -aux|egrep "(rweb.jar)" | cut -c 9-15 | xargs kill -9
最后执行maveninstall时会生成zip包
生成部署脚本:
#!/bin/bash # sed -i "s/\r//" jdeploy2.sh 修改换行 appName=$1 redeplayFlag=$2 relativePath='' jvmDevParam="-Denv=PRO" if [ $appName = "rweb" ]; then echo "do smthing for rweb" relativePath="rcms" elif [ $appName = "app-service" ]; then echo "do smthing for app" relativePath="rcms/microservice" elif [ $appName = "file-service" ]; then echo "do smthing for file" relativePath="rcms/microservice" elif [ $appName = "report-service" ]; then echo "do smthing for report" relativePath="rcms/microservice" else echo " ------------------------------------------------------------- " echo "| |" echo "| Use the following command to deploy(请使用以下命令完成部署): |" echo "| |" echo "| rweb: sh jdeployPro.sh rweb |" echo "| app-service: sh jdeployPro.sh app-service |" echo "| file-service: sh jdeployPro.sh file-service |" echo "| report-service: sh jdeployPro.sh report-service |" echo "| |" echo "| 重新部署: |" echo "| rweb: sh jdeployPro.sh rweb reDeploy |" echo "| app-service: sh jdeployPro.sh app-service reDeploy |" echo "| file-service: sh jdeployPro.sh file-service reDeploy |" echo "| report-service: sh jdeployPro.sh report-service reDeploy |" echo "| |" echo " ------------------------------------------------------------- " echo "" echo "" exit 1; fi echo "应用名称$appName" echo "相对路径$relativePath" cd /home/appuser/tpsys/applications/temp/target if [ $redeplayFlag = "reDeploy" ]; then cmd1="cp -r $appName.zip.temp $appName.zip" echo "redeploy $appName:" echo $cmd1 eval $cmd1 fi #解压目标文件,并将原zip文件转为备份文件 echo "\n\n\n1.解压文件" cmd1="unzip $appName.zip" cmd2="cp -r $appName.zip $appName.zip.`date +%Y%m%d_%H%M%S`" cmd3="cp -r $appName.zip $appName.zip.temp" cmd4="rm -rf $appName.zip" echo $cmd1 echo $cmd2 echo $cmd3 echo $cmd4 eval $cmd1 eval $cmd2 eval $cmd3 eval $cmd4 echo "unzip finish!" # 保留10个最新的备份文件,删除其他备份文件 size=0 echo "size init: $size" for zip_name in `ls -t $appName.zip.2*` do echo $zip_name ((size++)) echo "size: $size" if [ $size -gt 10 ];then cmd="rm -rf $zip_name " echo $cmd eval $cmd fi done echo "\n\n\n2.替换bin文件中的startup.sh stop.sh" cmd1="rm -rf /home/appuser/tpsys/applications/$relativePath/$appName/bin/startup.sh" cmd2="rm -rf /home/appuser/tpsys/applications/$relativePath/$appName/bin/stop.sh" cmd3="cp /home/appuser/tpsys/applications/temp/target/$appName/bin/startup.sh /home/appuser/tpsys/applications/$relativePath/$appName/bin/startup.sh" cmd4="cp /home/appuser/tpsys/applications/temp/target/$appName/bin/stop.sh /home/appuser/tpsys/applications/$relativePath/$appName/bin/stop.sh" cmd5="chmod 755 /home/appuser/tpsys/applications/$relativePath/$appName/bin/startup.sh" cmd6="chmod 755 /home/appuser/tpsys/applications/$relativePath/$appName/bin/stop.sh" echo $cmd1 echo $cmd2 echo $cmd3 echo $cmd4 eval $cmd1 eval $cmd2 eval $cmd3 eval $cmd4 eval $cmd5 eval $cmd6 echo "\n\n\n3.1替换lib" cmd5="cp -r /home/appuser/tpsys/applications/temp/target/$appName/lib/* /home/appuser/tpsys/applications/$relativePath/$appName/lib/" echo $cmd5 eval $cmd5 echo "\n\n\n3.2替换config" cmd5="cp -r /home/appuser/tpsys/applications/temp/config/$appName/* /home/appuser/tpsys/applications/$relativePath/$appName/conf/" echo $cmd5 eval $cmd5 echo "\n\n\n4.1替换jar包" cmd5="cp -r /home/appuser/tpsys/applications/temp/target/$appName/$appName.jar /home/appuser/tpsys/applications/$relativePath/$appName/$appName.jar" echo $cmd5 eval $cmd5 sleep 1S echo "\n\n\n4.2删除解压文件" cmd5="rm -rf /home/appuser/tpsys/applications/temp/target/$appName" echo $cmd5 eval $cmd5 echo "\n\n\n5.重启应用" cmd1="cd /home/appuser/tpsys/applications/$relativePath/$appName/bin" cmd2="sed -i \"s/\r//\" startup.sh" cmd3="sed -i \"s/\r//\" stop.sh" cmd4="sh /home/appuser/tpsys/applications/$relativePath/$appName/bin/stop.sh" cmd5="sh /home/appuser/tpsys/applications/$relativePath/$appName/bin/startup.sh $jvmDevParam" cmd6="display log cmd: tail -f /home/appuser/tpsys/applications/$relativePath/$appName/logs/info.log" echo $cmd1 echo $cmd2 echo $cmd3 echo $cmd4 echo $cmd5 echo $cmd6 eval $cmd1 eval $cmd2 eval $cmd3 eval $cmd4 eval $cmd5 #sleep 1s #eval $cmd6 exit 0;
浙公网安备 33010602011771号