В 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
1 ответ
Я обнаружил, что задача - это задача gradle "JavaExec". И второй случай, javaexec - это метод проекта.
Я начал этот квест, чтобы найти способ запуска Java-программ с использованием JVM, отличной от используемой самой gradle (устанавливается из переменной среды или командной строки при запуске 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 с автоматической загрузкой, но я не тестировал эту часть.