Я пытаюсь создать исполняемое 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;
}