最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Apache Maven Assembly自定義打包插件的使用

2023-03-02 08:12 作者:Cpp程序員  | 我要投稿

概述

  • 是什么:Apache Maven Assembly是Maven的程序集插件使開發(fā)人員能夠?qū)㈨椖枯敵龊喜⒌絾蝹€可分發(fā)的存檔中,該存檔還包含依賴項、模塊、站點文檔和其他文件。

  • 作用:可以實現(xiàn)自定義打包,從而實現(xiàn)打包項目可以外掛yml配置文件,提供shell運維腳本,大大降低運維成本,比較適用于小規(guī)模的SpringBoot項目(大規(guī)模的項目推薦docker容器部署)

配置說明

  1. 引入插件(pom文件中)

    <?xml version="1.0" encoding="UTF-8"?><project>...<build><plugins><!--springboot項目打包插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.7.RELEASE</version><configuration><mainClass>com.alan.SpringBootMain</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><!--maven自定義打包插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.5.0</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></plugins></build></project>
  2. 配置assembly文件(在pom中設(shè)定的位置下創(chuàng)建,我這里是src/main/assembly/assembly.xml)

    <assembly><!-- ? ? ? ?必須寫,否則打包時會有 assembly ID must be present and non-empty 錯誤 ? ? ? ?這個名字最終會追加到打包的名字的末尾,如項目的名字為 hangge-test-0.0.1-SNAPSHOT, ? ? ? ?則最終生成的包名為 hangge-test-0.0.1-SNAPSHOT-bin.tar.gz ? ?--><id>bin</id><!-- 打包的類型,如果有N個,將會打N個類型的包 --><formats><format>tar.gz</format><!--<format>zip</format>--></formats><includeBaseDirectory>true</includeBaseDirectory><!--第三方依賴設(shè)置--><dependencySets><dependencySet><!--使用項目中的artifact,第三方包打包進tar.gz文件的lib目錄下--><useProjectArtifact>true</useProjectArtifact><outputDirectory>lib</outputDirectory></dependencySet></dependencySets><!--文件設(shè)置--><fileSets><!-- ? ? ? ? ? ?0755->即用戶具有讀/寫/執(zhí)行權(quán)限,組用戶和其它用戶具有讀寫權(quán)限; ? ? ? ? ? ?0644->即用戶具有讀寫權(quán)限,組用戶和其它用戶具有只讀權(quán)限; ? ? ? ?--><!-- 將src/main/assembly/bin目錄下的所有文件輸出到打包后的bin目錄中 --><fileSet><directory>src/main/assembly/bin</directory><outputDirectory>bin</outputDirectory><fileMode>0755</fileMode><!--如果是腳本,一定要改為unix.如果是在windows上面編碼,會出現(xiàn)dos編寫問題--><lineEnding>unix</lineEnding><filtered>true</filtered><!-- 是否進行屬性替換 --></fileSet><!-- 將src/main/assembly/config目錄下的所有文件輸出到打包后的config目錄中 --><fileSet><directory>src/main/assembly/config</directory><outputDirectory>config</outputDirectory><fileMode>0644</fileMode></fileSet><!-- 將src/main/resources下配置文件打包到config目錄 --><fileSet><directory>src/main/resources</directory><outputDirectory>/config</outputDirectory><includes><include>**/*.xml</include><include>**/*.properties</include><include>**/*.yml</include></includes><filtered>true</filtered><!-- 是否進行屬性替換 --></fileSet><!-- 將項目啟動jar打包到lib目錄中 --><fileSet><directory>target</directory><outputDirectory>lib</outputDirectory><includes><include>*.jar</include></includes></fileSet><!-- 將項目說明文檔打包到docs目錄中 --><fileSet><directory>.</directory><outputDirectory>docs</outputDirectory><includes><include>*.md</include></includes><fileMode>0644</fileMode></fileSet><fileSet><directory>docs</directory><outputDirectory>docs</outputDirectory><fileMode>0644</fileMode></fileSet><fileSet><directory>src/main/assembly/docs</directory><outputDirectory>docs</outputDirectory><fileMode>0644</fileMode></fileSet></fileSets></assembly>
  3. 編寫運維shell腳本(在assembly中設(shè)定的位置下創(chuàng)建,我這里是src/main/assembly/bin)

    1. start.sh

      #!/bin/bash# 項目名稱SERVER_NAME="${project.artifactId}"# jar名稱JAR_NAME="${project.build.finalName}.jar"# 進入bin目錄cd `dirname $0`# bin目錄絕對路徑BIN_DIR=`pwd`# 返回到上一級項目根目錄路徑cd ..# 打印項目根目錄絕對路徑# `pwd` 執(zhí)行系統(tǒng)命令并獲得結(jié)果DEPLOY_DIR=`pwd`# 外部配置文件絕對目錄,如果是目錄需要/結(jié)尾,也可以直接指定文件# 如果指定的是目錄,spring則會讀取目錄中的所有配置文件CONF_DIR=$DEPLOY_DIR/config# SERVER_PORT=`sed '/server.port/!d;s/.*=//' config/application.properties | tr -d '\r'`# 獲取應(yīng)用的端口號SERVER_PORT=`sed -nr '/port: [0-9]+/ s/.*port: +([0-9]+).*/\1/p' config/application.yml`PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`if [ "$1" = "status" ]; thenif [ -n "$PIDS" ]; thenecho "The $SERVER_NAME is running...!"echo "PID: $PIDS"exit 0elseecho "The $SERVER_NAME is stopped"exit 0fifiif [ -n "$PIDS" ]; thenecho "ERROR: The $SERVER_NAME already started!"echo "PID: $PIDS"exit 1fiif [ -n "$SERVER_PORT" ]; thenSERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`if [ $SERVER_PORT_COUNT -gt 0 ]; thenecho "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"exit 1fifi# 項目日志輸出絕對路徑LOGS_DIR=$DEPLOY_DIR/logs# 如果logs文件夾不存在,則創(chuàng)建文件夾if [ ! -d $LOGS_DIR ]; thenmkdir $LOGS_DIRfiSTDOUT_FILE=$LOGS_DIR/catalina.log# JVM ConfigurationJAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "JAVA_DEBUG_OPTS=""if [ "$1" = "debug" ]; thenJAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "fiJAVA_JMX_OPTS=""if [ "$1" = "jmx" ]; thenJAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "fiJAVA_MEM_OPTS=""BITS=`java -version 2>&1 | grep -i 64-bit`if [ -n "$BITS" ]; thenJAVA_MEM_OPTS=" -server -Xmx512m -Xms512m -XX:PermSize=128m -XX:+UseG1GC "elseJAVA_MEM_OPTS=" -server -Xms512m -Xmx512m -XX:PermSize=128m -XX:+UseParallelGC "fi# 加載外部log4j2文件的配置LOG_IMPL_FILE=log4j2.xmlLOGGING_CONFIG=""if [ -f "$CONF_DIR/$LOG_IMPL_FILE" ]thenLOGGING_CONFIG="-Dlogging.config=$CONF_DIR/$LOG_IMPL_FILE"fiCONFIG_FILES=" -Dlogging.path=$LOGS_DIR $LOGGING_CONFIG -Dspring.config.location=$CONF_DIR/ "echo -e "Starting the $SERVER_NAME ..."nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS $CONFIG_FILES -jar $DEPLOY_DIR/lib/$JAR_NAME > $STDOUT_FILE 2>&1 &echo "OK!"PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'`echo "PID: $PIDS"echo "STDOUT: $STDOUT_FILE"
    2. stop.sh

      #!/bin/bash# 項目名稱APPLICATION="${project.artifactId}"# 項目啟動jar包名稱APPLICATION_JAR="${project.build.finalName}.jar"# 通過項目名稱查找到PI,然后kill -9 pidPID=$(ps -ef | grep "${APPLICATION_JAR}" | grep -v grep | awk '{ print $2 }')if [[ -z "$PID" ]]thenecho ${APPLICATION} is already stoppedelseecho kill ?${PID}kill -9 ${PID}echo ${APPLICATION} stopped successfullyfi
  4. 打包項目

    1. 項目下執(zhí)行mvn clean package命令進行打包,打包后的壓縮包路徑/project_url/target/test01-1.0-SNAPSHOT-bin.tar.gz;

    2. 打包后的項目文件如下:

  1. 運行項目

    1. 解壓文件:tar -zxvf /project_url/target/test01-1.0-SNAPSHOT-bin.tar.gz

    2. 進入bin目錄下:cd /project_url/target/test01-1.0-SNAPSHOT/bin

    3. 運行項目:sh start.sh,運行日志在/project_url/target/test01-1.0-SNAPSHOT/logs路徑下

    4. 關(guān)閉項目:sh stop.sh


Apache Maven Assembly自定義打包插件的使用的評論 (共 條)

分享到微博請遵守國家法律
伊春市| 屏东县| 上林县| 手游| 彩票| 瓮安县| 盐边县| 新巴尔虎左旗| 沾化县| 龙游县| 北辰区| 石林| 简阳市| 伊川县| 浑源县| 罗甸县| 都安| 桂平市| 萝北县| 武定县| 宝山区| 康马县| 富阳市| 汉中市| 许昌县| 页游| 简阳市| 双柏县| 秦安县| 仙居县| 白玉县| 前郭尔| 南平市| 荥经县| 车致| 白银市| 青冈县| 鄂州市| 日喀则市| 阿拉善左旗| 浏阳市|