下面我们用一个java工程来演示 Gradle 的简单使用。
Gradle 内置的 init
任务,用于把一个空目录初始化为Gradle项目。init
任务使用 wrapper
任务创建 Gradle 的 wrapper 脚本 gradlew
/gradlew.bat
。
1. 创建demo项目
step 0:前提准备
- JDK 8+
- 已安装 Gradle
step 1:创建一个目录(此例目录名是demo),即我们的java工程,进入demo目录
step 2:执行 init 任务:gradle init
,当提示时,选择2: application
,下一步选择 3: Java
作为开发语言. 下一步是选择 DSL 作为构建语言,选择 1 : Groovy
。
$ gradle init
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 2
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] 1
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4]
Project name (default: demo):
Source package (default: demo):
BUILD SUCCESSFUL
2 actionable tasks: 2 executed
初始化任务执行成功后,生成的项目结构如下:
├── gradle // wrapper 文件
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew //wrapper 启动脚本
├── gradlew.bat
├── settings.gradle // 配置文件,用于定义项目名和子项目
├── build.gradle //demo项目的构建脚本
└── src
├── main
│ └── java
│ └── demo
│ └── App.java
└── test
└── java
└── demo
└── AppTest.java
step 3 : 执行
$ ./gradlew run
> Task :app:run
Hello world!
BUILD SUCCESSFUL
2 actionable tasks: 2 executed
第一次执行上面脚本的时候,需要一些时间,是由于需要下载gradle版本,存储的位置是当前项目中.gradle/wrapper/dists
step 4 :构建
$ ./gradlew build
BUILD SUCCESSFUL in 0s
7 actionable tasks: 7 executed
如果项目中使用了 application
插件,在构建时,会生成两种形式的包,tar、zip,如上述脚本将生成两个包:
build/distributions/app.tar
build/distributions/app.zip
总结: 本节我们学习了
- 初始化一个java项目
- 使用
application
插件的run
任务 - 打包java应用
2. 文件介绍
settings.gradle
rootProject.name = 'demo'
-
rootProject.name
:项目名,用于构建 -
include(…)
:子项目,如include(lk-order)
build.gradle
plugins {
// 使用java插件以添加对java的支持
id 'java'
// 使用application插件以添加对构建CLI应用程序的支持
id 'application'
}
// 仓库
repositories {
// 也可以声明 Maven/Ivy/file 仓库,如mavenCentral()
jcenter()
}
// 此项目的依赖
dependencies {
implementation 'com.google.guava:guava:28.0-jre'
testImplementation 'junit:junit:4.12'
}
application {
//main class
mainClassName = 'demo.App'
}