Ошибка портирования приложения JavaFX под модули Java >= 9
Переписываю рабочее JavaFX приложение под Java 9 (с модульными плюшками)
Есть build.gradle примерно такого сорта:
plugins {
id 'application'
id 'java'
id 'org.openjfx.javafxplugin' version '0.0.9'
}
repositories {
mavenLocal()
maven {
url = uri('https://repo.maven.apache.org/maven2/')
}
flatDir {
dirs 'libs'
}
}
group = 'ru.mydomain.myapp.fx'
version = '0.7'
description = 'myAppFX'
java.sourceCompatibility = JavaVersion.VERSION_1_9
java {
modularity.inferModulePath = true
}
sourceSets {
main {
java {
srcDirs("src/common/java", "src/fx/java")
}
resources {
srcDirs = ['src/fx/resources']
}
}
}
dependencies {
implementation 'org.slf4j:slf4j-api:1.7.25'
//blah-blah
}
javafx {
version = "15.0.1"
modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.swing']
}
application {
mainModule = 'mymodule.javafx'
mainClass = 'ru.mydomain.myapp.fx.Main'
}
Есть module-info.java, который как и положено лежит в корне исходников
module mymodule.javafx {
requires javafx.controls;
requires javafx.fxml;
requires javafx.swing;
requires slf4j.api;
// Export the package (needed by JavaFX to start the Application)
// Replace "exports" with "opens" if "@FXML" is used in this module
opens ru.mydomain.myapp.fx;
}
При компиляции получаю ошибку:
error: module not found: slf4j.api
requires slf4j.api;
^`
Гугление ошибки приводит к тому, что зависимость slf4j помещается в модуль noname, который не виден во время компиляции.
Как быть? Какие идеи?
P.S. В версиях старше 1.8 slf4j декларирует модуль org.slf4j, по ряду причин я могу использовать только версию 1.7, где slf4j не декларирует module-info - проблема как раз в том, что библиотека попадает в непоименованный (автоматический) модуль - просто не соображу как быть в таком случае.