前言 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。Gradle 构建脚本使用的是 Groovy 或 Kotlin 的特定领域语言来编写的,而不是传统的XML。 当前官方支持的语言为Java、Groovy、Scala、C++、Swift、JavaScript等以及Spring框架。(维基百科 )
初始化项目
查看支持的任务
清理构建的文件
以JVM应用程序的形式运行
编译代码
-q:不显示输出
测试代码
完整构建
包含编译和测试
来自application插件和java插件
使用Groovy作为构建脚本语言 Java项目构建脚本 settings.gradle
build.gradle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 plugins { id 'java' } group = 'org.example' version = '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testImplementation platform('org.junit:junit-bom:5.10.0' ) testImplementation 'org.junit.jupiter:junit-jupiter' } test { useJUnitPlatform() }
JavaWeb项目构建脚本
在src/main目录下创建webapp/WEB-INF/web.xml文件
src/main/webapp/WEB-INF/web.xml 1 2 3 4 5 6 7 <?xml version="1.0" encoding="UTF-8" ?> <web-app version ="2.4" xmlns ="http://java.sun.com/xml/ns/j2ee" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" ></web-app >
build.gradle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 plugins { id 'java' id 'war' } group 'org.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testImplementation platform('org.junit:junit-bom:5.10.0' ) testImplementation 'org.junit.jupiter:junit-jupiter' } test { useJUnitPlatform() }
包含父子级模块的微服务项目构建脚本 子模块继承父模块的依赖
如果希望子模块继承父模块的依赖,可以在父模块的build.gradle文件通过allprojects{}定义公共依赖,此时所有子模块build.gradle即使什么也不配置,也同样拥有所有被allprojects{}包裹起来的配置
build.gradle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 allprojects { plugins { id 'java' } group 'org.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testImplementation platform('org.junit:junit-bom:5.10.0' ) testImplementation 'org.junit.jupiter:junit-jupiter' } test { useJUnitPlatform() } }
子模块引用其他子模块的依赖
如果多个子模块需要引用相同的依赖,可以通过在其中一个子模块的build.gradle文件配置依赖,然后在另一个子模块引用这个子模块的所有依赖
:子模块名:其他子模块名可以在父模块的settings.gradle中复制
build.gradle 1 2 3 dependencies { compile(":子模块名" ) }
使用Kotlin作为构建脚本语言 Java项目构建脚本 settings.gradle.kts
build.gradle.kts 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 plugins { id("java" ) } group = "org.example" version = "1.0-SNAPSHOT" repositories { mavenCentral() } dependencies { testImplementation(platform("org.junit:junit-bom:5.10.0" )) testImplementation("org.junit.jupiter:junit-jupiter" ) } tasks.test { useJUnitPlatform() }
将Maven的本地仓库作为Gradle的本地仓库 ~/.bashrc 1 export GRADLE_USER_HOME="Maven的本地仓库路径"
settings.gradle
settings.gradle文件的全局对象为settings,可以省略
settings对象的属性 定义根项目名 settings.gradle.kts 1 rootProject.name = "项目名"
settings对象的方法 配置插件
id(""):根据插件ID指定插件version(""):指定插件版本
settings.gradle.kts 1 2 3 plugins { id("" ) version "" }
配置子模块 settings.gradle.kts
settings.gradle.kts 1 include("子模块名1" , "子模块名2" )
配置插件仓库和依赖仓库
gradlePluginPortal():Gradle插件仓库google():Google插件仓库maven:配置Maven插件仓库
setUrl(""):配置Maven仓库URL
https://maven.aliyun.com/repository/public:阿里云Maven仓库
settings.gradle.kts 1 2 3 4 5 6 7 8 9 pluginManagement { repositories { gradlePluginPortal() google() maven { setUrl("https://maven.aliyun.com/repository/public" ) } } }
build.gradle
build.gradle文件的全局对象为project,可以省略
project对象的属性 定义组ID build.gradle.kts
定义项目版本号 build.gradle.kts 1 version = "1.0-SNAPSHOT"
定义项目名 build.gradle.kts
定义项目描述 build.gradle.kts
project对象的方法 配置插件
id("java"):构建Java项目id("war"):构建JavaWeb项目id("application"):构建Java项目,生成可执行程序(Jar包)id("cpp-application"):构建C++应用id("swift-application"):构建Swift应用id("org.jetbrains.kotlin.jvm") version "2.1.21"、kotlin("jvm") version "2.1.21":构建Kotlin项目
build.gradle.kts
配置依赖仓库
mavenCentral():Maven官方仓库maven:配置Maven仓库
setUrl(""):配置Maven仓库URL
https://maven.aliyun.com/repository/public:阿里云Maven仓库
build.gradle.kts 1 2 3 4 5 6 respositories { mavenCentral() maven { setUrl("https://maven.aliyun.com/repository/public" ) } }
配置项目依赖
5.10.0:指定具体版本+:指定最新版本
build.gradle.kts 1 2 3 dependencies { implementation(platform("org.junit:junit-bom:5.10.0" )) }
build.gradle.kts 1 2 3 dependencies { implementation(platform("org.junit" , "junit-bom" , "5.10.0" )) }
配置不同场景的依赖 配置依赖 build.gradle.kts 1 2 3 dependencies { implementation("" ) }
配置API依赖
build.gradle.kts 1 2 3 dependencies { api("" ) }
配置仅编译时依赖 build.gradle.kts 1 2 3 dependencies { compileOnly("" ) }
配置仅运行时依赖 build.gradle.kts 1 2 3 dependencies { runtimeOnly("" ) }
配置仅测试时依赖 build.gradle.kts 1 2 3 dependencies { testImplementation("" ) }
配置仅安卓测试时依赖 build.gradle.kts 1 2 3 dependencies { androidTestImplementation("" ) }
配置Java注解处理依赖 build.gradle.kts 1 2 3 dependencies { annotationProcessor("" ) }
配置Kotlin注解处理依赖 build.gradle.kts 1 2 3 dependencies { kapt("" ) }
指定本地文件作为依赖 指定文件 build.gradle.kts 1 2 3 dependencies { implementation(files("lib/<file_1>.jar" ), files("lib/<file_2>.jar" )) }
指定目录 build.gradle.kts 1 2 3 dependencies { implementation(fileTree("lib" )) }
指定子模块作为依赖 build.gradle.kts 1 2 3 dependencies { implementation(project(":模块名" )) }
配置排除子依赖 排除单个依赖 build.gradle.kts 1 2 3 4 5 dependencies { implementation("" ) { exclude("org.junit" ) } }
排除整组依赖 build.gradle.kts 1 2 3 4 5 dependencies { implementation("" ) { exclude("org.junit" , "junit-bom" ) } }
强制依赖版本
!!:强制指定的依赖版本
build.gradle.kts 1 2 3 dependencies { implementation(platform("org.junit:junit-bom:5.10.0!!" )) }
配置测试 build.gradle.kts 1 2 3 tasks.test { useJUnitPlatform() }
配置Java版本(Java插件)
souceCompatibility:定义编码时的Java版本targetCompatibility:定义编译后需要的Java版本
build.gradle.kts 1 2 3 4 java { souceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 }
build.gradle.kts 1 2 3 4 configure<JavaPluginExtension> { souceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 }
配置主类(Application插件) build.gradle.kts 1 2 3 application { mainClass = "org.example.demo.Main" }
build.gradle.kts 1 2 3 configure<JavaApplication> { mainClass = "org.example.demo.Main" }
任务配置 添加或修改任务配置 添加自定义任务配置 build.gradle.kts 1 2 3 tasks.register("新任务名" ) { ... }
根据任务类添加自定义任务配置 build.gradle.kts 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 abstract class 任务类名 : DefaultTask() { private var 属性名: String = "" @TaskAction fun doTask () { ... } fun method (形参) { ... } } tasks.register<任务类名>(属性值) { method(实参) }
修改已存在任务配置 build.gradle.kts 1 2 3 tasks.named("已存在任务名" ) { ... }
修改build任务配置 build.gradle.kts
修改默认任务配置 build.gradle.kts 1 2 3 tasks.register<Task> { ... }
指定默认任务 build.gradle.kts
为任务添加生命周期函数 build.gradle.kts 1 2 3 4 5 6 7 8 tasks.register("任务名" ) { doFirst { ... } doLast { ... } }
为任务添加命令行参数 build.gradle.kts 1 2 3 4 5 6 7 8 tasks.register("任务名" ) { doFirst { println(project.properties["参数名" ]) } doLast { ... } }
定义任务所在组
在IDEA的Gradle插件中会以组区分任务,默认组名为build
build.gradle.kts 1 2 3 4 5 tasks.register("任务名" ) { group = "build" }
定义任务描述 build.gradle.kts 1 2 3 4 5 6 7 8 9 10 11 tasks.register("任务名" ) { description = "任务描述" doFirst { ... } doLast { ... } }
依赖于其他任务
build.gradle.kts 1 2 3 4 5 tasks.register("任务名" ) { dependsOn("任务名" ) }
build.gradle.kts 1 2 3 4 5 tasks.register("任务名" ) { dependsOn(tasks.compileJava) }
项目发布 引入maven-publish插件 build.gradle.kts 1 2 3 plugins { id("maven-publish" ) }
添加发布配置 build.gradle.kts 1 2 3 4 5 6 7 8 9 10 11 12 13 publishing { publications { create<MavenPublication>("library" ) { groupId = "org.example" artifact = "demo" version = "1.0-SNAPSHOT" from(components["java" ]) } } repositories { mavenLocal() } }
多模块项目配置 当前模块及所有子模块都生效的配置 build.gradle.kts
所有子模块都生效的配置 build.gradle.kts
配置插件 build.gradle.kts 1 2 3 subprojects { apply(plugin = "java" ) }
以Kotlin文件作为Gradle配置 引入kotlin-dsl插件 build.gradle.kts 1 2 3 plugins { id("kotlin-dsl" ) }
自定义函数 定义函数 src/main/kotlin/Maven.kt 1 2 3 4 5 import org.gradle.api.artifacts.dsl.RepositoryHandlerfun RepositoryHandler.mavenAlibaba () = maven { setUrl("https://maven.aliyun.com/repository/public" ) }
调用函数 build.gradle.kts 1 2 3 repositories { mavenAlibaba() }
自定义属性 定义属性 src/main/kotlin/Maven.kt 1 2 3 4 5 6 import org.gradle.api.JavaVersionobject Version { val sourceVersion = JavaVersion.VERSION_21 val targetVersion = JavaVersion.VERSION_21 }
调用属性 build.gradle.kts 1 2 3 4 configure<JavaPluginExtension> { sourceCompatibility = Version.sourceVersion targetCompatibility = Version.targetVersion }
自定义插件及任务 定义插件类 src/main/kotlin/Plugin.kt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import org.gradle.api.Pluginimport org.gradle.api.Projectclass 插件类名 : Plugin<Project> { override fun apply (target: Project ) { target.tasks.register("任务名1" ) { doFirst { ... } doLast { ... } } target.tasks.register("任务名2" ) { doFirst { ... } doLast { ... } } } }
通过插件类配置插件id build.gradle.kts 1 2 3 4 5 6 7 8 gradlePlugin { plugins { create("插件名" ) { id = "自定义插件id" implementationClass = "插件类全局限定名" } } }
调用插件 build.gradle.kts 1 2 3 plugins { id("自定义插件id" ) }
完成 参考文献 哔哩哔哩——代码基基 javaroad 哔哩哔哩——青空の霞光