Gradle
Centos下载安装
利用SDKMAN安装。
先安装SDKMAN
> curl -s "https://get.sdkman.io" | bash
> source "$HOME/.sdkman/bin/sdkman-init.sh"
> sdk version
之后利用SDKMAN安装gradle。
> sdk install gradle 5.6.4
> gradle -v
入门项目
创建一个新项目。
❯ mkdir basic-demo
❯ cd basic-demo
利用gradle初始化命令创建一个简单项目。所有选项都默认即可。
> gradle init
创建的项目目录结构为:
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
创建一个新目录,添加一个任意文件
> mkdir src
> echo Hello, world! > src/myfile.txt
编辑build.gradle
文件,向里面增加一个新的task。
task copy(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {
from "src"
into "dest"
}
接下来用gradlew执行我们新加入的copy命令,它会把src目录下的文件拷贝到dest目录下。
> sh gradlew copy
接下来我们加入一个插件,在https://plugins.gradle.org/能找到许多gradle的插件。
在build.gradle
文件的首行加入下面内容。
plugins {
id "base"
}
之后我们加入zip任务,它可以帮助我们打包。
task zip(type: Zip, group: "Archive", description: "Archives sources in a zip file") {
from "src"
setArchiveName "basic-demo-1.0.zip"
}
同样,执行以下命令,生成的文件为build/distributions/basic-demo-1.0.zip
。
> sh gradlew zip
我们可以用tasks
任务查看我们现在可以执行的所有任务,包括预置的任务,自定义的任务,以及插件带来的任务。
> sh gradlew tasks
properties任务会告诉你你的项目的属性。
> sh gradlew properties
你可以在build.gralde
文件中定义或者修改属性。
description = "A trivial Gradle build"
version = "1.0"
入门java项目
创建目录。
> mkdir demo
> cd demo
之后初始化项目,这里我们要构建的是java-library。
> gradle init
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 3
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Scala
6: Swift
Enter selection (default: Java) [1..6] 3
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2]
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Project name (default: demo):
init
命令首先先执行wrapper
任务,wrapper
任务会生成gradlew
和gradlew.bat
两个wrapper脚本,之后创建一个新的项目。
项目结构如下。
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ └── java
│ └── demo
│ └── Library.java
└── test
└── java
└── demo
└── LibraryTest.java
build脚本中加入了java-library
插件,这个插件是java-base
插件的扩展,向其中加入了一些额外的任务来编译java源代码。
Library.java
是一个样例源文件,LibraryTest.java
是其对应的单元测试文件。这两个文件都是init
任务生成的样例。
你可以用gradle
来执行命令,也可以用wrapper
来中转命令,一般来说,后者会更加好一些。
下面用build
命令编译任务。
> sh gradlew build
第一次运行build
任务的时候,gradle会检测依赖包是否已经存在本地~/.gradle
目录下了,如果不存在,则会去远程仓库下载。
任务完成后,我们可以在build/libs
目录下找到文件demo.jar
文件。
> jar tf demo.jar
如果你想要JAR文件名称上带上版本号,你可以手动配置build文件中的version
属性。
version = '0.1.0'
重新构建后你会发现生成的JAR文件名称变成了demo-0.1.0.jar
。
另外一个常见的需求就是自定义清单文件,比如加上一些属性。我们可以通过配置jar
任务来实现这个能力。
jar {
manifest {
attributes('Implementation-Title': project.name,
'Implementation-Version': project.version)
}
}
重新构建后就可以看到改变了。
java-library
插件内置了对JAVA的API文档的支持,通过javadoc
任务。
> sh gradlew javadoc
生成的javadoc文件位于目录build/docs/javadoc
下。
java项目依赖
build文件中的dependencies
代码块中声明了项目的依赖。而所有的依赖都会在repositories
代码块中声明的仓库中查找。
dependencies {
implementation 'org.hibernate:hibernate-core:3.6.7.Final'
api 'com.google.guava:guava:23.0'
testImplementation 'junit:junit:4.+'
}
依赖的类型三类:
- implementation:依赖仅用于编译和内部使用。
- api:依赖用于编译,同时会作为包的api暴露。
- testImplementation:依赖用于执行测试代码。
gradle在仓库中查找依赖,每个仓库都是一个模块集合,通过group
、name
和version
进行组织。gradle能够区分不同的仓库类型,比如Maven和Ivy,并且支持以多种协议访问这些仓库。
默认情况下,gradle不会定义任何仓库,你需要在repositories
代码块中定义至少一个仓库。你可以直接使用maven的官方仓库。
repositories {
mavenCentral()
}
你也可以指定本地仓库。
repositories {
ivy {
// URL can refer to a local directory
url "../local-repo"
}
}
要发布你所编写的库,你需要告诉gradle要发布到哪里,你需要为uploadArchives
任务声明仓库信息。
plugins {
id 'maven'
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
}
}
}
现在你执行uploadArchives
任务,gradle就会构建JAR文件,生成一个.pom
文件,并上传到仓库中。