Maven与Gradle
Java世界里主要有三大构建工具:Ant、Maven、Gradle。现在很少人提起Ant,Maven也有很多问题,而Gradle则发展得很好了。
下面说说Maven与Gradle的主要区别。
依赖管理系统
第一,Maven为Java世界引入了新的依赖管理系统,可以通过groupId、artifactID、version组成坐标(Coordination)唯一标识一个依赖。任何基于maven构建的项目自身也必须定义这三项属性,可以生成jar包或者war包。当引用一个依赖时,version可以省略掉,这样在获取依赖时会选择最新的版本。而存储这些组件的仓库有远程仓库和本地仓库之分。远程仓库可以使用世界公用的central仓库,也可以使用Apache Nexus自建私有仓库;本地仓库则在本地计算机上。通过Maven安装目录下的settings.xml文件可以配置本地仓库的路径,以及采用的远程仓库的地址
一个Maven依赖如下所示:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
Gradle在设计的时候基本沿用了Maven的这套依赖管理体系。不过它在引用依赖时还是进行了一些改进。首先引用依赖方面变得非常简洁。
dependencies {
compile 'org.hibernate:hibernate-core:3.6.7.Final'
testCompile ‘junit:junit:4.+'
}
第二,Maven和Gradle对依赖项的scope有所不同。在Maven世界中,一个依赖项有6种scope,分别是complie(默认)、provided、runtime、test、system、import。而grade将其简化为了4种,compile、runtime、testCompile、testRuntime。那么如果想在gradle使用类似于provided的scope怎么办?别着急,由于gradle语言的强大表现力,我们可以轻松编写代码来实现类似于provided scope的概念
第三,Gradle支持动态的版本依赖。在版本号后面使用+号的方式可以实现动态的版本管理
第四,