Gradle
Gradle 的核心在于基于 Groovy 的丰富而可扩展的域描述语言(DSL)
目录结构
├── build.gradle 用于配置当前项目的Gradle构建脚本├── gradle │ └── wrapper│ ├── gradle-wrapper.jar Gradle Wrapper可执行jar 文件│ └── gradle-wrapper.properties Gradle Wrapper 配置├── gradlew 类unix下的Gradle Wrapper启动脚本├── gradlew.bat windows下的Gradle Wrapper启动脚本└── settings.gradle 用于配置Gradle构建的Gradle设置脚本
构建基础
- project:我们的应用
- task:每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成
第一个构建脚本
// build.gradletask copy(type: Copy, group: "Custom", description: "从一个地方复制到另一个地方") { from "src" into "dest"}
# 执行任务./gradlew copy
- 使用插件定义任务
plugins { id "base"}task zip(type: Zip, group: "Archive", description: "Archives sources in a zip file") { from "src" archiveName "basic-demo-1.0.zip"}
- 查看可用任务
.\gradlew tasks
构建java项目
├── build.gradle├── gradle │ └── wrapper│ ├── gradle-wrapper.jar│ └── gradle-wrapper.properties├── gradlew├── gradlew.bat├── settings.gradle└── src ├── main │ ├── java │ │ └── demo │ │ └── App.java │ └── resources └── test ├── java │ └── demo │ └── AppTest.java └── resources
// settings.gradlerootProject.name = 'gradle-java' // 项目名
// build.gradleplugins { // 使用java插件 id 'java' // application插件 id 'application'}repositories { // 远程仓库 jcenter()}// 一些依赖dependencies { implementation 'com.google.guava:guava:28.2-jre' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0'}application { // 定义main类 mainClassName = 'gradle.java.App'}test { // 使用junit5测试 useJUnitPlatform()}
# 构建项目./gradlew build
构建JAVA库文件
plugins { // 使用java-library插件 id 'java-library'}repositories { jcenter()}dependencies { // 这个依赖会暴露给消费者,也就是说,这个依赖可以在消费者的classpath下找到 api 'org.apache.commons:commons-math3:3.6.1' // 内部使用的依赖 不会暴露给消费者 implementation 'com.google.guava:guava:28.2-jre' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0'}test { useJUnitPlatform()}
- 自定义
// build.gradleversion = '0.1.0' // 定义jar包版本// 自定义manifest属性jar { manifest { attributes('Implementation-Title': project.name, 'Implementation-Version': project.version) }}repositories { // 自定义仓库 ivy { // URL可以是一个本地目录 url "../local-repo" } // 可以指定多个仓库 jcenter()}
多项目
// 查看子项目任务gradlew :service:tasks// 执行子任务测试gradle :service:test
构建spring boot项目
plugins { id 'java' id 'org.springframework.boot' version '2.2.6.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE'}repositories { maven { url 'https://maven.aliyun.com/repository/jcenter/'} maven { url 'https://maven.aliyun.com/repository/spring/'}}dependencies { implementation 'org.springframework.boot:spring-boot-dependencies:2.2.6.RELEASE' implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' components { withModule('org.springframework:spring-beans') { allVariants { withDependencyConstraints { // Need to patch constraints because snakeyaml is an optional dependency it.findAll { it.name == 'snakeyaml' }.each { it.version { strictly '1.19' } } } } } }}bootJar { // Define the main class for the application. mainClassName = 'gradle.spring.boot.App'}
Groovy
Groovy 是JVM 的一个替代语言—替代是指可以用Groovy 在Java 平台上进行Java 编程,使用方式基本与使用Java 代码的方式相同
程序示例:
class Foo { doSomething() { data = ["name": "James", "location": "London"] for (e in data) { println("entry ${e.key} is ${e.value}") } } closureExample(collection) { collection.each { println("value ${it}") } } static void main(args) { values = [1, 2, 3, "abc"] foo = new Foo() foo.closureExample(values) foo.doSomething() }}
生命周期
初始化->配置->执行