Maven预设变量
使用过Maven
的人应该都知道,我们在Maven
项目中添加依赖的一般性做法。就是打开pom.xml
文件,在<dependencies>
节点下添加1
2
3
4
5<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>5.5.0</version>
</dependency>
包含坐标和版本号的内容,那么在项目中,就可以引用Lucene-core
Jar包中的各种类了。但是要注意一点,这里面的版本号是以硬编码的形式存在,作为一个合格的软件开发者,要尽量在你的代码中避免硬编码的情况,方便版本管理
在Maven中使用预设变量的方式来解决:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<properties>
<version.lucene>6.0.0</version.lucene>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>${version.lucene}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queries</artifactId>
<version>${version.lucene}</version>
</dependency>
</dependencies>
那么以后再遇到项目升级的情况,只需要手动修改<version.lucene>6.0.0</version.lucene>
一行代码即可搞定,所有引用到该版本变量的依赖都自动升级。
Gradle单模块
同样作为后起之秀的Gradle
如何优雅地解决类似问题呢?硬编码的写法如下
1 | dependencies { |
优雅的写法①如下,修改build.gradle
文件
1 | ext { |
一定要注意包含$
符号时,要用双引号。在Gradle中单引号和双引号都是合法的,但是略有不同。单引号中的内容严格对应Java中的String,不对$符号进行转义。双引号的内容则和脚本语言处理有点像,如果字符中有$号的话,则它会先对$表达式求值。在Gradle中,其实还有三引号的情形,这代表什么呢?三引号中的字符串支持任意换行,比如
1 | def multieLines = ''' begin |
除了①,还有优雅的写法②,使用字典类型,修改build.gradle
文件
1 | ext { |
Gradle多模块
当在一个根项目下有多个子模块,那么一种简单的做法是在每个子模块中都定义ext
代码块,声明需要使用到的版本号变量,这样做当然可以。但是当遇到需要升级版本号的情况时,需要手动修改所有的子模块,其实还有更优雅的解决方案。就是在根项目中定义ext
代码块,打开根项目的build.gradle
定义
1 | ext { |
然后在每个子模块的build.gradle
中都可以直接引用之,方式如下
1 | dependencies { |