1、Gradle简介
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。
面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala,计划未来将支持更多的语言。
2、Gradle环境搭建
2.1、Gradle下载
https://services.gradle.org/distributions/
注意:Idea2018支持4版本,更高版本不支持
以上二选一
解压
2.2、环境变量配置
GRADLE_HOME
D:\gradle-4.9-bin\gradle-4.9
path环境变量添加
%GRADLE_HOME%\bin
输入gradle -v测试
gradle -v
2.3、idea中Gradle配置
注意:配置过gradle环境变量后idea能够自动识别gradle,所以可以不用在idea专门配置
如果想单独配置,如下图
2.4、Idea使用Gradle创建java项目
File–New–Project如图,如果需要创建web项目,则可以勾选web选项
建成的目录结构如图
完整的目录结构应该为
解决方式如下
在build.gradle中添加如下代码
task "create-dirs" << {
sourceSets*.java.srcDirs*.each {
it.mkdirs()
}
sourceSets*.resources.srcDirs*.each{
it.mkdirs()
}
}
完整的代码为
group 'xkp.lesson'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
task "create-dirs" << {
sourceSets*.java.srcDirs*.each {
it.mkdirs()
}
sourceSets*.resources.srcDirs*.each{
it.mkdirs()
}
}
在右侧gradle中
在create-dirs上右键run create-dirs即可
3、build.gradle示例
完整的build.gradle代码如下
//组织名称 类似包名
group 'xkp.lesson'
//版本号
version '1.0-SNAPSHOT'
//插件都有表示它们自己的一个短名称。. 在上述例子中,我们使用短名称 java 去应用 JavaPlugin。
apply plugin: 'java'
//注释
/*注释*/
//当编译Java源代码时所使用的Java版本兼容性。
sourceCompatibility = 1.8
//仓库设置
repositories {
mavenCentral()
}
//依赖配置
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
task "create-dirs" << {
sourceSets*.java.srcDirs*.each {
it.mkdirs()
}
sourceSets*.resources.srcDirs*.each{
it.mkdirs()
}
}
4、Gradle 插件
4.1、Java 插件
Java 插件向一个项目添加了 Java 编译、 测试和 bundling 的能力。它是很多其他 Gradle 插件的基础服务。
用法
要使用 Java 插件,请在构建脚本中加入:
使用 Java 插件
build.gradle
apply plugin: 'java'
4.2、War 插件
War 的插件继承自 Java 插件并添加了对组装 web 应用程序的 WAR 文件的支持。它禁用了 Java 插件生成默认的 JAR archive,并添加了一个默认的 WAR archive 任务。
用法
要使用 War 的插件,请在构建脚本中包含以下语句:
使用 War 插件
build.gradle
apply plugin: 'java'
apply plugin: 'war'
5、仓库设置
5.1 配置示例
repositories {
//从本地查找
mavenLocal()
//从阿里云下载
maven{url "https://maven.aliyun.com/nexus/content/groups/public/" }
//从中央仓库查找
mavenCentral()
}
5.2 本地加载
mavenLocal()
从本地仓库查找,默认位置为C:/Users/Administrator/.gradle (可以不写,默认先从本地找)
5.3 配置阿里云仓库
maven{url “https://maven.aliyun.com/nexus/content/groups/public/” }
配置阿里云镜像,可以加快jar包依赖的下载
5.4 从maven中心仓库加载
mavenCentral():从maven中央仓库加载
以上三个依次匹配,匹配成功后面的不再匹配
5.5 设置与maven仓库一致
创建系统变量
GRADLE_USER_HOME
测试
6、依赖配置
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
// https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1'
}
工程的依赖。Gradle 需要你告诉它工程的依赖是什么,它们在哪,然后帮你加入构建中。依赖可能需要去远程库下载,比如 Maven 或者 Ivy 库。也可以是本地库,甚至可能是另一个工程。我们称这个过程叫依赖解决。
各种依赖方式说明
implementation
这个指令的特点就是,对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开。该方式不会产生依赖传递,避免了依赖冲突问题,是目前推荐的做法。
api
完全等同于compile指令。
compile
这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包。
compile 'org.springframework:spring-webmvc:4.3.9.RELEASE'
testCompile
testCompile 只在单元测试代码的编译有效
testCompile group: 'junit', name: 'junit', version: '4.12'
providedCompile
只在编译时有效,不会参与打包。比如servlet-api可以使用该方式
providedCompile group: 'javax.servlet.jsp.jstl', name: 'jstl', version: '1.2'
runtime
如果你的jar包/依赖代码 仅在运行的时候需要,但是在编译时不需要依赖,就用runtime
runtime group: 'mysql', name: 'mysql-connector-java', version: '5.1.42'
7、多模块项目创建
7.1 创建父工程
File----New—Project
7.2 创建子模块entity、dao、service、controller
点击父工程右键—New—Model
按照上述流程依次创建dao、service、controller
注意:创建controller时应该勾选web模块
删除父工程中的src目录,完整结构如图
父工程的settings.gradle如下
rootProject.name = 'parent'
include 'entity'
include 'dao'
include 'service'
include 'controller'
7.2 父工程管理公共配置与依赖
在父工程的build.gradle中添加allprojects把公共配置放入其中
allprojects {
group 'xkp.lesson'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
//从本地查找
mavenLocal()
//从阿里云下载
maven{url "https://maven.aliyun.com/nexus/content/groups/public/" }
//从中央仓库查找
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
}
清除子模块中的重复项,entity、dao、service删除完毕,controller中只保留
apply plugin: 'war'
7.3 dao模块依赖entity模块
在dao模块的build.gradle中添加
dependencies{
compile project(':entity')
}
测试:在entity中创建UserInfo,测试在dao模块中是否可用,可用依赖成功。
- assemble: 编译
- build:编译并执行测试
- clean:删除build目录
- jar: 生成jar包
- test:执行单元测试
war 生成war包
Maven转Gradle
gradle init --type pom
Gradle依赖排除