我发现该任务是 gradle “JavaExec” 任务。第二种情况,javaexec 是一个 Project 方法。
我开始寻求一种方法来使用与 gradle 本身不同的 JVM 运行 Java 程序(在运行 gradle 时从环境变量或命令行设置)。
在这两种情况下,我都能让它工作:
ext {
MyJvmVersion = 11
}
task SampleJavaExec1(type: JavaExec) {
// Example task for using a custom JVM version with a JavaExec task
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(MyJvmVersion as int)
}
environment['JAVA_HOME'] = javaLauncher.get().metadata.installationPath.asFile.absolutePath
classpath = files("MySimpleProgram.jar")
}
task SampleJavaExec2 {
// Example task for using a custom JVM version with the javaexec method
doLast {
javaexec {
environment['JAVA_HOME'] = "C:\\Program Files\\AdoptOpenJDK\\jdk-11.0.10.9-hotspot"
executable = "C:\\Program Files\\AdoptOpenJDK\\jdk-11.0.10.9-hotspot\\bin\\java.exe"
classpath = files("MySimpleProgram.jar")
}
}
}
在第二种情况下,javaexec() 似乎没有“javaLauncher”。除了硬编码路径,我还发现我可以使用 javaLauncher 通过在 javaexec{} 块中添加以下代码来为我找到它:
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(MyJvmVersion as int)
}
environment['JAVA_HOME'] = javaLauncher.get().metadata.installationPath.asFile.absolutePath
这也应该调用自动下载 JVM 解析,但我还没有测试那部分。