zoukankan      html  css  js  c++  java
  • 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"
    

      

  • 相关阅读:
    MDX Step by Step 读书笔记(六) Building Complex Sets (复杂集合的处理) Filtering Sets
    在 Visual Studio 2012 开发 SSIS,SSAS,SSRS BI 项目
    微软BI 之SSIS 系列 在 SSIS 中读取 SharePoint List
    MDX Step by Step 读书笔记(五) Working with Expressions (MDX 表达式) Infinite Recursion 和 SOLVE_ORDER 原理解析
    MDX Step by Step 读书笔记(五) Working with Expressions (MDX 表达式)
    使用 SQL Server 2012 Analysis Services Tabular Mode 表格建模 图文教程
    MDX Step by Step 读书笔记(四) Working with Sets (使用集合) Limiting Set and AutoExists
    SQL Server 2012 Analysis Services Tabular Model 读书笔记
    Microsoft SQL Server 2008 MDX Step by Step 学习笔记连载目录
    2011新的开始,介绍一下AgileEAS.NET平台在新的一年中的发展方向
  • 原文地址:https://www.cnblogs.com/zhaixingzhu/p/12858994.html
Copyright © 2011-2022 走看看