maven 为测试环境、开发环境、生产环境等不同环境打包

配置的步骤如下:

* 加入 profiles 配置
* 加入 maven-assembly-plugin 插件
* 加入 assembly.xml 的配置文件
* 加入 不同环境的配置文件

环境配置. 首先配置你的pom.xml文件.
配置 profiles, 配置如下:

<profiles>
      <profile> <!-- 可以通过 -P ID 来激活 -->
           <id>DEV</id> <!-- ID 标识符 -->
           <properties>
                <env>DEV</env> <!-- properties 定义 key-value, 这里 key 是 env, value 是 PROD -->
           </properties>
           <activation>
           <activeByDefault>true</activeByDefault> <!-- 默认激活 --></activation>
      </profile>
      <profile> <!-- 可以通过 -P ID 来激活 -->
            <id>PROD</id> <!-- ID 标识符 -->
            <properties>
                 <env>PROD</env> <!-- properties 定义 key-value, 这里 key 是 env, value 是 TEST -->
            </properties>
       </profile>
</profiles>

配置 maven-assembly-plugin 插件, 配置如下:

<build>
     <plugins>
          <plugin>
               <artifactId>maven-assembly-plugin</artifactId> <!-- 官网给出的配置,没有配置 groupId,这里也不配置 -->
               <version>3.0.0</version>
               <executions>
                    <execution>
                         <id>make-assembly</id> <!-- ID 标识,命名随意 -->
                         <phase>package</phase> <!-- 绑定到 PACKAGE 生命周期阶段 -->
                         <goals>
                              <goal>single</goal>  <!-- 在 PACKAGE 生命周期阶段仅执行一次 -->
                         </goals>
                    </execution>
               </executions>
               <configuration>
                    <descriptors>
                         <descriptor>${project.basedir}/src/main/resources/assembly/assembly.xml</descriptor> <!-- 自定义打包的配置文件 -->
                    </descriptors>
                    <appendAssemblyId>false</appendAssemblyId> <!-- 设为 FALSE, 防止 WAR 包名加入 assembly.xml 中的 ID -->
               </configuration>
           </plugin>
     </plugins>
</build>

配置 assembly.xml 文件, 把文件放到 src/main/resources/assembly 中. 配置如下:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
     <!-- ID 标识,命名随意 -->
     <id>${project.artifactId}-assembly-${project.version}</id>
     <!-- 默认为 TRUE, 设为 FALSE, 防止将 ${project.finalName} 作为根目录打进 WAR 包 -->
     <!-- TRUE 结构: ${project.finalName}.war/${project.finalName}/WEB-INF -->
     <!-- FALSE 结构: ${project.finalName}.war/WEB-INF -->
     <includeBaseDirectory>false</includeBaseDirectory>
     <!-- 设置为 WAR 包格式 -->
     <formats>
          <format>war</format>
     </formats>
     <fileSets>
          <!-- 将 target/classes 下的文件输出到 WEB-INF/classes, 同时排除 target/classes/conf/*.properties -->
          <fileSet>
               <directory>${project.build.outputDirectory}</directory> <!-- target/classes -->
               <outputDirectory>WEB-INF/classes</outputDirectory>
               <excludes>
                    <exclude>**/conf/*.properties</exclude>
                    <exclude>**/assembly/**</exclude>
               </excludes>
           </fileSet>
           <!-- 将 env/${env}/conf 下的文件输出到 WEB-INF/classes/conf, 实现 -P 不同的参数打包出不同的配置 -->
           <!-- ${env} 的值由 -P 的参数传递进来, 如:-PTEST, 那么, ${env} 的值就是 TEST -->
           <fileSet>
                <directory>${project.basedir}/src/main/resources/assembly/env/${env}/conf</directory>
                <outputDirectory>WEB-INF/classes/conf</outputDirectory>
           </fileSet>
           <!-- 将 webapp 下的文件输出到 WAR 包 -->
           <fileSet>
               <directory>${project.basedir}/src/main/webapp</directory>
               <outputDirectory>/</outputDirectory>
           </fileSet>
     </fileSets>
     <!-- 将项目依赖的JAR包输出到 WEB-INF/lib -->
     <dependencySets>
          <dependencySet>
               <outputDirectory>WEB-INF/lib</outputDirectory>
          </dependencySet>
     </dependencySets>
</assembly>

在 src/main/resources/assembly/env 中加入不同的配置. 配置截图如下:

配置完成之后, 使用 右击 项目, 进行 Run as -> maven build….
选择该项目然后, 加入命令 -PPROD clear package
然后, 执行 Run as -> maven build 就开始打包.

这里需要注意一点, 还没有知道解决方式, 就是打包的时候, 会把对应的 war 也会打包到 WEB-INF/lib 中, 我现在的做法是, 手动删除了.

如有帮助, 可以支持一下
分享到:

发表评论

昵称

沙发空缺中,还不快抢~