灵活的构建

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。

  1. 命令行激活 :使用-P参数+profile id,多个id之间用逗号分隔。
  2. settings文件显示激活:<activeProfiles><activeProfile>profile id</activeProfile></activeProfiles>
  3. 系统属性激活:1)存在某属性                                                  2)属性存在且=x的时候                             ps:可以在命令行声明系统属性,-Dtest=x,这样可以同时激活多个profile
  4.  操作系统环境激活:                               
  5. 文件存在与否激活:                                                                                                            
  6. 默认激活                                                                                                                           

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来实现不同环境的的构建。

猜你喜欢

转载自my.oschina.net/u/2464465/blog/1607852