Maven项目多环境构建的最小配置方案指南

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

喜欢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选项参数. 要不的话你会把不同环境的配置混到一块去啦。


文献


侧面构建入门

标准目录结构

相关文章
|
1天前
|
Java Apache Maven
Maven 项目文档
在 `C:/MVN` 目录下创建 Maven 项目 `consumerBanking` 使用命令:`mvn archetype:generate -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false`。为解决 `mvn site` 命令执行时的 `NoClassDefFoundError`
|
1天前
|
存储 Java Maven
Maven 构建 Java 项目
使用 Maven 的 `maven-archetype-quickstart` 插件在 `C:\MVN` 创建 Java 应用项目 `consumerBanking`,命令行参数包括 `-DgroupId`, `-DartifactId` 和 `-DarchetypeArtifactId`。项目包含 src/main/java 和 src/test/java 目录,分别存放 Java 代码和测试代码,以及 src/main/resources 用于存储资源文件。默认生成的 `App.java` 和 `AppTest.java` 分别为应用主类和测试类。
|
1天前
|
XML Java 测试技术
Maven 构建配置文件
Maven的构建配置文件(如pom.xml和settings.xml)用于定制构建以适应不同环境,如生产或开发。配置文件可在项目级、用户级或全局定义,通过命令行、Maven设置、环境变量或文件存在与否激活。示例中,env.properties、env.test.properties和env.prod.properties演示了如何根据配置文件选择性应用到测试和生产环境。请注意,这些文件并非真正的构建配置文件,而是测试用例。
|
1天前
|
Java 测试技术 Maven
Maven 构建生命周期
Maven构建生命周期包括验证、编译、测试、打包、检查、安装和部署等阶段,用于项目构建与发布。标准生命周期有清洁、默认和站点三个阶段。清洁周期清除编译输出,默认周期涵盖验证、编译、测试、打包、验证质量、安装到本地仓库及部署到远程仓库。站点周期则生成并部署项目文档。
|
1天前
|
Java 测试技术 项目管理
Maven 构建生命周期
Maven的构建生命周期包括验证、编译、测试、打包、检查、安装和部署等阶段,用于项目构建与发布。它有三个标准生命周期:Clean(如clean目标,清除编译输出),Default(验证、编译、测试、打包、验证质量、安装到本地仓库、部署到远程仓库)和Site(生成项目文档和站点,然后部署到远程服务器)。每个生命周期阶段按顺序执行,确保项目管理的标准化和自动化。
|
1天前
|
XML Java 测试技术
Maven 构建 & 项目测试
本文介绍了如何使用Maven构建和测试Java应用。在`C:/MVN/consumerBanking`项目中,`pom.xml`配置了JUnit作为测试框架。执行`mvn clean package`命令进行构建,Maven会清理目标目录,编译源码和测试代码,运行测试用例,最后生成`consumerBanking-1.0-SNAPSHOT.jar`。测试报告位于`surefire-reports`文件夹。添加新Java类`Util.java`到项目后,更新`App.java`以使用`Util`类。
|
1天前
|
Java Maven
Maven 自动化构建
Maven自动化构建确保依赖稳定性:当bus-core-api项目构建完成后,app-web-ui和app-desktop-ui项目自动构建。这两个项目依赖bus-core-api的1.0-SNAPSHOT版本。通过Maven,团队能高效管理项目间的依赖关系,实现无缝集成和更新。
|
1天前
|
Java 项目管理 Maven
【揭秘】Maven聚合与继承:如何轻松实现项目依赖管理?
Maven的聚合和继承是Java开发中重要的概念。聚合允许将多个项目组合成一个构建单元,简化多模块项目的构建过程,提高构建效率。继承则让子项目重用父项目的配置和属性,避免了重复定义,增强了项目的一致性和可维护性。通过聚合和继承,Maven为多模块项目的构建和管理提供了高效且灵活的支持,减少了配置冗余,提升了开发效率。
【揭秘】Maven聚合与继承:如何轻松实现项目依赖管理?
|
1天前
|
Java Maven
修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像
修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像
80 0
|
1天前
|
Java Maven
Maven 项目文档
学习Maven项目文档创作,借助Doxia引擎将内容转化为通用模型。支持Apt(纯文本)、Xdoc(Maven 1.x格式)、FML(FAQ)和XHTML。