从Gradle执行Groovy脚本而不编译Java

从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编译,然后才执行脚本。因此,如果编译失败,我的生成器脚本将不会执行。正如前面提到的,脚本生成

我和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编译单独执行脚本


如何实现这一点?

问题在于,您在主源集中有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'

}