属性
在pom文件中我们可以通过properties自定义属性,其实这只是mvn属性的一种,除此之外,mvn还有其他的属性。
内置属性
- ${basedir} 表示项目的根目录,既包含pom文件的目录
- ${version} 项目的版本
POM属性
- ${project.build.sourceDirectory} 项目的主源码目录 默认为 src/main/java/
- ${project.build.testSourceDirectory} 项目的测试源码目录 默认无src/test/java/
- ${project.build.directory} 构建的输出目录 target/
- ${project.outputDirectory} 项目的主代码编译输出目录 target/classes/
- ${project.testOutputDirectory} 测试代码编译输出目录 target/test-classes/
- ${project.groupId}
- ${project.artifactId}
- ${project.version} 与 ${version}等价
- ${project.build.finalName} 项目的打包输出文件的名称,默认为 ${project.artifactId}- ${project.version}
settings属性
用户使用以settings开头的属性引用settings.xml文件中的xml元素的值,如常用的${settings.localRepository}执行本地的仓库地址
java系统属性
所有java系统属性都可以使用mvn属性引用,如${user.home}指向了用户的家目录。用户可以使用mvn help:system查看所有的java系统属性。
环境变量属性
所有的环境变量都可以使用env.开头的mvn属性引用。例如${env.JAVA_HOME} 表示JAVA_HOME环境变量的值。用户可以使用mvn help:system 查看所有的环境变量
mvn Profile
不同的环境的构建可能是不同的,典型的情况就是数据库的配置,要想做到一个构件不做任何修改就能在任何环境中运行,往往是不可能的,为了让mvn构建在各个环境中方便的移植。mvn引入了profile的概念,在不同环境中的构建mvn可以使用不同的profile来激活不同的配置。类似于spring的profile文件。
<profiles>
<profile>
<id>dev</id>
<properies>
<db.user>dev</db.user>
</properites>
</profile>
<profile>
<id>test</id>
<properies>
<db.user>test</db.user>
</properites>
</profile>
</profiles>
激活profile
-
命令行激活
用户可以使用mvn命令行参数-P加上profile的id来激活profile。多个id之间使用逗号分隔。
mvn clean install -Pdev-x,dev-y -
settings文件显示激活
如果用户希望某个profile默认一直处于激活状态,就可以配置settings.xml文件的activeProfiles元素
<settings>
<activeProfiles>
<activeProfile>dev-x</activeProfile>
</activeProfiles>
</settings>
- 系统属性激活
用户可以设置当系统某属性存在时,自动激活profile。
如下:当test属性存在是生效。
<profiles>
<profile>
<activation>
<property>
<name>test</name>
</property>
</activation>
</profile>
</profiles>
可以进一步配置当属性存在且值为x的时候,profile生效
<profiles>
<profile>
<activation>
<property>
<name>test</name>
<value>x</value>
</property>
</activation>
</profile>
</profiles>
命令行生命系统属性
mvn clean install -Dtest=x
- 操作系统环境激活
<profiles>
<profile>
<activation>
<os>
<name>Windows10</name>
<family>Windows</family>
<arch>x64</arch>
<version>5.1.2600</version>
</os>
</activation>
</profile>
</profiles>
这里的family包括Windows UNIX Mac等,而其他几项name arch version ,用户可以通过查看环境中的系统属性os.name,os.arch,os.version获得
默认激活
可以在定义profile的时候指定其默认激活,如果有任意一个其他的profile被激活了,默认的激活配置会失效。
<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
mvn help:active-profiles 当前激活的profile
mvn help:all-profiles 获取当前所有的profile
profile的种类
根据具体的需要,可以在如下位置配置profile
pom.xml :指定当前项目有效
用户settings.xml 对当前用户有效
全局settings.xml mvn安装目录下conf/settings.xml 对本机上所有的mvn项目有效。
不同类型的profile中可以声明的pom元素是不同的,pom中的profile能够随着pom文件一起被提交到远程仓库,可以配置更多的元素。
pom外部的profile元素