【发布时间】:2021-07-01 08:21:37
【问题描述】:
我正在尝试将现有的 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'
implementation 'com.j256.ormlite:ormlite-jdbc:5.0'
//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 mymodule.javafx {
requires javafx.controls;
requires javafx.fxml;
requires javafx.swing;
requires slf4j.api;
requires ormlite.jdbc;
// 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;
}
问题出在 gradle 依赖项中声明的库生成的未命名模块中。在这种特殊情况下使用slf4j。是的,每当我使用带有声明 module-info.java 的新库时,它都是可以解决的,但如果我使用没有 module-info.java 的旧库时,我会收到如下错误消息:
错误:找不到模块:slf4j.api/ormlite.jdbc/etc...
据我了解,问题出在所谓的自动/未命名模块中。
任何想法,如何解决依赖库生成的无名模块的这个问题?
更新
探索com.j256.ormlite:ormlite-jdbc:5.0的依赖
- 清单中不包含任何
Automatic-Module-Name - 确切的 jar 名称是:
ormlite-jdbc-5.0.jar - 双重检查 - 它在编译类路径中
- 确切的错误信息是:
module-info.java:7: error: module not found: ormlite.jdbc
requires ormlite.jdbc;
^
【问题讨论】:
标签: java gradle javafx module java-9