• SpringBoot - 使用maven-assembly-plugin插件将项目打包为.tar.gz格式的压缩包(一)


    写在前面

    基于SpringBoot框架开发的代码,打包时默认将配置文件等信息全部打包进一个JAR包中,当仅仅需要修改配置文件时就变的比较麻烦,那怎么办呢?通过assembly则可以解决该问题。

    具体步骤

    ①. 新增打包插件
    <plugin>
      <!-- 添加MAVEN提供的ASSEMBLY插件,默认使用spring-boot-maven-plugin打包,将项目所有的依赖打入到项目的JAR包里-->
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.1.1</version>
      <configuration>
          <descriptors>
              <descriptor>src/main/assembly/assembly.xml</descriptor>
          </descriptors>
      </configuration>
      <executions>
          <execution>
              <id>make-assembly</id>
              <!--绑定到MAVEN的操作类型上-->
              <phase>package</phase>
              <!--仅仅运行一次-->
              <goals>
                  <goal>single</goal>
              </goals>
          </execution>
      </executions>
    </plugin>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    ②. 新增assembly.xml配置文件

    配置文件的路径为:src/main/assembly/assembly.xml

    ③. 编写assembly.xml配置文件的内容
    <assembly>
      <!--
          ID标签必须指定,ID会追加到打包的名字的末尾,项目名为:servicex-test-0.0.1-SNAPSHOT,
          打包后的名字为:servicex-test-0.0.1-SNAPSHOT-bin.tar.gz
       -->
      <id>bin</id>
      
      <!-- 打包文件的类型,如果要输出多个类型的打包文件,则定义多个 -->
      <formats>
          <format>tar.gz</format>
          <!--<format>tar</format>-->
          <!--<format>zip</format>-->
      </formats>
      <includeBaseDirectory>true</includeBaseDirectory>
      
      <!--文件复制与设置-->
      <fileSets>
          <!--
              0755: 即用户具有读//执行权限,组用户和其它用户具有读写权限;
              0644: 即用户具有读写权限,组用户和其它用户具有只读权限;
          -->
          <!-- 1. 将src/main/assembly/bin目录下的所有文件输出到打包后的bin目录中 -->
          <fileSet>
              <directory>src/main/assembly/bin</directory>
              <outputDirectory>bin</outputDirectory>
              <fileMode>0755</fileMode>
              <!--如果是执行脚本,一定要改为unix,否则当在windows上面时,脚本会出现dos编写问题-->
              <lineEnding>unix</lineEnding>
              <!-- 是否进行属性替换 -->
              <filtered>true</filtered>
          </fileSet>
          
          <!-- 2. 将src/main/assembly/sql目录下的所有文件输出到打包后的sql目录中 -->
          <fileSet>
              <directory>src/main/assembly/sql</directory>
              <outputDirectory>sql</outputDirectory>
              <fileMode>0644</fileMode>
          </fileSet>
          
          <!-- 3. 将src/main/resources下配置文件打包到config目录 -->
          <fileSet>
              <directory>src/main/resources</directory>
              <outputDirectory>/config</outputDirectory>
              <includes>
                  <include>**/*.xml
                  **/*.properties</include>
                  <include>**/*.yml
              
              
              true
          
          
          
          
              target
              lib
              
                  *.jar
              
          
          
          
          
              .
              doc
              
                  *.md
              
              0644
          
          
          
          
              doc
              doc
              0644
          
          
          
          
              src/main/assembly/doc
              doc
              0644
          
          
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    ④. 定义服务的启停脚本
    
    #!/bin/bash
    
    # 定义变量 ##############################
    
    # 项目名称
    SERVER_NAME="${project.artifactId}"
    
    # JAR名称
    JAR_NAME="${project.build.finalName}.jar"
    
    # 进入bin目录
    cd `dirname $0`
    
    # bin目录绝对路径
    BIN_DIR=`pwd`
    
    # 返回到上一级项目根目录路径
    cd ..
    
    # 打印项目根目录绝对路径
    # `pwd` 执行系统命令并获得结果
    DEPLOY_DIR=`pwd`
    
    # 外部配置文件绝对目录,如果是目录需要/结尾,也可以直接指定文件
    # 如果指定的是目录,spring则会读取目录中的所有配置文件
    CONF_DIR=$DEPLOY_DIR/conf
    
    # 加载外部log4j2文件的配置
    LOG_BACK_FILE=logback.xml
    
    echo "The command is as follow..."
    echo "ps -ef | grep java | grep $JAR_NAME | grep -v grep | awk '{print \$2}'"
    
    # 如果输入参数不对,给出提示
    usage() {
    	echo "WARNING......"
    	echo "Tips, please use command: sh servicex-test.sh [start|stop|restart|status]. "
    	echo "For example: sh servicex-test.sh start "
    	exit 1
    }
    
    # 启动
    start() {
        PIDS=`ps -ef | grep java | grep "$JAR_NAME" | grep -v grep | awk '{print $2}'`
        if [ -n "$PIDS" ]; then
            echo "ERROR: The $SERVER_NAME already started!"
            echo "THE PID IS: $PIDS"
            exit 1
        fi
    
        # JVM Configuration
        JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
    
        JAVA_MEM_OPTS=""
        BITS=`java -version 2>&1 | grep -i 64-bit`
        if [ -n "$BITS" ]; then
            # 64位
            JAVA_MEM_OPTS=" -server -Xmx512m -Xms512m -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
        else
            JAVA_MEM_OPTS=" -server -Xms512m -Xmx512m -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
        fi
    
        # 日志配置文件
        LOG_BACK_CONFIG=""
        if [ -f "$CONF_DIR/$LOG_BACK_FILE" ]
        then
            LOG_BACK_CONFIG="-Dlogging.config=$CONF_DIR/$LOG_BACK_FILE"
        fi
    
        CONFIG_FILES=" $LOG_BACK_CONFIG -Dspring.config.location=$CONF_DIR/ "
        echo -e "Starting the $SERVER_NAME ..."
        nohup java $JAVA_OPTS $JAVA_MEM_OPTS $CONFIG_FILES -jar $DEPLOY_DIR/$JAR_NAME > /dev/null 2>&1 &
    
        echo "The $SERVER_NAME started successfully..."
        PIDS=`ps -ef | grep java | grep "$JAR_NAME" | grep -v grep | awk '{print $2}'`
        echo "THE PID IS: $PIDS"
        exit 0
    }
    
    # 停止
    stop() {
        PIDS=`ps -ef | grep java | grep "$JAR_NAME" | grep -v grep | awk '{print $2}'`
        if [[ -z "$PIDS" ]]
        then
            echo "The $SERVER_NAME is stopped..."
        else
            echo -e "Stopping the $SERVER_NAME ..."
            echo kill  ${PIDS}
            kill -9 ${PIDS}
            echo "The $SERVER_NAME stopped successfully..."
            exit 0
        fi
    }
    
    # 状态
    status() {
        PIDS=`ps -ef | grep java | grep "$JAR_NAME" | grep -v grep | awk '{print $2}'`
        if [ -n "$PIDS" ]; then
            echo "The $SERVER_NAME is running..."
            echo "THE PID IS: $PIDS"
            exit 0
        else
            echo "The $SERVER_NAME is stopped..."
            exit 0
        fi
    }
    
    # 重启
    restart() {
    	stop
    	start
    }
    
    # 根据输入参数执行对应方法,不输入则执行tips提示方法
    case "$1" in
       "start")
         start
         ;;
       "stop")
         stop
         ;;
       "status")
         status
         ;;
       "restart")
         restart
         ;;
       *)
         usage
         ;;
    esac
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    ⑤. 项目的目录结构

    在这里插入图片描述

    ⑥. 按常规方式打包
    ⑦. 输出项目发布包:servicex-test-1.0-SNAPSHOT-bin.tar.gz
  • 相关阅读:
    成语词典查询易语言代码
    油猴插件(Tampermonkey)的使用教程
    c语言程序范例
    【C++程序员必修第一课】C++基础课程-05:运算符(上)
    关于深度学习的概念理解(笔记)
    MYSQL中的JDBC操作
    Python实现四维图像绘制系统
    音视频开发常用名词解释
    CLIP-LITE造假
    Tomcat
  • 原文地址:https://blog.csdn.net/goodjava2007/article/details/126521013