首页 > 解决方案 > 具有编译依赖项的 Gradle 任务

问题描述

我想根据每个 Gradle 任务的 java 类中的注释生成一个文本文件。

我找到了一些参考资料,例如https://mrhaki.blogspot.com/2014/09/gradle-goodness-running-groovy-scripts.html

task runScript(type: JavaExec) {
    main = 'com.mrhaki.CurrentDate'
    classpath = sourceSets.main.compileClasspath
}

但在这里我必须使用我不想要的外部文件。

我尝试在build.gradle文件中定义类:

class MyScript {
  def call() {
    println ":: Vertx version : $io.vertx.core.impl.launcher.commands.VersionCommand.version"
  }
}

task runScript(type: JavaExec) {
  main = 'MyScript'
  classpath = sourceSets.main.runtimeClasspath
}

但无法解决:

> Task :runScript FAILED
Error: Could not find or load main class MyScript

我可以使用一些解决方法将脚本作为 args 中的字符串传递,例如

task runGroovyScript(type: JavaExec) {
    classpath = configurations.groovyScript
    main = 'groovy.ui.GroovyMain'
    args '-e', "println 'Hello Gradle!'"
}

但这会非常难看。

如何在 Gradle 任务中运行内联 groovy 代码?

标签: javagradlegroovy

解决方案


您可以在任务的 adoFirstdoLast闭包中实现任何您想要的 Groovy 代码:

task doSomething {
    doFirst {
        // any Groovy code you want
        println ":: Vertx version : $io.vertx.core.impl.launcher.commands.VersionCommand.version"
    }
}

或者,您可以创建实现所需行为的自定义任务类型:

class MyTask extends DefaultTask {
    @TaskAction
    def doSomething() {
        println ":: Vertx version : $io.vertx.core.impl.launcher.commands.VersionCommand.version"
    }
}

task doSomething(type: MyTask)

推荐阅读