Gradle 脚本

https://docs.gradle.org.cn/current/userguide/logging.html

https://javaguide.cn/tools/gradle/gradle-core-concepts.html#gradle-%E4%BB%BB%E5%8A%A1

gradle -b logger.gradle

task log() {
    doLast{    
        logger.quiet('quiet 重要消息')    
        logger.error('error 错误消息')    
        logger.lifecycle('lifecycler 进度消息')    
        logger.warn('warn 警告消息')    
        logger.info('info 消息 信息')    
        logger.debug('debug 调试信息')  
  }
}

gradle -b logger.gradle log

输出非常多DEBUG
gradle -b logger.gradle -d log

其他配置 -d 或 --debug; -i 或 --info
gradle run --info

gradle.properties 配置文件
org.gradle.logging.level=info

Gradle Task & Plugin & Dependency

task hello {
     doLast {
       println "Hello"
     }
}

tasks.register("hello") {
    group = "task basic sample"
    description = "this is the first lovely task."
    doLast {
        println('Hello!')
    }
}

task clean(type: Delete) {
  delete rootProject.buildDir
}

tasks.register('removeInput', Delete) {
    delete 'inputs/3.txt'
}

脚本插件: 普通的脚本文件

二进制插件: 单独的插件模块,其他模块通过 Plugin ID 应用

apply from: rootProject.file('buildSrc/shared.gradle')

plugins {
    id 'java'
    id 'com.gradleup.shadow' version '8.3.4'
}

插件镜像地址 settings.gradle
pluginManagement {
    repositories {
        maven {
            url 'https://maven.aliyun.com/repository/gradle-plugin'
        }
        gradlePluginPortal()
        mavenCentral()
        jcenter()
    }
}

引入依赖

repositories {
    maven {
        url 'https://maven.aliyun.com/repository/public/'
    }
    maven {
        url 'https://maven.aliyun.com/repository/spring/'
    }
    mavenLocal()
    mavenCentral()
}

dependencies {
    testImplementation "junit:junit:4.13"

    implementation project(':shared')
    implementation project(':api')

    implementation files('libs/xxx.jar')
    implementation(fileTree("libs"));
}

Gradle init {basic,application,library}

gradle-7.4-bin.zip

amazon-corretto-17-x64-linux-jdk.tar.gz

> mkdir myapp && cd
> gradle init
> gradle build

https://docs.gradle.org/current/samples/sample_building_java_applications.html

> gradle run
> gradle clean
> gradle test
> gradle javaToolchains

> gradle tasks
> gradle tasks --all
> gradle tasks --group=“build setup

plugins {
    id 'application' 
}

application {
    mainClass = 'demo.App' 
}

覆写一个任务
task copy(overwrite: true)

Task 检查OS

https://stackoverflow.org.cn/questions/11235614

import org.gradle.internal.os.OperatingSystem;

task preCheck {
   description 'Run all conditional os tasks'
   doLast {
        println(OperatingSystem.current().isMacOsX())
        println(OperatingSystem.current().isLinux())
   }
}

task hello {
    doLast {
        println 'hello onen'
    }
}

hello.onlyIf { !project.hasProperty('fensi') }

TinyLinux Distro

task build {
   description 'Make a tiny Linux from scratch on Linux'
   onlyIf { OperatingSystem.current().isLinux() }

   doFirst {
      println 'make toolchain; preCheck os host tools'
   }
   doLast {
      println 'make rootfs;  download file  wget source'
   }

}

Task 依赖关系

https://docs.gradle.org/current/userguide/part2_gradle_tasks.html https://bbs.huaweicloud.com/blogs/418868

task("H") {
  group("onenewcode") 
  description("this is the task H")
}

task welcome {
    group 'Sample category'
    description 'Tasks which shows a welcome message'
    doLast {
        println 'Welcome in the Baeldung!'
    }
}

依赖关系

tasks.register("hello") {
    doLast {
        println('Hello!')
    }
}

tasks.register("greet") {
    doLast {
        println('How are you?')
    }
    dependsOn("hello")
}

task A {
    println "配置阶段" 
    doFirst(){
        println "root taskA doFirst"
    }
    doLast(){
        println "root taskA doLast"
    }
}

//参数方式依赖: dependsOn后面用冒号
task 'C'(dependsOn: ['A', 'B']) {
    doLast {
        println "TaskC.."
    }
}

//参数方式依赖
task 'C' {
    //内部依赖:dependsOn后面用 = 号
    dependsOn= [A,B] 
    doLast {
        println "TaskC.."
    }
}

// 指定多个 task 依赖
task print(dependsOn :[second,first]) {
 doLast {
      logger.quiet "指定多个task依赖"
    }
}

// 指定一个 task 依赖
task third(dependsOn : print) {
 doLast {
      println '+++++third+++++'
    }
}

Task 运行命令

https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Exec.html https://codippa.com/gradle-run-shell-script/

task build1(type: Exec) {
  workingDir "$projectDir/gradle"
   commandLine 'pwd'
}

task build2(type: Exec) {
   commandLine 'sh', '-c', 'date', '-R'
}

task execScripts {
    doLast {
        def script1 = "sh script1.sh".execute()
        script1.waitFor()

        def script2 = "sh script2.sh".execute()
        script2.waitFor()
    }
}

Task 打包tar

https://dev59.com/7Z3ha4cB1Zd3GeqPS1Yw https://docs.gradle.org.cn/current/dsl/org.gradle.api.tasks.bundling.Tar.html

task tgzTask(type: Tar) {
    into('app/') {
        from 'build/libs'
        include '*.jar'
    }
    into('app/') {
        from 'build/resources/main/banner.txt'
    }
    into('app/config') {
        from 'build/resources/main/config'
        from 'build/resources/main/banner.txt'
    }
    into('app/config/sql') {
        from 'build/resources/main/sql'
    }

    destinationDirectory = file('build/distributions')
    // 不写这两行就是tar
    extension 'tgz'
    compression = Compression.GZIP
}

Task 下载文件, 拷贝文件

https://michelkraemer.com/gradle-download-task-download-files-with-progress/
https://github.com/michel-kraemer/gradle-download-task
https://plugins.gradle.org/plugin/de.undercouch.download

https://docs.gradle.org/current/userguide/working_with_files.html

最新版本 5.6.0
plugins {
    id "de.undercouch.download" version "5.0.0"
}

task downloadFile(type: Download) {
    src 'http://192.168.1.1/pub/gcc-7.3.0.tar.gz'
    dest buildDir
}