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

6.1 Maven属性

Maven的属性与Java代码的常量有异曲同工之妙,都是为了消除重复,对相关内容进行统一管理并且可以减少日后升级版本的工作量,降低错误发生的概率。

POM文件中,可以通过${属性名称}的方式来引用属性。

Maven中,存在6类属性,分别为:

  1. 内置属性,主要有两个,分别为:${basedir}表示项目根目录,即POM文件所在的目录、${version}表示项目的版本。

  2. POM属性,用户可以通过该类属性引用POM文件中对应元素的值,如:

     ${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元素

  1. 自定义属性:用户在POM文件的<properties>元素下定义的Maven属性,如:
<properties>
<spring.boot.version>1.5.9.RELEASE</spring.boot.version>
</properties>
  1. Settings属性

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

  2. Java系统属性

    所有java系统属性都可以使用Maven属性进行引用,如${user.home}指向用户目录,可以通过mvn help:system查看所有的java系统属性。

  3. 环境变量属性

    所有的环境变量可以使用env.开头的Maven属性进行引用,如${env.JAVA_HOME}指向了JAVA_HOME环境变量的值,可以通过mvn help:system查看所有的环境变量。

6.2 Maven属性最佳实践

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

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

<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的时候,需要修改多个地方,如果这些依赖不放在一起的时候,则容易造成漏更改,导致多版本并存,这个时候,可以使用自定义属性,如:

<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>

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

最新文章

  1. Phaser-游戏之旅
  2. codevs 1082 线段树区间求和
  3. 【2016-10-16】【坚持学习】【Day7】【建造者模式】
  4. Java http方式提交短信到短信网关
  5. ansible中tag的用法
  6. HTML静态网页 css样式表
  7. NGUI UI Grid, two column
  8. Android开发(三十二)——延时
  9. Winform 打开下载的文件
  10. 【转载!】关于C#的RawSocket编程的问题
  11. 一步步学习ASP.NET MVC3 (3)——Razor(1)
  12. 跟我学android-搭建Android开发环境(一)
  13. Java 微服务框架 Redkale 入门介绍
  14. 使用Java创建RESTful Web Service(转)
  15. java数据结构之链表的实现
  16. 一个相对健壮的node 静态http服务器
  17. Git使用总结之修改了用户名之后git无法使用
  18. 查看linux服务器上Tensorflow的版本和位置
  19. PDO查询语句结果中文乱码
  20. 从文件中读取数组数据————Java

热门文章

  1. [工具]kali-linux-2016.2 更新后
  2. Codeforces 711B 【模拟】
  3. 3dmath复习随笔
  4. PJzhang:有关火绒新版本以及火绒的一些介绍
  5. 编译安装Apache:出现错误configure: error: mod_deflate
  6. HDU - 6058 Kanade's sum
  7. Nginx缓存[proxy cache、memcache]
  8. Java GC基础
  9. 外文翻译 《How we decide》被情感愚弄 第一节
  10. html5新增的主题结构元素