Maven - 构建配置文件
什么是构建配置文件?
构建配置文件(A Build profile) 是一系列的配置项的值,可以用来设置或者覆盖Maven构建默认值。使用构建配置文件,你可以为不同的环境,比如说生产环境和开发环境,定制构建方式。
配置文件在pom.xml文件中使用activeProfiles或者profiles元素指定,并且可以通过各种方式触发。配置文件在构建时修改POM,并且用来给参数设定不同的目标环境(比如说,开发、测试和生产环境中数据库服务器的地址)。
构建配置文件的类型
构建配置文件大体上有三种类型
类型 | 在哪定义 |
---|---|
项目级(Per Project) | 定义在项目的POM文件pom.xml中 |
用户级 (Per User) | 定义在Maven的设置xml文件中 (%USER_HOME%/.m2/settings.xml) |
全局(Global) | 定义在Maven全局的设置xml文件中 (%M2_HOME%/conf/settings.xml) |
配置文件激活
Maven的构建配置文件可以通过多种方式激活。
- 使用命令控制台输入显式激活。
- 通过maven设置。
- 基于环境变量(用户或者系统变量)。
- 操作系统设置(比如说,Windows系列)。
- 文件的存在或者缺失。
配置文件激活示例
让我们假设你的项目的目录结构如下:
现在,在src/main/resources文件夹下有三个指定环境的文件:
文件名 | 描述 |
---|---|
env.properties | 如果未指定配置文件时默认使用的配置。 |
env.test.properties | 当测试配置文件使用时的测试配置。 |
env.prod.properties | 当生产配置文件使用时的生产配置。 |
显式配置文件激活
在下面的例子中,我们将把目标操作maven-antrun-plugin:run绑定到测试阶段。这样做会让我们看到不同的配置文件显示的信息。我们将使用pom.xml文件指定不同的配置文件,并且在命令控制台使用maven命令激活配置文件。
假设我们已经在C:\MVN\project文件夹下创建好了下面的pom.xml文件。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<profiles>
<profile>
<id>test</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>Using env.test.properties</echo>
<copy file="src/main/resources/env.test.propertiestofile
="${project.build.outputDirectory}/env.properties"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
现在打开命令控制台,去到包含pom.xml文件的文件夹下,然后执行下面的mvn命令。使用-P选项将配置文件的名字作为参数传入。
C:\MVN\project>mvn test -Ptest
Maven将会开始处理并且显示使用测试配置文件的结果。
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [test]
[INFO] ------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\project\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\project\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
There are no tests to run.
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
[echo] Using env.test.properties
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Sun Jul 08 14:55:41 IST 2012
[INFO] Final Memory: 8M/64M
[INFO] ------------------------------------------------------------------
现在作为练习,你可以按下面的步骤做:
- 添加另外一个profile节点到pom.xml文件的profiles节点下(复制现有的profile节点内容然后粘贴到profile节点的末尾)。
- 将这个profile节点的id从test修改为normal。
- 将task节点改为输出env.properties和拷贝env.properties到目标目录。
- 再次重复上面的三步,将id修改为prod,task节点对应为env.prod.properties。
- 以上。现在你可有了3种构建配置文件(normal / test / prod)。
现在打开命令提示行,去到包含pom.xml的文件夹下,然后执行下面的mvn命令。使用-P选项将配置文件的名字作为参数传入。
C:\MVN\project>mvn test -Pnormal
C:\MVN\project>mvn test -Pprod
检查构建的输出内容有何不同。
通过Maven设置激活配置文件
打开Maven的settings.xml文件,此文件可以在%USER_HOME%/.m2目录下获取,其中%USER_HOME%代表用户主目录。如果setting.xml文件不存在那就创建一个新的。
下面的例子显示了使用activeProfiles节点来添加测试配置文件作为激活的配置文件。
<settings xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>maven.dev.snaponglobal.com</id>
<name>Internal Artifactory Maven repository</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<activeProfiles>
<activeProfile>test</activeProfile>
</activeProfiles>
</settings>
现在打开命令控制台,去到包含pom.xml文件的文件夹下,然后执行下面的mvn命令。不要使用 -P选项传入配置文件的名字。Maven会将test配置文件作为激活的配置文件来显示结果。
C:\MVN\project>mvn test
通过环境变量激活配置文件
现在从maven.setting.xml文件中去掉配置文件的内容,然后来更新pom.xml里的test对应的profile节点。向profile节点中添加activation节点,如下所示:
test配置文件会在系属性“env”的值指定为test时激活。创建一个环境变量“env”并且设置它的值为“test”。
<profile>
<id>test</id>
<activation>
<property>
<name>env</name>
<value>test</value>
</property>
</activation>
</profile>
让我们打开命令控制台,去到包含pom.xml文件的文件夹下,然后执行下面的mvn命令。
C:\MVN\project>mvn test
通过操作系统激活配置文件
现在为Activation节点添加操作系统信息,如下所示。test配置文件将会在系统是Windows XP时激活。
<profile>
<id>test</id>
<activation>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>
</profile>
现在打开命令控制台,去到包含pom.xml文件的文件夹下,然后执行下面的mvn命令。不要使用 -P选项传入配置文件的名字。Maven会将test配置文件作为激活的配置文件来显示结果。
C:\MVN\project>mvn test
通过文件的存在或者缺失激活配置文件
现在为Activation节点添加缺失文件信息,如下所示。test配置文件将会在target/generated-sources/axistools/wsdl2java/com/companyname/group 文件夹缺失时激活。
<profile>
<id>test</id>
<activation>
<file>
<missing>target/generated-sources/axistools/wsdl2java/
com/companyname/group</missing>
</file>
</activation>
</profile>
现在打开命令控制台,去到包含pom.xml文件的文件夹下,然后执行下面的mvn命令。不要使用 -P选项传入配置文件的名字。Maven会将test配置文件作为激活的配置文件来显示结果。
C:\MVN\project>mvn test