喜欢E文的直接看原文:https://maven.apache.org/guid...

同一项目为不同环境构建总是个麻烦事。你可能有测试和生产服务器,也可能有一组服务器运行同一个应用,但使用不同的配置参数。本指南意在使用侧面(profiles) 来对项目进行指定环境打包。可以参考Profile概念的介绍以了解更多。

提示:

本指南假设你对 Maven 2 有基本的了解。会有简单的maven设置介绍。简单是指你的项目配置里仅有少数文件根据环境的不同有所变化。两维甚至多维度配置变化时有其他更好的解决方法。
这个例子中采用标准的目录结构:

pom.xml
src/
  main/
    java/
    resources/
  test/
    java/

在 src/main/resources 下有三个文件:

  • environment.properties - 这是默认配置并会打包到最终发布包里.
  • environment.test.properties - 这是用于测试的配置方案.
  • environment.prod.properties - 这是与测试方案类似用于生产环境的配置.

在项目描述符里, 你需要配置不同的profiles. 这里只列出的测试用的profile.

 <profiles>
   <profile>
     <id>test</id>
     <build>
       <plugins>
         <plugin>
           <artifactId>maven-antrun-plugin</artifactId>
           <executions>
             <execution>
               <phase>test</phase>
               <goals>
                 <goal>run</goal>
               </goals>
               <configuration>
                 <tasks>
                   <delete file="${project.build.outputDirectory}/environment.properties"/>
                   <copy file="src/main/resources/environment.test.properties"
                         tofile="${project.build.outputDirectory}/environment.properties"/>
                 </tasks>
               </configuration>
             </execution>
           </executions>
         </plugin>
         <plugin>
           <artifactId>maven-surefire-plugin</artifactId>
           <configuration>
             <skip>true</skip>
           </configuration>
         </plugin>
         <plugin>
           <artifactId>maven-jar-plugin</artifactId>
           <executions>
             <execution>
               <phase>package</phase>
               <goals>
                 <goal>jar</goal>
               </goals>
               <configuration>
                 <classifier>test</classifier>
               </configuration>
             </execution>
           </executions>
         </plugin>
       </plugins>
     </build>
   </profile>

   .. Other profiles go here ..

 </profiles>

这段代码里配置了三件事:

  1. 配置了 antrun 插件在测试阶段运行,将拷贝environment.test.properties文件到 environment.properties.
  2. 配置了在编译测试包和生成包时测试插件跳过所有测试. 这可能对你有用,因为你可能不想对生产环境进行测试。
  3. 配置了JAR插件用于创建带test修饰标识的JAR包。

激活执行这个profile办法是 mvn -Ptest install ,除正常步骤还将执行Profile里定义的步骤. 你将得到两人个包, "foo-1.0.jar" 和 "foo-1.0-test.jar". 这两个包是一样的.

小心:

Maven 2 不能只编有修饰符的包. (i.e. 他非要生成包) 所以搞出来俩一样的. JAR插件需要改进啊。能编到不同目录下会更好。
使用删除任务看上去有些怪异,只是为了确保能拷贝文件。拷贝任务会看源文件和目标文件的时间戳, 只拷贝和上次不同的文件.
编译后配置文件会在 target/classes 中, 他不会被覆盖,因为resources插件也使用同样的时间戳检查, 所以按这个profile构建时总要清理.

所以强制你每次构建时只能为单一环境构建一个单一的包.然后 "mvn clean" 如果你更改了profile选项参数. 要不的话你会把不同环境的配置混到一块去啦。

文献:

侧面构建入门
标准目录结构


Yujiaao
12.7k 声望4.7k 粉丝

[链接]