我有一个使用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编译独立执行脚本。
我该如何实现?
答案 0 :(得分:1)
问题是您在main
源集中有生成器groovy脚本,并且尝试编译该groovy脚本以将其用作您的JavaExec
任务的类路径。我猜这就是执行compileJava
任务的原因。
您可以采用另一种方式,使用groovy.ui.GroovyMain
执行脚本,并使用基于this link的以下解决方案
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'
}