Maven实战读书笔记(六):Maven灵活构建

Maven为了支持构建的灵活性,内置了3大特性,即:属性、Profile和资源过滤。java

6.1 Maven属性

Maven的属性与Java代码的常量有殊途同归之妙,都是为了消除重复,对相关内容进行统一管理而且能够减小往后升级版本的工做量,下降错误发生的几率。
POM文件中,能够经过${属性名称}的方式来引用属性。
Maven中,存在6类属性,分别为:
1) 内置属性,主要有两个,分别为:${basedir}表示项目根目录,即POM文件所在的目录、${version}表示项目的版本。
2) POM属性,用户能够经过该类属性引用POM文件中对应元素的值,如:web

${project.artifactId}对应到<project><artifactId>的值,经常使用的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}项目的groupId
    ${project.artifactId}项目的artifactId
    ${project.version}项目的version,与${version}等价
    ${project.build.finalName}项目打包输出文件名称,默认为${project.artifactId}-${project.version}

Remark:每个POM属性都对应到一个POM元素spring

3) 自定义属性:用户在POM文件的<properties>元素下定义的Maven属性,如:mvc

<properties>
  <spring.boot.version>1.5.9.RELEASE</spring.boot.version>
</properties>

4) Settings属性
POM属性同理,使用settings.开头的属性引用settings.xml文件中xml元素的值,如经常使用的${settings.localRepository}引用本地仓库的地址。maven

5) Java系统属性
全部java系统属性均可以使用Maven属性进行引用,如${user.home}指向用户目录,能够经过mvn help:system查看全部的java系统属性。测试

6) 环境变量属性
全部的环境变量可使用env.开头的Maven属性进行引用,如${env.JAVA_HOME}指向了JAVA_HOME环境变量的值,能够经过mvn help:system查看全部的环境变量。ui

6.2 Maven属性最佳实践

6.2.1经过自定义属性消除重复

基于Java平台的开发,目前基本都会引进springframework帮咱们简化工做,须要MVC功能,则引入spring-webmvc,须要事务管理功能,引入spring-tx。在咱们POM文件中引入相关依赖:code

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>4.3.14.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.14.RELEASE</version>
</dependency>

当咱们须要升级springframework的时候,须要修改多个地方,若是这些依赖不放在一块儿的时候,则容易形成漏更改,致使多版本并存,这个时候,可使用自定义属性,如:xml

<properties>
    <springframework.version>4.3.14.RELEASE</springframework.version>
</properties>
<dependencies>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${springframework.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${springframework.version}</version>
</dependency>
</dependencies>

当须要进行版本升级的时候,只须要修改springframework.version属性便可。事务

6.2.2使用POM属性依赖内部模块

在一个多项目中,模块之间通常会有依赖,而且这些模块一般会使用同一的groupIdversion,这个时候可使用POM属性,如:

<dependencies>
  <dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>demo-base</artifactId>
    <version>${project.version}</version>
  </dependency>
</dependencies>

这样,当进行项目版本升级时,就不须要更改依赖模块的版本了。

相关文章
相关标签/搜索