我有一个 Gradle 的 Java 项目。 此外,我还使用Groovy生成一些将在Java代码中使用的类。Gradle 在下面的单独任务中执行脚本:
task generateClass(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'generatorScript'
}
如果我运行此任务,它首先启动 Java 编译,然后才执行脚本。因此,如果编译失败,我的生成器脚本将不会执行。如前所述,脚本生成一个类,我的 Java 代码实际上依赖于该类,因此,如果未生成,则不会编译 Java。恶性循环。
脚本本身不依赖于某些 Java 类,而是放在单独的源目录中:
/src
/main
/java
/...(java classes)
/groovy
generatorScript.groovy
似乎没有什么会干扰我独立于 Java 编译单独执行脚本。
我怎样才能做到这一点?
问题是你在main
源代码集中有生成器 groovy 脚本,并且你尝试编译这个 groovy 脚本以将其用作JavaExec
任务的类路径。我想这就是执行compileJava
任务的原因。
您可以通过另一种方式,使用groovy.ui.GroovyMain
来执行脚本,并基于此链接使用以下解决方案
configurations {
// a dedicated Configuration for Groovy classpath
groovyScript
}
dependencies {
// Set Groovy dependency so groovy.ui.GroovyMain can be found.
groovyScript localGroovy()
}
task generateClass(type: JavaExec) {
// Set class path used for running Groovy command line.
classpath = configurations.groovyScript
// Main class that runs the Groovy command line.
main = 'groovy.ui.GroovyMain'
// Pass your groovy script as argument of the GroovyMain main
// (can be improved)
args 'src/main/groovy/generatorScript.groovy'
}