Java中主要有三大构建工具:Ant、Maven和Gradle。Ant用的比较少、Maven用的相对普遍,而Gradle的发展则将是未来的一种趋势。使用Maven需要有pom.xml文件,使用Gradle需要有一个对应的build.gradle文件。
Maven中用groupId、artifactId、version组成的Coordination(坐标)唯一标识一个依赖。任何基于Maven构建的项目自身也必须定义这三项属性,生成的包可以是Jar包,也可以是war包。一个典型的依赖引用如下所示:
junit
junit
4.12
test
org.springframework
spring-test
从上面可以看出当引用一个依赖时,version可以省略掉,这样在获取依赖时会选择最新的版本。而存储这些组件的仓库有远程仓库和本地仓库之分。远程仓库可以使用世界公用的central仓库,也可以使用Apache Nexus自建私有仓库;本地仓库则在本地计算机上。通过Maven安装目录下的settings.xml文件可以配置本地仓库的路径,以及采用的远程仓库的地址。
Gradle在设计的时候基本沿用了Maven的这套依赖管理体系。然后我将其转换成Gradle脚本,结果是惊人,在引用依赖方面变得非常简洁。
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支持动态的版本依赖。在版本号后面使用+号的方式可以实现动态的版本管理。
Maven中央仓库已经成为了Java开发者不可或缺的资源,Gradle既然有依赖管理,那必然也得用到仓库,这当然也包括了Maven中央仓库,就像这样:
repositories {
mavenLocal()
mavenCentral()
mavenRepo urls: "http://repository.sonatype.org/content/groups/forge/"
}
Maven将一个项目分解为多个模块已经是很通用的一种方式,在Maven中需要定义个parent POM作为一组module的聚合POM。在该POM中可以使用
maven父工程pom.xml
4.0.0
com.xh
ssm
0.0.1-SNAPSHOT
pom
ssm
ssm-mapper
ssm-service
ssm-web
${project.artifactId}
utf-8
4.3.13.RELEASE
org.springframework
spring-aop
${spring.version}
org.springframework
spring-aspects
${spring.version}
.......
maven子工程pom.xml
4.0.0
com.xh
ssm
0.0.1-SNAPSHOT
com.xh.ssm.web
ssm-web
0.0.1-SNAPSHOT
war
ssm-web Maven Webapp
http://maven.apache.org
com.xh.ssm.service
ssm-service
0.0.1-SNAPSHOT
${project.name}
src/main/java
**/*.properties
**/*.xml
true
src/main/resources
**
true
org.apache.maven.plugins
maven-compiler-plugin
3.6.0
1.8
UTF-8
none
而Gradle也支持多模块构建。而在parent的build.gradle中可以使用allprojects和subprojects代码块来分别定义里面的配置是应用于所有项目还是子项目。对于子模块的定义是放置在setttings.gradle文件中的。在gradle的设计当中,每个模块都是Project的对象实例。而在parent build.gradle中通过allprojects或subprojects可以对这些对象进行各种操作。这无疑比Maven要灵活的多。
第一种:
1、创建多个独立gradle项目
2、编辑模块gradle-api的settings.gradle文件:
rootProject.name = 'gradle-api'
include ':gradle-core'
project(':gradle-core').projectDir = new File(settingsDir, '../gradle-core')
3、编辑模块gradle-api的build.gradle文件:
apply plugin: "java" //Java的JDK
apply plugin: "eclipse" //eclipse项目插件
apply plugin: "war" //项目构建输出war
repositories {
// Use jcenter for resolving your dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
}
dependencies {
compile project(':gradle-core')
}
4、完成后,执行 Gradle -> Refresh Gradle Project
5、结果
第二种:
1.新建Java项目
2.添加build.gradle、settings.gradle文件
build.gradle
subprojects {
apply plugin: "java" //Java的JDK
}
settings.gradle
rootProject.name = 'gradle-parent'
include 'gradle-core'
3、新建空文件夹
4、将项目转换成Gradle项目
5、复制项目路径,右击gradle-parent,导入Gradle项目
总的来说,gradle相比于maven有很大的灵活性,目前gradle的使用者越来越多。而由于maven之前处于主流,并且在某些方面maven较gradle还有一些优点,所以maven和gradle并存。在github上大多数优秀的开源项目会同时提供maven和gradle两种添加依赖的方式。
———————————
相互学习,共同进步
如有不足请留言指正