一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建,例如,典型的项目都会开发环境,测试环境和产品环境,这些环境的数据库配置不尽相同。

maven为了支持构建的灵活性,内置了三大特性,即属性,Profile和资源过滤

 

1. maven属性

maven有6类属性

  • 内置属性:主要有两个常用的内置属性,${basedir}表示项目根目录,即包含pom.xml文件的目录,${version}表示项目版本
  • POM属性:用户可以使用该类属性引用POM文件中对应元素的值,例如${project.artifactId}就对应类<project><artifactId>元素的值,常用包括
    • ${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}:项目的groupId
    • ${project.artifactId}:项目的artifactId
    • ${project.version}:项目的version
    • ${project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}-${project.version}
  • 自定义属性:也就是在<properties>标签中定义的
  • Settings属性:和POM属性同理,使用settings开头,引用settings.xml中元素的值
  • Java系统属性:所有Java系统属性都可以使用Maven属性引用,例如:${user.home} 指向了用户目录
  • 环境变量属性:所有环境变量都可以使用以env开头的maven属性引用,例如${env.JAVA_HOME}指向JAVA_HOME的环境变量的值

 

2. 构建环境的差异

在不同的环境中,项目的源码应该使用不同的方式进行构建,最常见的就是数据库的配置,dev环境和test环境是不同的,数据库也是不同的

 

2.1. 资源过滤

POM配置

<profiles>

    <profile>

        <id>dev</id>

        <db.url>sadsadasdasdasdas</db.url>

    </profile>

</profiles>

db.properties

database.jdbc.url = ${db.url}

 

为了应对环境的变化,首先需要使用Maven属性将这些将会发生变化的部分提取除了,使用maven属性替代它们

首先假设在src/main/resources中有配置文件,里面配置了数据库连接的一些属性  db.properties,为了让这个配置可以灵活的改变,适应各个环境的变化,采用${},希望可以动态变化

但是maven的属性默认会在POM解析,在db.properties中还是${}

资源文件的处理其实是maven-resources-plugin做的事情,它默认的行为只是将项目主资源文件复制到主代码编译输出目录中,将测试资源文件复制到测试代码编译输出目录中,不过需要一些POM配置

那么只需要开启资源过滤即可,在resouce标签下,添加一行<filtering>true</filtering>

然后在构建时候  mvn clean install -pdev即可

 

 

3. Maven Profile

为了能让构建在各个环境下方便地移植,Maven引入了profile的概念,profile能够构建的时候修改POM的一个子集,或者添加额外的配置元素,用户可以使用很多方式激活profile,以实现在不同的环境下移植

POM配置

<profiles>

    <profile>

        <id>dev</id>

        <db.url>sadsadasdasdasdas</db.url>

    </profile>

    <profile>

        <id>test</id>

        <db.url>s1111111</db.url>

    </profile>

</profiles>


激活profile

 

  1. 命令行激活:mvn clean install -Pdev
  2. settings文件显示激活   <activeProfile>dev</activeProfile>
  3. 系统属性激活
  4. 操作系统环境激活
  5. 文件存在与否激活
  6. 默认激活:<activeByDefault>true</activeByDefault>