首发于Enaium的集体博客


什么是 Gradle

Gradle是一个基于Apache AntApache Maven概念的我的项目自动化构建工具。它应用一种基于Groovy的特定畛域语言(DSL)来申明我的项目设置,而不是传统的XMLGradle构建脚本是用Groovy编写的,也能够应用Kotlin编写,两者都是基于JVM的语言。

装置 Gradle

在开始之前,想必大家曾经学会了Java或者Kotlin,当初大家都在应用Android Studio开发Android利用,Android Studio是基于IntelliJ IDEA开发的,但当初不从Android Studio的角度来讲,也不从IntelliJ IDEA的角度来讲,而是从Gradle的角度来讲,所以咱们须要去官网下载Gradle,而后在IntelliJ IDEA中去应用Gradle

首先去官网下载Gradle,下载地址:https://gradle.org/releases/,之后点击最新版本中的binary-only,这会间接下载一个zip压缩包,下载实现后解压到一个目录,而后再配置环境变量到bin目录,这样就能够在Terminal中应用gradle命令了,因为Java跨平台的缘故,在其余的操作系统上配置环境变量的形式都是大相不差的,这里我就不再赘述了,如果不会配置环境变量的话,能够去网上搜寻一下,这里我就不再赘述了。

配置好环境变量之后,关上Terminal,输出gradle -v,如果呈现上面的信息,阐明Gradle装置胜利了。

------------------------------------------------------------Gradle 8.1------------------------------------------------------------Build time:   2023-04-12 12:07:45 UTCRevision:     40ba32cde9d6daf2b92c39376d2758909dd6b813Kotlin:       1.8.10Groovy:       3.0.15Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021JVM:          17.0.6 (BellSoft 17.0.6+10-LTS)OS:           Windows 10 10.0 amd64

创立 Hello World 我的项目

创立一个文件夹,而后在文件夹中关上Terminal,输出gradle init,之后依照我的步骤来。

Select type of project to generate:  1: basic  2: application  3: library  4: Gradle pluginEnter selection (default: basic) [1..4] 2 // 抉择 applicationSelect implementation language:  1: C++  2: Groovy  3: Java  4: Kotlin  5: Scala  6: SwiftEnter selection (default: Java) [1..6] 3 // 抉择 JavaGenerate multiple subprojects for application? (default: no) [yes, no] // 默认 noSelect build script DSL:  1: Groovy  2: KotlinEnter selection (default: Groovy) [1..2] 2 // 抉择 KotlinSelect test framework:  1: JUnit 4  2: TestNG  3: Spock  4: JUnit JupiterEnter selection (default: JUnit Jupiter) [1..4] //默认 JUnit JupiterProject name (default: gradle_learn):Source package (default: gradle_learn): cn.enaiumEnter target version of Java (min. 7) (default: 17): // 默认 17Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] // 默认 no> Task :initGet more help with your project: https://docs.gradle.org/8.1/samples/sample_building_java_applications.htmlBUILD SUCCESSFUL in 32s // 构建胜利2 actionable tasks: 2 executed

如果最初呈现BUILD SUCCESSFUL,阐明我的项目创立胜利了,当初咱们来看一下我的项目的构造,这里先简略的介绍一下,前面会具体的介绍。

│  .gitattributes // git 配置文件│  .gitignore // git 配置文件│  gradlew // gradle 脚本,当你没有装置 gradle 的时候,能够应用这个脚本来构建我的项目│  gradlew.bat // windows 下的 gradlew 脚本│  settings.gradle.kts // gradle 的settings配置文件│  ├─.gradle├─app // 我的项目模块,这是一个子项目│  │  build.gradle.kts // app 模块的 build 配置文件│  │  │  └─src // app 模块的源码│      ├─main│      │  ├─java│      │  │  └─cn│      │  │      └─enaium│      │  │              App.java│      │  │              │      │  └─resources│      └─test│          ├─java│          │  └─cn│          │      └─enaium│          │              AppTest.java│          │              │          └─resources└─gradle // gradle 的wrapper配置文件,当你没有装置 gradle 的时候,脚本会自应用wrapper来下载 gradle    └─wrapper            gradle-wrapper.jar            gradle-wrapper.properties // gradle 的wrapper配置文件,下载的 gradle 版本,下载地址等

运行我的项目,关上Terminal,输出gradle run,如果呈现上面的信息,阐明我的项目运行胜利了,这里我的项目中自带了一个Guava库和JUnit库,如果嫌下载太慢的话,能够本人去build.gradle.kts中删除掉。

