我有一个Groovy项目,它主要使用Java 7构建,但我想使用Java 8构建一个模块。遵循gradle Groovy插件的文档,我为模块添加了以下内容到build.gradle: / p>
// 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
...
所以我希望使用Java 8对compileBrowserTestGroovy进行分叉编译守护进程。但是我得到一个错误(Unsupported major.minor version 52.0
),表明它正在使用Java 7,并且在运行-debug时看到以下内容
16:14:03.760 [INFO] [org.gradle.process.internal.DefaultExecHandle] Starting process 'Gradle Worker Daemon 1'. Working directory: /Users/alasdair/workspace/project-name Command: /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'
我做错了什么?
更新
我使用java 7和java 8模块创建了一个小型测试项目。按照建议设置它完美运行。差异似乎是'工作者守护进程',即查看gradle上方的调试输出正在启动进程'Gradle Worker Daemon 1'(使用java 7),而测试项目中的日志显示
16:10:30.559 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':java-8:compileJava'.
16:10:30.581 [DEBUG] [org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler] Compiler arguments: -source 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] Compiling with Java command line compiler '/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/javac'.
16:10:30.597 [INFO] [org.gradle.process.internal.DefaultExecHandle] Starting process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/javac''. Working directory: /Users/alasdair/workspace/test-project/java-8 Command: /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/javac @/Users/alasdair/workspace/test-project/java-8/build/tmp/compileJava/java-compiler-args.txt
所以它似乎是用正确的jvm分叉并开始编译。为什么我的主要构建开始这些'Daemon Workers'?我有gradle.properties org.gradle.daemon=false
。我尝试了其他各种各样的东西,但这仍然是个问题,因为它似乎只是创建和使用一个新的守护进程,而不是根据请求使用正确的jvm分叉