首发于Enaium的集体博客
什么是 Gradle
Gradle
是一个基于Apache Ant
和Apache Maven
概念的我的项目自动化构建工具。它应用一种基于Groovy
的特定畛域语言(DSL
)来申明我的项目设置,而不是传统的XML
。Gradle
构建脚本是用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.kts
是Gradle
的配置文件,这个文件中配置了我的项目的名称和模块,这里的模块指的是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
信息,比方我的项目的group
,version
,dependencies
等。
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
这个目录下的内容就是我的项目的源码了,这里的main
和test
两个都是源码目录,只不过main
是我的项目的源码,test
是我的项目的测试源码,这两个目录下都有java
和resources
两个目录,java
目录下寄存的是java
源码,resources
目录下寄存的是资源文件,比方properties
文件,xml
文件等,这里都是固定的格局,如果你想要自定义,能够在build.gradle.kts
中配置,但本篇文章是简略的入门,所以就不介绍了。
命令/工作
gradle tasks
这个命令是查看以后我的项目的所有工作,这个命令会列出所有的工作,包含Gradle
自带的工作,比方build
,clean
等,还有App
模块自带的工作,比方run
,test
等,这里只介绍一下比拟罕用的命令,其余的命令能够自行查看。
> 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 JVM
是Gradle
的JVM
配置,也就是运行Gradle
的JDK
版本,之后关上IntelliJ IDEA
右侧的Gradle
,能够看到所有的我的项目模块还有所有工作,并且我的项目中所用到的依赖都会在这里显示进去,如果你想要运行某个工作,能够在这里双击,也能够在Terminal
中输出gradle <task>
,比方gradle run
,这样就能够运行run
工作了。
总结
本篇文章次要介绍了Gradle
的根本应用,包含Gradle
的装置,Gradle
的目录构造,Gradle
的命令/工作,IntelliJ IDEA
的配置,Gradle
的配置,Gradle
的应用,Gradle
的插件,Gradle
的依赖,Gradle
的JVM
配置,然而本篇文章只是简略的介绍了一下,如果想要深刻理解,能够查看Gradle官网文档。