现在市场上构建工具主要有三种:ant、maven、gradle。 但maven用久了之后也发现很多问题,比如纯xml配置不支持脚本语言,这在一些大型的项目比如一套源码多地部署时,需要根据场景来抽包(java工程)的情况下就显的有点力不从心了。
Gradle 是一种开源构建自动化工具,可以构建几乎任何类型的语言(现支持60多种语言,并且还在持续增加中)。Gradle 对您要构建什么或如何构建它几乎没有任何假设,这使得 Gradle 特别灵活。Gradle 构建脚本可以使用 Groovy 或 Kotlin 编写,在深入了解 Gradle 的细节之前,了解以下术语会很有帮助。
可以称Gradle Wrapper为Gradle包装器,是将Gradle再次包装。让所有的Gradle构建方法在 Gradle 包装器的帮助下运行。目的是可以让我们不需要在本地电脑中安装 Gradle 环境也可以运行 Gradle 项目。官方建议任何 Gradle 构建方法都要在 Gradle Wrapper帮助下运行,利于多人协同开发时环境的统一
只要安装了gradle就会在本地系统的用户根目录下创建.gradle文件。
gradle的root目录存在的目的是为了方便资源共享和构建的管理,即gradle的root中的配置对所有本地的gradle应用都有效,同时每个本地的gradle应用都可以在build.gradle.kts进行配置覆盖root目录中的配置。
主要是配置jar文件下载时的镜像地址,需要在/Users/liudong/.gradle文件夹中新建一个init.gradle初始化脚本,这样一来,gradle下载镜像的时候就会使用这里配置的镜像源下载,速度会快很多,脚本文件内容如下:
allprojects {
repositories {
maven {
url "https://maven.aliyun.com/repository/public"
}
maven {
url "https://maven.aliyun.com/repository/jcenter"
}
maven {
url "https://maven.aliyun.com/repository/spring"
}
maven {
url "https://maven.aliyun.com/repository/spring-plugin"
}
maven {
url "https://maven.aliyun.com/repository/gradle-plugin"
}
maven {
url "https://maven.aliyun.com/repository/google"
}
maven {
url "https://maven.aliyun.com/repository/grails-core"
}
maven {
url "https://maven.aliyun.com/repository/apache-snapshots"
}
}
}
在/Users/liudong/.gradle文件夹中直接新建一个gradle.properties文件,创建内容不复杂,直接看代码即可,设置Gradle的JVM参数、代理和日志等信息,更多的设置可查看官网。
#gradle运行时的jvm设置
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#gradle代理配置,按需配置即可
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=10800
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=10800
systemProp.file.encoding=UTF-8
org.gradle.warning.mode=all
#gradle运行时的性能配置
kotlin.incremental.useClasspathSnapshot = false
kotlin.stdlib.default.dependency = false
org.gradle.configuration-cache = true
org.gradle.caching = true
systemProp.org.gradle.unsafe.kotlin.assignment = true
#日志输出级别,默认为Info,如果只输出错误日志则指定quiet,命令行执行时需要指定参数-q
#./gradlew -q api:properties
org.gradle.logging.level=(quiet,warn,lifecycle,info,debug)
使用gradle.properties的项目配置文件。这个文件中的配置会自动被build.gradle.kts构建脚本引用,并通过编程的方式可以取得配置信息。一般来讲会配置与性能相关的参数,如缓存、jvm参数等。
#性能配置
kotlin.incremental.useClasspathSnapshot = false
kotlin.stdlib.default.dependency = false
org.gradle.configuration-cache = true
org.gradle.caching = true
systemProp.org.gradle.unsafe.kotlin.assignment = true
在gradle中大概有以下几种属性的配置方式,如果在多个地方配置了同名的参数,则优先级从高到底如下:
以下所有小节的内容代码是增量添加的关系,是在build.gradle文件中配置的
项目类型配置
标识项目的类型,类型有很多,后面在实战章节会详细讲述,此处仅以发布为带有main.class的jar程序为例,其配置如下:
plugins {
id("application")
}
application {
mainClass.set("org.korgs.Main")
}
开发语言配置
plugins {
id("java")
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
tasks {
withType<JavaCompile> {
sourceCompatibility = "17"
targetCompatibility = "17"
}
}
打包类型配置
//jar包
plugins {
application
}
application {
mainClass.set("org.korgs.Main")
}
//war包
plugins {
war
}
tasks.war {
webAppDirectory.set(file("src/main/webapp"))
from("src/rootContent") // adds a file-set to the root of the archive
webInf { from("src/additionalWebInf") } // adds a file-set to the WEB-INF dir.
classpath(fileTree("additionalLibs")) // adds a file-set to the WEB-INF/lib dir.
classpath(moreLibs) // adds a configuration to the WEB-INF/lib dir.
webXml = file("src/someWeb.xml") // copies a file to WEB-INF/web.xml
}
插件配置
plugins {
id 'org.springframework.boot' version '2.7.4'
id 'java'
}
因为java是核心插件,所以不用指定版本,而其它的插件比如org.springframework.boot是社区插件,必须指定版本。
仓库配置
gradle仓库可以直接使用maven的仓库,但是gradle下载的jar包文件格式与maven不一样,所以不能和maven本地仓库共用,仓库的配置如下:
repositories {
mavenLocal() //本地仓库
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' } //外部仓库(阿里云)
mavenCentral() // maven 中心仓库
}
jar依赖配置
gradle依赖写在代码块中,遵循scope(gropId:artifactId:version)格式。
dependencies {
testImplementation('junit:junit:4.13')
implementation('org.projectlombok:lombok:1.18.26')
implementation('mysql:mysql-connector-java:8.0.32')
}
Scope说明:maven只有compile、provided、test、runtime,而gradle有以下几种scope:
说到任务不得不提一下Gradle的生命周期,简单来讲。Gradle 构建的生命周期主要分为三个阶段,Initialization,Configuration,Execution。
在Gradle中,Task是一种最小的工作单元,用于完成构建过程中的某个具体任务,例如编译源代码、运行测试、打包应用等。每个Task都有一个唯一的名字,并且可以接受一组输入和输出。
通常情况下,一个Gradle项目会包含多个Task,这些Task之间存在着依赖关系。用户可以通过执行特定的Task或一系列Task来完成整个构建过程。
用户可以根据实际需求定义自己的Task,也可以利用已经存在的Task,从而实现高度灵活的自动化构建流程。
./gradlew clean
./gradlew build
https://blog.csdn.net/liudonglovehemin/article/details/130980784