如何使用不同的Java版本派生gradle groovy编译过程?

如何使用不同的Java版本派生gradle groovy编译过程?,gradle,groovy,Gradle,Groovy,我有一个Groovy项目,主要是使用Java7构建的,但我想使用Java8构建一个模块。在gradle Groovy插件的文档之后,我为该模块的build.gradle添加了以下内容: // Set up for using Java 8 def java8Home = getJava8Home() def javaExecutable = new File(java8Home, 'bin/java') println "Java executable = $javaExecutable" t

我有一个Groovy项目,主要是使用Java7构建的,但我想使用Java8构建一个模块。在gradle Groovy插件的文档之后,我为该模块的build.gradle添加了以下内容:

// Set up for using Java 8
def java8Home = getJava8Home()
def javaExecutable = new File(java8Home, 'bin/java')
println "Java executable = $javaExecutable"

tasks.withType(AbstractCompile) {
    options.with {
        fork = true
        forkOptions.javaHome = file(java8Home)
    }
    println 'COMPILE ' + name + ': ' + options.forkOptions.javaHome
}

tasks.withType(Test) {
    executable = javaExecutable
    println '   TEST ' + name + ': ' + executable
}
现在,当我运行gradlew项目名称:browserTest时,我看到如下行

Java executable = ...//jdk1.8.0_144.jdk/Contents/Home/bin/java
COMPILE compileBrowserTestGroovy: .../jdk1.8.0_144.jdk/Contents/Home
...
  TEST browserTest: .../jdk1.8.0_144.jdk/Contents/Home/bin/java
...
因此,我希望使用Java8为compileBrowserTestGroovy提供一个分叉编译守护程序。但是,我得到一个错误(
不支持的major.minor版本52.0
),显示它正在使用Java 7,当使用-debug运行时,我看到以下内容

16:14:03.760[INFO][org.gradle.process.internal.DefaultExecHandle]正在启动进程“gradle Worker Daemon 1”。工作目录:/Users/alasdair/workspace/project name命令:/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/bin/Java-Djava.security.manager=worker.org.gradle.process.internal.worker.child.BootstrapSecurityManager-Dfile.encoding=UTF-8-Duser.country=GB-Duser.language=en-Duser.variant-cp/Users/alasdair/.gradle/caches/3.5/workerMain/gradle-worker.jar worker.org.gradle.process.internal.worker.GradleWorkerMain“gradle worker Daemon 1”

我做错了什么

更新:

我创建了一个带有Java7和Java8模块的小测试项目。按照建议进行设置,效果非常好。区别似乎在于“工作者守护进程”,即查看gradle上面的调试输出正在启动进程“gradle工作者守护进程1”(使用java 7),而测试项目的日志显示

16:10:30.559[DEBUG][org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter]为任务执行操作:java-8:compileJava”。
16:10:30.581[DEBUG][org.gradle.api.internal.tasks.compile.normalizaingjavacompiler]编译器参数:-源1.8-target 1.8-d/Users/alasdair/workspace/test project/java-8/build/classes/main-g-sourcepath-proc:none-XDuseUnsharedTable=true-classpath/Users/alasdair/workspace/test project/java-8/src/main/java/Foo.java
16:10:30.582[INFO][org.gradle.api.internal.tasks.compile.CommandLineJavaCompiler]使用Java命令行编译器编译'/Library/Java/JavaVirtualMachines/jdk1.8.0144.jdk/Contents/Home/bin/javac'。
16:10:30.597[INFO][org.gradle.process.internal.DefaultExecHandle]正在启动进程“command”/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/javac“”。工作目录:/Users/alasdair/workspace/test project/java-8命令:/Library/java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/javac@/Users/alasdair/workspace/test project/java-8/build/tmp/compileJava/java编译器args.txt


因此,它似乎在用正确的jvm进行分叉和开始编译。为什么我的主构建要启动这些“守护进程工作程序”?我在gradle.properties
org.gradle.daemon=false中有。我尝试过其他各种方法,但这仍然是一个问题,因为它似乎只是创建和使用一个新的守护进程,而不是按照要求与正确的jvm进行分叉

您可以尝试:
tasks.withType(Test){t->t.executable=javaExecutable.absolutePath}
不幸的是,到目前为止我还没有运行测试-仍在尝试编译。。