maven的属性
- 内置属性: 主要有两个常用的内置属性,${basedir}表示项目的根目录(包含pom文件的目录);${version},表示项目版本
- pom属性:引用pom文件中对应的元素值,比如${project.artifactId},就对应了pom文件的<project><artifactId>的值。常用的pom属性如下:
- 自定义属性:可以在pom的<properties>元素下自定义Maven的属性
- Settings属性:使用settings开头,引用settings.xml文件里元素属性的值,如:${settings.localRepository},
- java系统属性: 如:${uesr.home}
- 环境变量属性:所有环境变量都可以使用以env.开头的Maven属性引用,如:${env.JAVA_HOME}
maven的资源过滤
maven的资源处理主要是由maven-resource-plugin插件来完成,但是它默认的功能就是将资源目录src/main/resources 的资源复制到编译输出目录中,将测试目录src/test/resources里的资源文件复制到测试编译输出目录,并不能识别资源中maven属性。通过配置我们可以让maven识别资源文件中的属性。这样我们就可以通过maven的属性的配置来实现不同环境的灵活构建。
为主资源目录开启资源过滤:
为测试资源开启资源过滤:
然后在profile里配置针对不同环境的属性,通过激活profile来实现不同环境使用不同属性。
举个栗子:
测试环境,和开发环境的数据库配置:
开发:
测试:
profile(开发):
mvn构建命令:
mvn clean install -Pdev
Maven Profile
为了在不该变构建使用的pom的情况下,使得构建能够在多个环境移植,maven映入的profile的概念,profile能在构建的时候修改pom的一个直系,或则添加额外的配置元素,maven提供了多中的方式激活profile。
- 命令行激活 :使用-P参数+profile id,多个id之间用逗号分隔。
- settings文件显示激活:<activeProfiles><activeProfile>profile id</activeProfile></activeProfiles>
- 系统属性激活:1)存在某属性 2)属性存在且=x的时候 ps:可以在命令行声明系统属性,-Dtest=x,这样可以同时激活多个profile
- 操作系统环境激活:
- 文件存在与否激活:
- 默认激活
maven还提供了如下两个命令:
mvn help:active-profiles 查看当前激活的profile
mvn help:all-profiles 查看所有的profile
Profile的种类
可以声明profile的位置如下:
- pom.xml:只对当前项目有效
- 全局settings.xml :MAVEM_HOME/conf/settings.xml 对本机上该用户所有的Maven项目有效
- 用户setting.xml :.m2/settings.xml 对本机上该用户所有的maven项目有效
- profiles.xml : maven3 已经废弃
pom中的profile可使用的元素:
其他三种外部profile可使用的元素
为什么三种外部profile只能使用这么少的元素呢?是因为外部profile,并不能保证能够随项目分发出去。
profile的优先级:
1.settings.xml > pom.xml
2.用户settings > 全局settings
3. 同在settings文件里的property,被激活的profile的property优先级要高
web资源过滤
与资源过滤类似,如果需要使用maven属性,需要对web资源目录开启资源过滤,例子:
然后配合profile来实现不同环境的的构建。