jar包与依赖分离的打包方式

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;

 

posted on 2021-08-31 10:33  宋梦强  阅读(419)  评论(0)    收藏  举报