灵活的构建
如何在不同的环境下展现不同的构建特性?
Maven属性
Maven中的属性有:
- 内置属性:两个常用内置属性 ${basedir} 表示项目跟目录,即包含pom.xml文件的目录;${version} 表示项目版本
- POM属性:用户可以使用该类属性引用POM文件中对应元素的值。如${project.artifactId}就对应了
元素的值,常用的POM属性包括: - ${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/
- ${project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java/
- ${project.build.directory} : 项目构建输出目录,默认为target/
- ${project.outputDirectory} : 项目主代码编译输出目录,默认为target/classes/
- ${project.testOutputDirectory}:项目测试主代码输出目录,默认为target/testclasses/
- ${project.groupId}:项目的groupId
- ${project.artifactId}:项目的artifactId
- ${project.version}:项目的version,与${version} 等价
- ${project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}-${project.version}
- 自定义属性:通过
可以自定义一个或多个Maven属性,然后在POM的其他地方使用${properties}的方式引用该属性 - Settings属性:与POM属性同理,用户使用以settings. 开头的属性引用settings.xml文件中的XML元素的值。
- Java系统属性:所有java系统属性都可以用Maven属性引用,如${user.home}指向了用户目录。
- 环境变量属性:所有环境变量属性都可以使用以env. 开头的Maven属性引用,如${env.JAVA_HOME}指代了JAVA_HOME环境变量的的值。
构建不同环境的配置
开启资源过滤,让其他资源文件也可以解析Maven属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<build>
<!-- 替换配置文件中的数据项 start -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
<!-- 替换配置文件中的数据项 end -->
</build>使用
构建不同环境下的配置 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24<project>
<profiles>
<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<zoo.url>172.17.103.107:2181</zoo.url>
<log.level>DEBUG</log.level>
</properties>
</profile>
<profile>
<id>dev</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<zoo.url>172.17.103.108:2181</zoo.url>
<log.level>INFO</log.level>
</properties>
</profile>
</profiles>
</project>在资源文件中使用配置信息:
1
2zoo.url=${zoo.url}
log.level=${log.level}指定环境进行构建:
- 命令行:mvn clean install -Pdev
- settings.xml文件:修改active-Profiles元素
指定条件激活环境
指定系统属性存在
1
2
3
4
5
6
7
8
9
10<profiles>
<profile>
...
<activation>
<property>
<name>profileProperty</name>
</property>
</activation>
</profile>
</profiles>指定系统属性等于某值
1
2
3
4
5
6
7
8
9
10
11<profiles>
<profile>
...
<activation>
<property>
<name>profileProperty</name>
<value>dev</value>
</property>
</activation>
</profile>
</profiles>指定操作系统
1
2
3
4
5
6
7
8
9
10
11
12<profiles>
<profile>
<activation>
<os>
<name>Window XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>
</profile>
</profiles>指定文件存在
1
2
3
4
5
6
7
8
9
10<profiles>
<profile>
<activation>
<file>
<missing>t1.properties</missing>
<exists>t2.properties</exists>
</file>
</activation>
</profile>
</profiles>设置默认
1
2
3
4
5
6
7<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
profile的分类:
- pom.xml:pom.xml 中声明的 profile 只对当前项目有效。
- 用户 settings.xml:在用户目录下的“.m2/settings.xml”中的 profile,对本机上的该用户的所有 Maven 项目有效。
- 全局 settings.xml:在 Maven 安装目录下 conf/settings.xml 中配置的 profile,对本机上所有项目都有效。