介绍
Maven Profiles的配置设置或重写默认值,另一组。Maven配置文件允许自定义生成不同的环境。配置文件配置在pom.xml文件每个文件有一个标识符。
可以让配置文件构建不同的环境。比如:
- 生产和开发环境
- 不同的操作系统,如linxu和windows等
- 不同版本的jdk。
按不同的条件编译
通一个例子来了解 Maven Profile
。默认的,编译插件把 javac
的debug
标识设置为true
,把optimize
设置成false
。
对于生产环境代码,我们想优化java代码和禁用调试信息。要做到这些,我们可以使用Maven Profile
。
从一个简单的pom.xml文件,移除编译申明,加入下面的代码片段.
aimple-app/pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ... <profiles> <profile> <id>production</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <debug>false</debug> <optimize>true</optimize> </configuration> </plugin> </plugins> </build> </profile> </profiles> ...
|
我们定义一个名为production
的配置。在里面放入了编译插件的配置。
在配置中重新配置编译插件的参数。
运行mvn compile -X
-X
用于输出调试信息。
输出的可能是下面的结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-compiler-plugin:3.1:compile' with basic configurator --> [DEBUG] (f) basedir = C:\simpletest [DEBUG] (f) buildDirectory = C:\simpletest\target [DEBUG] (f) classpathElements = [C:\simpletest\target\classes] [DEBUG] (f) compileSourceRoots = [C:\simpletest\src\main\java] [DEBUG] (f) compilerId = javac [DEBUG] (f) debug = true [DEBUG] (f) encoding = UTF-8 [DEBUG] (f) failOnError = true [DEBUG] (f) forceJavacCompilerUse = false [DEBUG] (f) fork = false [DEBUG] (f) generatedSourcesDirectory = C:\simpletest\target\generated-sources\annotations [DEBUG] (f) mojoExecution = org.apache.maven.plugins:maven-compiler-plugin:3.1:compile {execution: default-compile} [DEBUG] (f) optimize = false [DEBUG] (f) outputDirectory = C:\simpletest\target\classes
|
如果再用mvn compile -Pproduction -X
查看输出结果。
结果可能是下面的
注意看debug
和optimize
的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-compiler-plugin:3.1:compile' with basic configurator --> [DEBUG] (f) basedir = C:\simpletest [DEBUG] (f) buildDirectory = C:\simpletest\target [DEBUG] (f) classpathElements = [C:\simpletest\target\classes] [DEBUG] (f) compileSourceRoots = [C:\simpletest\src\main\java] [DEBUG] (f) compilerId = javac [DEBUG] (f) debug = false [DEBUG] (f) encoding = UTF-8 [DEBUG] (f) failOnError = true [DEBUG] (f) forceJavacCompilerUse = false [DEBUG] (f) fork = false [DEBUG] (f) generatedSourcesDirectory = C:\simpletest\target\generated-sources\annotations [DEBUG] (f) mojoExecution = org.apache.maven.plugins:maven-compiler-plugin:3.1:compile {execution: default-compile} [DEBUG] (f) optimize = true [DEBUG] (f) outputDirectory = C:\simpletest\target\classes
|
可以看出当用-P
指定profile
中的id时,如production
,会用profile
中的配置替换默认的配置。
配置激活
Maven Profile
可能通过profile/activation
元素按当前编译环境进行激活,如:
- JDK版本
- 环境变量
- 操作系统设置
- 目前的或丢失的文件
一些例子如下:
pom.xml
1 2 3 4 5 6 7 8 9
| <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> ... </profile> </profiles>
|
上面的意思就是默认激活dev
pom.xml
1 2 3 4 5 6 7
| <profile> <id>include-script</id> <activation> <jdk>1.6</jdk> </activation> ... </profile>
|
当jdk版本是1.6时,激活include-script
pom.xml
1 2 3 4 5 6 7 8 9 10 11
| <profile> <id>win-build</id> <activation> <os> <name>Windows 7</name> <family>Windows</family> <arch>x64</arch> </os> </activation> ... </profile>
|
当在windows下编译时激活win-build
pom.xml
1 2 3 4 5 6 7 8 9
| <profile> <id>debug</id> <activation> <property> <name>debug</name> </property> </activation> ... </profile>
|
当${debug}
有定义时,debug
激活
pom.xml
1 2 3 4 5 6 7 8 9
| <profile> <activation> <file> <exists>target/generated-sources/foo</exists> <missing>target/generated-sources/bar</missing> </file> </activation> ... </profile>
|
当foo存在,bar不存在时,激活
总结
按不同的条件进行不同的数据流,是各程工上常见的问题。
比如c/c++有专门的条件编译语句。#define
,#if
参考
http://maven.apache.org/guides/introduction/introduction-to-profiles.html
http://www.codetab.org/apache-maven-tutorial/maven-profiles/
http://blog.csdn.net/xiaojiesu/article/details/51866303