Maven实战读书笔记(六):Maven灵活构建
Maven为了支持构建的灵活性,内置了3大特性,即:属性、Profile
和资源过滤。
6.1 Maven属性
Maven
的属性与Java
代码的常量有异曲同工之妙,都是为了消除重复,对相关内容进行统一管理并且可以减少日后升级版本的工作量,降低错误发生的概率。
在POM
文件中,可以通过${属性名称}
的方式来引用属性。
在Maven
中,存在6类属性,分别为:
内置属性,主要有两个,分别为:
${basedir}
表示项目根目录,即POM文件所在的目录、${version}
表示项目的版本。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
元素
- 自定义属性:用户在
POM
文件的<properties>
元素下定义的Maven
属性,如:
<properties>
<spring.boot.version>1.5.9.RELEASE</spring.boot.version>
</properties>
Settings属性
与POM
属性同理,使用settings.
开头的属性引用settings.xml
文件中xml
元素的值,如常用的${settings.localRepository}
引用本地仓库的地址。Java系统属性
所有java
系统属性都可以使用Maven
属性进行引用,如${user.home}
指向用户目录,可以通过mvn help:system
查看所有的java
系统属性。环境变量属性
所有的环境变量可以使用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属性依赖内部模块
在一个多项目中,模块之间一般会有依赖,并且这些模块通常会使用同一的groupId
和version
,这个时候可以使用POM
属性,如:
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>demo-base</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
这样,当进行项目版本升级时,就不需要更改依赖模块的版本了。
Maven实战读书笔记(六):Maven灵活构建的更多相关文章
- 《Maven实战》笔记-10-灵活的构建
一.灵活构建的意义 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建.例如,典型的项目都会有开发环境.测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时候就 ...
- maven实战读书笔记(二)
一个Spring加载属性的工具类,指定目标位置之后可以用${}的方式加载配置文件 测试maven工程发送email的例子:运行成功的例子—github 常用的命令: mvn clean compile ...
- Maven实战读书笔记(二):Maven坐标与仓库
2.1 Maven坐标 Maven坐标是Maven用来表示一个组件依赖的标示. Maven通过下面几个元素定义坐标:groupId.artifactId.version.packaging.class ...
- Maven实战读书笔记(四):Maven生命周期与插件
Maven的生命周期是对所有构建过程的抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有构建步骤. Maven的生命周期是抽象的,其实际行为是由插件来完成 ...
- Maven实战读书笔记(七):Maven常用功能
7.1.资源排除 <resources> <!-- 启动过滤,包含的文件会被过滤掉 --> <resource> <directory>src/main ...
- Maven实战读书笔记(五):聚合与继承
Maven的聚合特性能够把项目的各个模块聚合在一起构建,而继承特性则能够帮助抽取各模块相同的依赖和插件等配置,在简化POM的同时,还能促进各个模块配置的一致性. 5.1 聚合 Maven聚合也称多模块 ...
- Maven实战读书笔记(一):Maven概述
1.1 Maven是什么,能做什么 Maven是一个跨平台的项目管理工具,主要服务于Java平台的项目构建.依赖管理和项目信息管理. Maven的用途之一是项目构建,能够自动化构建过程,从清理.编译. ...
- maven实战读书笔记(三)
maven将一系列的步骤都封装为一系列的插件,运行命令后一系列的插件运行
- maven实战读书笔记(一)
环境变量设置 MAVEN_HOME:G:\maven-3.2\apache-maven-3.2.5 Path: G:\maven-3.2\apache-maven-3.2.5\bin 其实正确的设置应 ...
随机推荐
- poj3181【完全背包+整数拆分】
题意: 给你一个数n,在给你一个数K,问你这个n用1-k的数去组合,有多少种组合方式. 思路: 背包重量就是n: 那么可以看出 1-k就是重物,价值是数值,重量是数值. 每个重物可以无限取,问题转化为 ...
- python 高阶函数一 概念
一.2个概念: 1.变量可以指向函数本身 >>> abs <built-in function abs> >>> f = abs >>> ...
- bzoj 3745: [Coci2015]Norma【分治】
参考:https://blog.csdn.net/lych_cys/article/details/51203960 真的不擅长这种-- 分治,对于一个(l,r),先递归求出(l,mid),(mid+ ...
- The local variable fruit may not have been initialized 错误
eclipse错误提示如图: 错误代码如图: 首先这错误的翻译是:局部变量"水果"尚未初始化,所以对象该如何初始化呢,我百度之后找到了答案,修改过后如下图所示. 这个错误的问题所在 ...
- PHP + jquery.validate remote的用法
[ 转 ] http://www.cnlvzi.com/index.php/Index/article/id/58 最近做验证功能时,用到jquery.validate.js中的remote远程验证方 ...
- iOS 自建企业级应用(In-House)分发平台
注意事项 自建分发平台,首先需要有一个可以提供下载功能的服务器,而且服务器需要支持HTTPS协议! 其实,使用七牛云就可以完成这些操作. 推荐方案 七牛云实践方案简述(感兴趣的朋友可以和我交流具体的实 ...
- iOS RSA (Objc)
/* RSA.h @author: ideawu @link: https://github.com/ideawu/Objective-C-RSA */ #import <Foundation/ ...
- redis优势
redis是高性能的key-value内存数据库. 由于是内存型的,所以性能相比磁盘数据库更加优秀. 由于支持丰富的数据类型,相比memcache更受开发者欢迎.列表和整形是最常用的数据类型. 就算对 ...
- [LOJ6041雅礼集训2017]事情的相似度
题解 \(SAM+set\)启发式合并+扫描线 首先可以发现题目要求的就是查询结尾在一段区间内的\(LCS\) 这个显然就是\(SAM\)的\(parent\)树上的\(step[LCA]\) 我们可 ...
- Hdu 4725 The Shortest Path in Nya Graph (spfa)
题目链接: Hdu 4725 The Shortest Path in Nya Graph 题目描述: 有n个点,m条边,每经过路i需要wi元.并且每一个点都有自己所在的层.一个点都乡里的层需要花费c ...