Плагин org.openjfx.javafxplugin
управляет для вас несколькими вещами.
Когда вы добавляете в свой файл сборки:
javafx {
modules = [ 'javafx.controls' ]
}
, плагин переводит в нечто вроде:
run {
doFirst {
jvmArgs = ['--module-path', classpath.asPath,
'--add-modules', 'javafx.controls']
}
}
Однако, если выСоздайте новую задачу JavaExec
, похоже, что плагин не обрабатывает ее.
Учитывая опубликованную вами ошибку:
Ошибка: отсутствуют компоненты времени выполнения JavaFX
ясно, что возможное исправление состоит в том, чтобы делать именно то, что делает плагин, и добавлять ожидаемые аргументы jvm при использовании модульных зависимостей.
Так что это должно работать:
task runExercise1(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
jvmArgs = ['--module-path', classpath.asPath,
'--add-modules', 'javafx.controls' ]
main = 'exercise1.Cards'
}
В качестве альтернативы вы можете создать класс запуска, который не расширяется от Application
, так как он пропустит модульную проверку (как объяснено здесь ).
public class Launcher {
public static void main(String[] args) {
// optionally process args to select class to run
Cards.main(args);
}
}
Тогда вы могли быдобавьте свою задачу и даже используйте аргументы времени выполнения, чтобы выбрать основной класс для запуска из модуля запуска.
task runExercise1(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'exercise1.Launcher'
args 'exercise1' // <-- optionally select class to run
}