在gradle中,javaexec和javaexec任务的区别是什么?



例如,我可以有一个JavaExec任务:

task javaExecCaseA(type: JavaExec) {
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(11)
}
classpath = files("MySimpleProgram.jar")
}

或者,在泛型任务中:

task javaExecCaseB {
doLast {
javaexec {
classpath = files("MySimpleProgram.jar")
}
}
}

我还没有弄清楚如何在第二种情况下指定JavaLanguageVersion (javaExecCaseB)。但更大的问题是,这有什么区别?

我尝试了各种方法来设置javaExecCaseB的版本,但我最终出现了一个错误,如:

Could not set unknown property 'javaLauncher' for object of type org.gradle.process.internal.DefaultJavaExecAction_Decorated

我发现任务是gradle "JavaExec"的任务。第二种情况,javaexec是一个Project方法。

我开始寻找一种方法来运行Java程序,使用不同于gradle本身使用的JVM(在运行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"。除了硬编码路径,我还发现可以通过在javaexec{}块中添加以下代码来使用javaLauncher为我找到它:

javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(MyJvmVersion as int)
}
environment['JAVA_HOME'] = javaLauncher.get().metadata.installationPath.asFile.absolutePath

这个也应该调用自动下载JVM解析,但是我还没有测试过那部分。

最新更新