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设置脚本

构建基础

第一个构建脚本

// 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()  }}

生命周期

初始化->配置->执行