从Gradle执行Groovy脚本而不编译Java
我和Gradle有一个Java项目。 我还使用Groovy生成一些将在Java代码中使用的类。Gradle在下面的单独任务中执行脚本:从Gradle执行Groovy脚本而不编译Java,java,gradle,groovy,Java,Gradle,Groovy,我和Gradle有一个Java项目。 我还使用Groovy生成一些将在Java代码中使用的类。Gradle在下面的单独任务中执行脚本: task generateClass(type: JavaExec) { classpath = sourceSets.main.runtimeClasspath main = 'generatorScript' } 若我运行这个任务,它首先启动Java编译,然后才执行脚本。因此,如果编译失败,我的生成器脚本将不会执行。正如前面提到的,脚本生成
task generateClass(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'generatorScript'
}
若我运行这个任务,它首先启动Java编译,然后才执行脚本。因此,如果编译失败,我的生成器脚本将不会执行。正如前面提到的,脚本生成一个类,我的Java代码实际上依赖于这个类,所以,如果不生成,Java将不会被编译。恶性循环
脚本本身并不依赖于某些Java类,而是放在单独的源目录中:
/src
/main
/java
/...(java classes)
/groovy
generatorScript.groovy
似乎没有什么干扰我独立于Java编译单独执行脚本
如何实现这一点?问题在于,您在主源集中有generator groovy脚本,并且您尝试编译此groovy脚本以将其用作JavaExec任务的类路径。我想这就是为什么要执行compileJava任务 您可以用另一种方式,使用groovy.ui.GroovyMain执行脚本,下面的解决方案基于
也许可以手动指定类路径,但其中不包含Java类,但它必须包含什么?。在这种情况下,Java编译将在Groovy之前执行,但不会涉及项目类。如果安装了Groovy,只需使用系统命令Groovy generatorScript.Groovy运行它。或者使用java-cp groovy-all-x.x.x.jar groovy.ui.GroovyMain generatorScript.groovyIt,谢谢!奇怪的是,我已经尝试过这种方法,但由于某种原因没有成功。
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'
}