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 其实正确的设置应 ...
随机推荐
- TP3.2单字母函数
A方法 A方法用于在内部实例化控制器 调用格式:A(‘[项目://][分组/]模块’,’控制器层名称’) 最简单的用法: $User = A('User'); 表示实例化当前项目的UserAction ...
- thinkphp5 +elasticsearch
php7使用elasticsearch 1.安装 官网下载地址:https://www.elastic.co/downloads/elasticsearch # 解压到非root目录,运行时使用非ro ...
- IDEA2018.3.5Tomcat output 中文乱码 修改配置文件生效的解决办法
首先,我也是尝试别人介绍的方法: IDEA Windows 环境 console 乱码问题 - intellij idea 15 控制台输出中文乱码问题解决办法 - liuhai的博客 - CSDN博 ...
- elasticsearch 查询 query
对于 类型是 text的字段,并且分析器指明是ik_max_word的会建立倒排索引 查询的分类: match查询: 会自动转换大小写,会分词, term查询: 不会转换和分词,只能值匹配 term ...
- Centos6.8 配置 Tomcat
1.安装Tomcat,安装之前必须先安装Java,先安装java 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index. ...
- Little Elephant and Elections CodeForces - 258B
Little Elephant and Elections CodeForces - 258B 题意:给出m,在1-m中先找出一个数x,再在剩下数中找出6个不同的数y1,...,y6,使得y1到y6中 ...
- android动画(2)自定义动画
public class CustomAnimation extends Animation { // 这个方法可以获得动画view的width,height,以及它父view的width @Over ...
- 18.3.1获得Class对象
package d18_3_1; /** * Java中的java.lang.Class,简单理解就是为每个java对象的类型标识的类, * 虚拟机使用运行时类型信息选择正确的执行方法,用来保存这些运 ...
- vmware虚拟机启动centOs黑屏
如图所示 , 我的VM 启动虚拟机之后就变成了上面的样子,一直不动,ping也ping不好,这个时候 : 1. 要么 内存不够了: 2. 要么 网络协议存在问题了: 本地windows环境在管理员的 ...
- C. Tennis Championship dp递推 || 找规律
http://codeforces.com/contest/735/problem/C C. Tennis Championship time limit per test 2 seconds mem ...