@opopsel_86x64

Как правильно сконфигурировать файл build.gradle для запуска javafx приложения?

Я пытаюсь создать исполняемое javafx приложение без использования javafx плагина.

plugins {
  id 'application'
}

repositories {
    mavenCentral()
flatDir{
    dirs 'C:/Users/insec/Desktop/javafx-sdk-17.0.1/lib'
  }
}

dependencies{
  implementation files ('javafx.base.jar')
  implementation files ('javafx.controls.jar')
}

application {
  mainModule = 'piglet.friend'
  mainClass = 'piglet.friend.Main'
}

ext.moduleName = 'piglet.friend'

String modulePath = 'C:\\Users\\insec\\Desktop\\javafx-sdk-17.0.1\\lib'

compileJava {
   sourceCompatibility = '17'
   targetCompatibility = '17'
   inputs.property("moduleName", moduleName)
   doFirst {
     options.compilerArgs = [
            '--module-path', modulePath,
            '--add-modules', 'javafx.controls'
     ]
     classpath = files()
   }
}

plugins.withType(JavaPlugin).configureEach {
  java {
    modularity.inferModulePath = true
  }
}
run {
/* inputs.property("moduleName", moduleName)*/
doFirst {
    jvmArgs = [
            '--module-path', modulePath,
            '--add-modules', 'javafx.controls'
              ]
        }
}

jar {
    manifest {
      attributes 'Main-Class': 'piglet.friend.Main'
    }
}


Я смог собрать jar файл, и смог его запустить указав при запуске путь до модулей javafx. (Рабочий код)
java -jar --module-path C:\Users\insec\Desktop\javafx-sdk-17.0.1\lib --add-modules javafx.controls piglet.jar


Но есть некоторые проблемы.
Я не могу запустить программу через задачу run в gradle. На выходе я получаю информацию о том, что модуль не найден.
Я попытался изучить какие команды выполняет задача run.

gradle run

C:\Program Files\Java\jdk-17.0.1\bin\java.exe --module-path C:\Users\insec\Desktop\javafx-sdk-17.0.1\lib --add-modules javafx.controls -Dfile.encoding=windows-1251 -Duser.country=RU -Duser.language=ru -Duser.variant --module-path C:\Users\insec\Desktop\piglet\build\libs\piglet.jar --module piglet.friend/piglet.friend.Main

Error occurred during initialization of boot layer
java.lang.module.FindException: Error reading module: C:\Users\insec\Desktop\piglet\build\libs\piglet.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Package piglet not found in module
:run (Thread[Execution worker for ':',5,main]) completed. Took 0.078 secs.


В целом она делает тоже самое, тот же путь до модулей, те же модули.

При разработки проекта в Intellij, она в целом не видит модули javafx (хотя gradle может собрать jar, а я могу его запустить из консоли).

Я попытался добавить javafx sdk как зависимость в Intellij. Структура проекта -> Библиотеки ->. Это работает. Но стоит мне обновить gradle через Intellij, она по какой-то причине удаляет эту зависимость и весь проект начинает светиться красным.

Так же при попытки подключения библиотеки из удаленного репозитория
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.9'

я больше не могу собрать jar файл с ошибкой "модуль не найден".

Мой файл module-info.java

module piglet.friend{
    requires javafx.controls;
    requires com.google.gson;
    
    opens piglet;
 }
  • Вопрос задан
  • 285 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы