《Maven实战》--- 灵活的构建

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

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>
全部评论

相关推荐

霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务