• Maven插件maven-assembly-plugin进行打包部署


    maven程序集插件提供了一种描述符格式,允许您定义项目中文件和目录的任意程序集。例如,如果Maven项目包含目录“src/main/bin”,则可以指示程序集插件将此目录的内容复制到程序集的“bin”目录,并将“bin”目录中文件的权限更改为UNIX模式755。配置此行为的参数通过程序集描述符提供给程序集插件。

    目前,它可以创建以下格式的发行版:

    我们平时在开发过程中的项目目录结构是这样的:

    在用maven进行打包后,希望得到的目录是这样的

    bin: 启动脚本

    conf: 配置信息 

    lib:用的jar包

    logs:所有日志信息

    输出的格式为 tar.gz 在assembly.xml中可以这样配置:

    <assembly>
        <id>assembly</id>
      <!-- 输出格式 -->
        <formats>
            <format>tar.gz</format>
        </formats>
        <includeBaseDirectory>true</includeBaseDirectory>
      <!-- 指定文件组的组装方式 -->
        <fileSets>
          <!-- 将项目中src/main/bin目录下的脚本文件copy到target目录的bin目录下 -->
            <fileSet>
                <directory>src/main/assembly/bin</directory>
                <outputDirectory>bin</outputDirectory>
     <!--
                0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限;
                0644->即用户具有读写权限,组用户和其它用户具有只读权限;
            -->
                <fileMode>0755</fileMode>
            </fileSet>
          <!-- 将项目中src/main/resources目录下的资源文件copy到target目录的conf目录下 -->
            <fileSet>
                <directory>src/main/resources</directory>
                <outputDirectory>conf</outputDirectory>
                <fileMode>0644</fileMode>
            </fileSet>
          <!-- 将项目中src/main/resources目录下的日志文件copy到target目录的logs目录下 -->
            <fileSet>
                <directory>src/main/resources</directory>
                <outputDirectory>logs</outputDirectory>
                <fileMode>0755</fileMode>
                <excludes>
                    <exclude>**/*</exclude>
                </excludes>
            </fileSet>
          <!-- 将项目中target目录下的包含jar的文件copy到lib目录下 -->
            <fileSet>
                <directory>target</directory>
                <outputDirectory>lib</outputDirectory>
                <includes>
                    <include>*.jar</include>
                </includes>
            </fileSet>
        </fileSets>
    </assembly>
    

      如果想把一些依赖库打到包里,可以用 dependencySets 元素,定义依赖包打包到目录下

      <!-- 指定依赖jar包输出的目录 -->
      <dependencySets>
      	<dependencySet>
      		<useProjectArtifact>true</useProjectArtifact>
      		<outputDirectory>lib</outputDirectory>
      		<!-- 只包含runtime作用域的依赖 -->
      		<scope>runtime</scope>
      	</dependencySet>
      </dependencySets>
    

      排除文件,在fileSet里可以使用includes 和 excludes来更精确的控制哪些文件要添加,哪些文件要排除。
    例如要排除某个目录下所有的txt文件:

    <fileSet>  
        <directory>target/classes</directory>  
        <outputDirectory>/</outputDirectory>  
        <excludes>  
            <exclude>**/*.txt</exclude>  
        </excludes>  
    </fileSet>
    

      在pom文件中进行添加maven-assembly-plugin插件来定制化打包

     <build>
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <fork>true</fork>
                        <executable>true</executable>
                        <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!-- 编码和编译和JDK版本 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler-plugin.version}</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <encoding>${project.build.sourceEncoding}</encoding>
                    </configuration>
                </plugin>
                <!--添加打包插件声明 -->
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <descriptors>
                            <descriptor>src/main/assembly/assembly.xml</descriptor>
                        </descriptors>
                    </configuration>
                    <!--执行器 mvn assembly:assembly-->
                    <executions>
                        <execution>
                            <!--名字任意 -->
                            <id>make-assembly</id>
                            <!-- 绑定到package生命周期阶段上 -->
                            <phase>package</phase>
                            <!-- 只运行一次 -->
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

      startup.bat 启动脚本

    @echo off
    
    set APP_NAME=zhaixingzu.jar
    
    set CONFIG= -Dlogging.path=../logs  -Dspring.config.location=../conf/application.yml
    
    set DEBUG_OPTS=
    if ""%1"" == ""debug"" (
       set DEBUG_OPTS= -Xloggc:../logs/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs 
       goto debug
    )
    
    set JMX_OPTS=
    if ""%1"" == ""jmx"" (
       set JMX_OPTS= -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9888 -Dcom.sun.management.jmxremote.ssl=FALSE -Dcom.sun.management.jmxremote.authenticate=FALSE 
       goto jmx
    )
    
    echo "Starting the %APP_NAME%"
    java -Xms512m -Xmx512m -server %DEBUG_OPTS% %JMX_OPTS% %CONFIG% -jar ../lib/%APP_NAME%
    goto end
    
    :debug
    echo "debug"
    java -Xms512m -Xmx512m -server %DEBUG_OPTS% %CONFIG% -jar ../lib/%APP_NAME%
    goto end
    
    :jmx
    java -Xms512m -Xmx512m -server %JMX_OPTS% %CONFIG% -jar ../lib/%APP_NAME%
    goto end
    
    :end
    pause
    

      startup.sh 启动脚本

    #!/bin/bash
    
    SERVER_NAME='zhaixingzu'
    JAR_NAME="$SERVER_NAME.jar"
    cd `dirname $0`
    BIN_DIR=`pwd`
    cd ..
    DEPLOY_DIR=`pwd`
    CONF_DIR=$DEPLOY_DIR/conf
    
    #SERVER_PORT=`sed -nr '/port: [0-9]+/ s/.*port: +([0-9]+).*/1/p' conf/application.yml`
    SERVER_PORT='8082'
    
    PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`
    if [ "$1" = "status" ]; then
        if [ -n "$PIDS" ]; then
            echo "The $SERVER_NAME is running...!"
            echo "PID: $PIDS"
            exit 0
        else
            echo "The $SERVER_NAME is stopped"
            exit 0
        fi
    fi
    
    if [ -n "$PIDS" ]; then
        echo "ERROR: The $SERVER_NAME already started!"
        echo "PID: $PIDS"
        exit 1
    fi
    
    if [ -n "$SERVER_PORT" ]; then
        SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
        if [ $SERVER_PORT_COUNT -gt 0 ]; then
            echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"
            exit 1
        fi
    fi
    
    LOGS_DIR=$DEPLOY_DIR/logs
    if [ ! -d $LOGS_DIR ]; then
        mkdir $LOGS_DIR
    fi
    STDOUT_FILE=$LOGS_DIR/stdout.log
    
    JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
    JAVA_DEBUG_OPTS=""
    if [ "$1" = "debug" ]; then
        JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
    fi
    
    JAVA_JMX_OPTS=""
    if [ "$1" = "jmx" ]; then
        JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
    fi
    
    JAVA_MEM_OPTS=""
    BITS=`java -version 2>&1 | grep -i 64-bit`
    if [ -n "$BITS" ]; then
        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
    
    CONFIG_FILES=" -Dlogging.path=$LOGS_DIR -Dspring.config.location=$CONF_DIR/application.yml "
    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 &
    
    COUNT=0
    while [ $COUNT -lt 1 ]; do
        echo -e ".c"
        sleep 1
        if [ -n "$SERVER_PORT" ]; then
            COUNT=`netstat -an | grep $SERVER_PORT | wc -l`
        else
        	COUNT=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l`
        fi
        if [ $COUNT -gt 0 ]; then
            break
        fi
    done
    
    
    echo "OK!"
    PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'`
    echo "PID: $PIDS"
    echo "STDOUT: $STDOUT_FILE"
    

      

  • 相关阅读:
    MFC列表控件更改一行的字体颜色
    MFC之sqlite
    MFC笔记10
    MFC---关于string.h相关函数
    MFC笔记8
    MFC笔记7
    MFC笔记6
    MFC笔记5
    MFC笔记4
    MFC笔记3
  • 原文地址:https://www.cnblogs.com/zhaixingzhu/p/12858994.html
Copyright © 2020-2023  润新知