> Task :app:run                                                                                                         Hello World!BUILD SUCCESSFUL in 10s2 actionable tasks: 2 executed

删掉

dependencies {    // Use JUnit Jupiter for testing.    testImplementation("org.junit.jupiter:junit-jupiter:5.9.1")    // This dependency is used by the application.    implementation("com.google.guava:guava:31.1-jre")}tasks.named<Test>("test") {    // Use JUnit Platform for unit tests.    useJUnitPlatform()}

我的项目构造

settings.gradle.kts

settings.gradle.ktsGradle的配置文件,这个文件中配置了我的项目的名称和模块,这里的模块指的是app模块,这个模块是Gradle默认创立的,如果你想创立其余的模块,能够在这里配置。

//这个是gradle创立时自带的一个插件,这个插件能够主动下载jdkplugins {    // Apply the foojay-resolver plugin to allow automatic download of JDKs    id("org.gradle.toolchains.foojay-resolver-convention") version "0.4.0"//插件的ID和版本,这里的插件会从Gradle的插件仓库中下载,构造和Maven仓库相似}rootProject.name = "gradle_learn"//项目名称include("app")//蕴含的模块

build.gradle.kts

在大部分状况下,都没有应用App最为子模块(除了Android我的项目),也就是间接从其中的src开始,我的项目构造如下。

│  build.gradle.kts // build 配置文件│  settings.gradle.kts// settings 配置文件│  ├─gradle│  └─wrapper│          gradle-wrapper.jar│          gradle-wrapper.properties│          └─src // 源码    ├─main    └─test

但基本上都差不多,因为每个我的项目中都会有build.gradle.kts,这就是以后我的项目的build配置文件,这个文件中配置了我的项目的build信息,比方我的项目的groupversiondependencies等。

plugins {// 以后我的项目应用的插件,这里如果有子项目,子项目也会应用这里的插件    // Apply the application plugin to add support for building a CLI application in Java.    application // 利用插件,这个插件会主动创立一个`run`工作,用于运行我的项目}repositories {// 我的项目的仓库,这里的仓库是用于下载依赖的,这里的仓库是`Maven`仓库,也就是`Maven Central`    // Use Maven Central for resolving dependencies.    mavenCentral()}dependencies {// 我的项目的依赖,这里的依赖是`Maven`仓库中的依赖,这里的依赖是`JUnit`和`Guava`    // Use JUnit Jupiter for testing.    testImplementation("org.junit.jupiter:junit-jupiter:5.9.1")// 测试依赖,testImplementation是测试依赖,implementation是利用依赖    // This dependency is used by the application.    implementation("com.google.guava:guava:31.1-jre")// 利用依赖,其中的字符串是`Maven`仓库中的依赖,应用分号宰割,第一个是`group`,第二个是`name`,第三个是`version`}// Apply a specific Java toolchain to ease working on different environments.java {// java的配置,这里配置了java的版本    toolchain {        languageVersion.set(JavaLanguageVersion.of(17))// java的版本    }}tasks.named<Test>("test") {// test工作的配置,这里配置了test工作的应用的测试框架    // Use JUnit Platform for unit tests.    useJUnitPlatform()// 应用JUnit作为测试框架}//Application插件的配置,这里配置了mainClass,也就是我的项目的入口类application {    // Define the main class for the application.    mainClass.set("cn.enaium.App")// 入口类}

gradle-wrapper.properties

# distributionBase 就是下载的gradle的寄存地位,如果环境中没有配置GRADLE_USER_HOME,那么就会应用默认的地位,也就是以后用户的目录下distributionBase=GRADLE_USER_HOME# distributionPath 就是下载的gradle的寄存地位,也就是distributionBase的目录中的wrapper/dists目录distributionPath=wrapper/dists# distributionUrl 就是下载的gradle的地址,这里的地址是gradle的官网地址,也就是https://services.gradle.org/distributions/gradle-8.1-bin.zipdistributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip# networkTimeout 就是下载gradle的超时工夫,单位是毫秒networkTimeout=10000# 和下面同理zipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/dists

src

├─main│  ├─java│  │  └─cn│  │      └─enaium│  └─resources└─test    ├─java    │  └─cn    │      └─enaium    └─resources

这个目录下的内容就是我的项目的源码了,这里的maintest两个都是源码目录,只不过main是我的项目的源码,test是我的项目的测试源码,这两个目录下都有javaresources两个目录,java目录下寄存的是java源码,resources目录下寄存的是资源文件,比方properties文件,xml文件等,这里都是固定的格局,如果你想要自定义,能够在build.gradle.kts中配置,但本篇文章是简略的入门,所以就不介绍了。

命令/工作

gradle tasks

这个命令是查看以后我的项目的所有工作,这个命令会列出所有的工作,包含Gradle自带的工作,比方buildclean等,还有App模块自带的工作,比方runtest等,这里只介绍一下比拟罕用的命令,其余的命令能够自行查看。

> Task :tasks //工作的名称,这里是tasks,也就是说查看所有工作也是一个工作                                                                                                           ------------------------------------------------------------Tasks runnable from root project 'gradle_learn'------------------------------------------------------------Application tasks// 工作的Group,这里是Application,这个是Application插件自带的工作-----------------run - Runs this project as a JVM application // 工作的名称Build tasks-----------assemble - Assembles the outputs of this project.build - Assembles and tests this project.buildDependents - Assembles and tests this project and all projects that depend on it.buildNeeded - Assembles and tests this project and all projects it depends on.classes - Assembles main classes.clean - Deletes the build directory.jar - Assembles a jar archive containing the main classes.testClasses - Assembles test classes.Build Setup tasks-----------------init - Initializes a new Gradle build.wrapper - Generates Gradle wrapper files.Distribution tasks------------------assembleDist - Assembles the main distributionsdistTar - Bundles the project as a distribution.distZip - Bundles the project as a distribution.installDist - Installs the project as a distribution as-is.Documentation tasks-------------------javadoc - Generates Javadoc API documentation for the main source code.Help tasks----------buildEnvironment - Displays all buildscript dependencies declared in root project 'gradle_learn'.dependencies - Displays all dependencies declared in root project 'gradle_learn'.dependencyInsight - Displays the insight into a specific dependency in root project 'gradle_learn'.help - Displays a help message.javaToolchains - Displays the detected java toolchains.kotlinDslAccessorsReport - Prints the Kotlin code for accessing the currently available project extensions and conventions.outgoingVariants - Displays the outgoing variants of root project 'gradle_learn'.projects - Displays the sub-projects of root project 'gradle_learn'.properties - Displays the properties of root project 'gradle_learn'.resolvableConfigurations - Displays the configurations that can be resolved in root project 'gradle_learn'.tasks - Displays the tasks runnable from root project 'gradle_learn' (some of the displayed tasks may belong to subprojects).Verification tasks------------------check - Runs all checks.test - Runs the test suite.To see all tasks and more detail, run gradle tasks --allTo see more detail about a task, run gradle help --task <task>BUILD SUCCESSFUL in 1s1 actionable task: 1 executed

gradle run

这个命令是Application插件专有的命令,这个命令会运行Application插件配置的入口类,这里的入口类是cn.enaium.App,也就是build.gradle.kts中配置的mainClass

gradle init

也就是本篇文章最开始所用到的工作,这个工作会生成一个gradle我的项目。

gradle build

构建我的项目,这个命令会执行build.gradle.kts中配置的build工作,这个命令会生成一个build目录,这个目录下寄存的是构建后的文件,比方jar文件,class文件等。

IntelliJ IDEA

导入我的项目

关上IntelliJ IDEA,点击Open,抉择我的项目所在的目录,点击OK,这样就能够导入我的项目了。

配置Gradle

基本上大多数的我的项目都不须要特意配置Gradle,关上设置中File> Settings> Build, Execution, Deployment> Build Tools> Gradle,这里就是对于Gradle的配置,其中Gradle JVMGradleJVM配置,也就是运行GradleJDK版本,之后关上IntelliJ IDEA右侧的Gradle,能够看到所有的我的项目模块还有所有工作,并且我的项目中所用到的依赖都会在这里显示进去,如果你想要运行某个工作,能够在这里双击,也能够在Terminal中输出gradle <task>,比方gradle run,这样就能够运行run工作了。

总结

本篇文章次要介绍了Gradle的根本应用,包含Gradle的装置,Gradle的目录构造,Gradle的命令/工作,IntelliJ IDEA的配置,Gradle的配置,Gradle的应用,Gradle的插件,Gradle的依赖,GradleJVM配置,然而本篇文章只是简略的介绍了一下,如果想要深刻理解,能够查看Gradle官网文档。