gradle入门教程
一、gradle安装及配置1、下载及安装去gradle官网下载对应gradle安装包。首页点击“Install Gradle”,对应页面的“Installing manually”下点击download,选择对应版本下载即可。有Binary-only和Complete两种。Complete是带了文档的。然后解压到任意目录即可2、环境变量配置。与java环境变量配置类似:1、配置GRAD...
一、gradle安装及配置
1、下载及安装
去gradle官网下载对应gradle安装包。首页点击“Install Gradle”,对应页面的“Installing manually”下点击download,选择对应版本下载即可。有Binary-only和Complete两种。Complete是带了文档的。然后解压到任意目录即可
2、环境变量配置。
与java环境变量配置类似:
1、配置GRADLE_HOME。
2、添加到path中:%GRADLE_HOME%\bin。
3、cmd中输入gradle -v 校验。
需要先安装好java环境。
二、gradle简介
1、Groovy简介
gradle是基于groovy的,其 build 脚本使用 groovy dsl 编写。Groovy是用于Java虚拟机的一种敏捷的动态语言,是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用于编写脚本。与Java的区别:
(1)兼容java语法
(2)分号非必输
(3)类、方法、默认public
(4)编译器给属性自动添加getter/setter方法
(5)属性可以用点获得
(6)最后一个表达式的值会作为返回值,可以不用写return
(7)==等同于equals(),所以即使有对象为空,也不会有空指针异常
groovy的几个高效特性(以下代码可以在IntelliJ IDEA的groovy console中运行):
(1)高效的类型定义
def version=1 //这里version就是int类型,类似JavaScript里的var
(2)assert断言语句可以在任何地方执行。
(3)括号是可选的
println(version)
println version //这两种写法效果是相同的
(4)字符串
def s1='groovy' //普通字符串
def s2="gradle version is ${version}" //可以加参数的字符串
def s3='''my name
is groovy''' //可以换行
println s1
println s2
println s3
(5)集合
//List
def buildTools=['ant','maven']
buildTools <<'gradle'
println buildTools.getClass()==ArrayList
println buildTools.size()==3
//map
def buildYears=['ant':2000,'maven':2004]
buildYears.gradle=2009
println buildYears.ant
println buildYears.gradle
println buildYears.getClass() //输出位:class java.util.LinkedHashMap
(6)闭包
//闭包相当于一个代码块,可以被赋值给一个变量,也可以作为参数传递给方法
//c1,c2分别为带参数的闭包和不带参数的闭包
def c1 ={
v1 ->
println v1
}
def c2={
println 'groovy'
}
//methon1和methon2的参数为闭包,Closure需要引用groovy自带的类,不要引用java的类
def methon1(Closure closure){
closure('gradle')
}
def methon2(Closure closure){
closure()
}
methon1(c1)
methon2(c2)
2、gradle构建基础
Projects 和 tasks
projects 和 tasks是 Gradle 中最重要的两个概念。
任何一个 Gradle 构建都是由一个或多个 projects 组成。每个 project 包括许多可构建组成部分。 这完全取决于你要构建些什么。举个例子,每个 project 或许是一个 jar 包或者一个 web 应用,它也可以是一个由许多其他项目中产生的 jar 构成的 zip 压缩包。一个 project 不必描述它只能进行构建操作。它也可以部署你的应用或搭建你的环境。不要担心它像听上去的那样庞大。 Gradle 的 build-by-convention 可以让您来具体定义一个 project 到底该做什么。
每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成 javadoc,发布到某个仓库等操作。
到目前为止,可以发现我们可以在一个 project 中定义一些简单任务,后续章节将会阐述多项目构建和多项目多任务的内容。
简单的gradle项目解析
使用eclipse或者IDEA创建gradle项目后,会自动创建build.gradle和settings.gradle两个脚本文件。
目录结构和maven类似:
gradle 任务窗口:
build.gradle脚本解析:
group 'org.springframework' //项目组名
version '1.0-SNOPSHOT' //版本号
apply plugin: "java" //引用java插件 新版本可能是这种写法 plugins { id 'java'}
apply plugin: "war" //用来打war包
sourceCompatibility=1.8 //java版本
//仓库管理
repositories{
mavenCentral()
}
//依赖管理
dependencies{
testCompile group: 'junit', name: 'junit', version: '4.12'
}
自定义任务
我们可以在build.gradle中自定义我们自己的任务,可以在gradle视图的tasks下的others下看到我们自己的任务。
//创建项目资源路径
//闭包
def createDir = {
path ->
File dir = new File(path)
if(!dir.exists()){
dir.mkdirs();
}
}
task makeJavaDir(){
def paths=['src/main/java','src/main/resources','src/test/java','src/test/resources']
//任务的动作,doFirst任务开始时执行,doLast任务结尾执行。<<操作符时doLast的简写形式。
//一个动作可以多次调用
doFirst {
paths.forEach(createDir)
}
}
task makeWebDir(){
//dependsOn是task的方法,表示此任务依赖其他的任务,此任务执行前,依赖的任务需要先执行
dependsOn 'makeJavaDir'
def paths=['src/main/webapp']
doLast {
paths.forEach(createDir)
}
}
依赖管理
//仓库管理
repositories{
google() //谷歌仓库
mavenLocal() //本地的maven仓库
mavenCentral() //maven的中央仓库
jcenter() //Goovy Grape内的默认仓库
maven{ //maven私服
url ''
}
}
示例:
repositories {
mavenLocal()
maven { url "http://maven.aliyun.com/nexus/content/groups/public/"}
mavenCentral()
jcenter()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }
}
//依赖管理 testCompile表示再测试代码编译阶段依赖这个包
//可以去maven的中央仓库去找我们需要的jar包 https://mvnrepository.com/repos/central
//每个包都会有会有gradle对应的依赖写法,复制到我们项目中即可
dependencies{
testCompile group: 'junit', name: 'junit', version: '4.12'
}
解决冲突
gradle会自动帮我们解决jar包的版本冲突,默认使用最高的那个版本,我们也可以手动解决冲突。
//修改默认解决策略来查看Gradle之间哪些包出现版本冲突
configurations.all{
resolutionStrategy{
failOnVersionConflict()
force 'org.slf4j:slf4j-api:1.7.24'
}
}
//方法一 排除冲突的依赖包
dependencies {
compile('org.hibernate:hibernate-core:3.6.3.Final') {
exclude group:"org.slf4j",module:"slf4j-api" //排除了hibernate堆slf4j的依赖
}
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
}
//方法二 强制指定版本
configurations.all{
resolutionStrategy{
failOnVersionConflict()
force 'org.slf4j:slf4j-api:1.7.24' //强制指定了版本
}
}
多项目构建
上文我们说过gradle项目包含build.gradle和settings.gradle两个脚本文件,上面介绍了build.gradle,现在介绍一下settings.gradle。settings.gradle是多项目构建下管理项目和子项目的
settings.gradle
rootProject.name = 'groovy' //根模块名
include 'groovyweb' //子模块
在进行多项目构建的时候,我们需要在根项目下的build.gradle配置所以项目相同的配置,在子项目的build.gradle下配置子项目的个性化需求。示例:假设有根项目、java模块子项目、web模块子项目,web模块子项目需要引用java模块子项目。则,根项目的配置:
//所有项目的配置
allprojects {
apply plugin :'java'
sourceCompatibility = 1.8
}
//子项目的配置
subprojects {
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
}
}
web模块子项目配置:
apply plugin :'war'
dependencies {
compile project(':javaproject')
}
至于group和version 我们可以创建一个名为gradle.properties的文件,然后配置。
group ='com.dmf.gradle'
version ='1.0-SNAPSHOT'
gradle测试
项目布局
build\reports\tests目录下就是网页版的测试结果。
测试配置(引入测试框架,编写测试代码):
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
gradle在build时就会发现测试类。编译并且执行。
发布
在公司里,我们需要把项目发布到私服上,供其他同事下载或使用时,就需要使用发布功能了
//引入插件
apply plugin: 'maven-publish'
publishing {
publications {
myPublish(MavenPublication){
from components.java
}
}
repositories{
maven{
name ''
url ''
}
}
}
gradle参考资料
1、https://www.w3cschool.cn/gradle/
2、https://www.jianshu.com/p/001abe1d8e95
更多推荐
所有评论(0)