Maven - 构建配置文件
配置文件用于以不同的方式构建项目。比如,你可能需要在本地环境构建,用于开发和测试,你也可能需要构建后用于开发环境。这两个构建过程是不同的。在POM文件中增加不同的构建配置,可以启用不同的构建过程。当运行Maven时,可以指定要使用的配置。
在 pom.xml 中使用 activeProfiles / profiles 元素指定,并且可以用很多方式触发。配置文件修改 POM 后,在编译的时候是用来给不同的目标环境参数(例如,在开发、测试和产品环境中的数据库服务器路径)。
profile的定义位置
可以有多个地方定义profile。定义的地方不同,它的作用范围也不同。
- 单个项目配置:针对于特定项目的profile配置我们可以定义在该项目的pom.xml中。
- 用户配置:针对于特定用户的profile配置,我们可以在用户的settings.xml文件中定义profile。该文件在用户家目录下的“.m2”目录下。
- 全局配置:全局的profile是定义在Maven安装目录下的“conf/settings.xml”文件中的。
配置文件激活
profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。比如说,我们可以通过profile定义在jdk1.5以上使用一套配置信息,在jdk1.5以下使用另外一套配置信息;或者有时候我们可以通过操作系统的不同来使用不同的配置信息,比如windows下是一套信息,linux下又是另外一套信息,等等。
Maven 构建配置文件的文件,可以使用以下几种方式来激活。
- 明确使用命令从控制台输入
比如你定义了一个名为 myProfile 的 profile,你只需要在命令行输入 mvn clean install -Pmyprofile 就能将其激活,这种方式的好处很明显,但是有一个很大的弊端,当 profile 比较多的时候,在命令行输入这写 -P 参数会让人觉得厌烦,所以,如果你一直用这种方式,觉得厌烦了,可以考虑使用其它自动激活的方式 - 通过 Maven 设置
打开 Maven 的 settings.xml 文件,该文件可以在 %USER_HOME%/.m2 目录下找到,%USER_HOME% 表示用户主目录。如果 settings.xml 文件不存在则需要创建一个。
像在下面例子中展示的一样,使用 activeProfiles 节点添加 test 配置作为激活的 Profile
<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">
<activeProfiles>
<activeProfile>test</activeProfile>
</activeProfiles>
</settings>
- 基于环境变量(用户/系统变量)
profile可根据检测出的生成环境的状态, 自动触发. 这些触发在<profile>下的<activation>一节中定义. 当前, 该检测仅限于JDK版本的前缀匹配\ 系统属性是否存在 或一个系统属性的值。
(1) 当JDK的版本号以"1.6"开头时, 下例中的配置将被触发.
<profiles>
<profile>
<activation>
<jdk>1.6</jdk>
</activation>
...
</profile>
</profiles>
- OS设置(例如,Windows系列)
activation 元素包含下面的操作系统信息。当系统为 windows XP 时,test Profile 将会被触发
<profile>
<id>test</id>
<activation>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>
</profile>
- 呈现/丢失的文件
现在使用 activation 元素包含下面的操作系统信息。当 target/generated-sources/axistools/wsdl2java/com/companyname/group 缺失时,test Profile 将会被触发
<profile>
<id>test</id>
<activation>
<file>
<missing>target/generated-sources/axistools/wsdl2java/
com/companyname/group</missing>
</file>
</activation>
</profile>