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

环境配置

在你的 pom.xml 文件中添加如下配置: 
< profiles >
   < profile >  <!--  可以通过 -P ID 来激活  -->
     < id >PROD </ id >  <!--  ID 标识符  -->
     < properties >
       < env >PROD </ env >  <!--  properties 定义 key-value, 这里 key 是 env, value 是 PROD  -->
     </ properties >
     < activation >
       < activeByDefault >true </ activeByDefault >  <!--  默认激活  -->
     </ activation >
   </ profile >
   < profile >  <!--  可以通过 -P ID 来激活  -->
     < id >TEST </ id >  <!--  ID 标识符  -->
     < properties >
       < env >TEST </ env >  <!--  properties 定义 key-value, 这里 key 是 env, value 是 TEST  -->
     </ properties >
   </ profile >
</ profiles >
上面定义了两套环境的配置,一套是用于生产环境的 PROD,另外一套是用于测试环境的 TEST。profile 可以通过 -P 参数来激活,如 -PTEST
(或 -P TEST)即可激活 TEST 配置。TEST 配置激活之后,通过 ${env} 表达式即可获得 <env>TEST</env> 配置的 TEST 字符串值。 

assembly 插件

maven-assembly-plugin 插件可以实现自定义打包。在你的 pom.xml 文件中添加如下配置: 
< build >
   < plugins >
     < plugin >
       < artifactId >maven-assembly-plugin </ artifactId >  <!--  官网给出的配置,没有配置 groupId,这里也不配置  -->
       < version >2.4 </ version >
       < executions >
         < execution >
           < id >make-assembly </ id >  <!--  ID 标识,命名随意  -->
           < phase >package </ phase >  <!--  绑定到 PACKAGE 生命周期阶段  -->
           < goals >
             < goal >single </ goal >   <!--  在 PACKAGE 生命周期阶段仅执行一次  -->
           </ goals >
         </ execution >
       </ executions >
       < configuration >
         < descriptors >
           < descriptor >assembly.xml </ descriptor >  <!--  自定义打包的配置文件  -->
         </ descriptors >
         < appendAssemblyId >false </ appendAssemblyId >  <!--  设为 FALSE, 防止 WAR 包名加入 assembly.xml 中的 ID  -->
       </ configuration >
     </ plugin >
   </ plugins >
</ build >
在项目的根目录下创建一个 assembly.xml 文件(与 pom.xml 文件在同一个目录)。示例项目的结构如下: 

不管是开发环境、测试环境还是生产环境等,它们通常只是配置文件不一样,下面实现根据不同的参数打包出适应各个不同环境的 WAR 包。

assembly.xml 配置

assembly.xml 文件的配置如下:
< 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 >
       </ excludes >
     </ fileSet >
     <!--  将 env/${env}/conf 下的文件输出到 WEB-INF/classes/conf, 实现 -P 不同的参数打包出不同的配置  -->
     <!--  ${env} 的值由 -P 的参数传递进来, 如:-PTEST, 那么, ${env} 的值就是 TEST  -->
     < fileSet >
       < directory >${project.basedir}/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 >

打包出适应各个环境的 WAR 包

选中项目右键 --> Run As --> Maven build... --> Goals 栏输入  -PTEST clean package  。 

执行完成即可打包出测试环境的 WAR 包(示例源码下载: proj-web.zip )。
你可以将打包出来的 WAR 包重命名为 ROOT.war,然后把它丢到 Tomcat 的 webapps 目录下,备份删除 ROOT 文件夹,启动/重启 Tomcat 即可。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值