我正在尝试使用Gradle运行一个模块化JavaFX应用程序,几乎没有其他模块化和非模块化依赖项,但我遇到了依赖项解析问题。该项目位于Eclipse中,使用OpenJDK 14-。我已经能够使用org.beryx.runtime pluging https://badass-runtime-plugin.beryx.org/releases/latest/运行、构建和打包与非模块化应用程序相同的应用程序,但我希望更进一步,使其模块化。所以现在我使用Badass JLink插件https://badass-jlink-plugin.beryx.org
为了一步一步地进行,我下载并测试了这个示例:https://github.com/beryx-gist/badass-jlink-example-log4j2-javafx,它与我的项目类似,我成功地运行了它。无论如何,Eclipse标记了许多由于未解析的导入而导致的错误,我希望了解如何删除这些错误,但实际上项目编译并运行了。下一步是修改这个工作示例,添加我的真实的项目所需的依赖项,主要是javax.json和jOpenDocument,后者作为一个模块是找不到的。
下面是修改后的module-info.java
module hellofx {
requires javafx.controls;
requires org.apache.logging.log4j;
requires javax.json;
requires org.glassfish;
exports org.openjfx;
}
和构建。gradle
plugins {
id 'application'
id 'org.javamodularity.moduleplugin' version '1.8.9'
id 'org.openjfx.javafxplugin' version '0.0.10'
id "org.beryx.jlink" version "2.24.1"
}
repositories {
mavenCentral()
}
sourceCompatibility = "11"
targetCompatibility = "11"
dependencies {
implementation 'org.apache.logging.log4j:log4j-core:2.11.1'
implementation 'javax.json:javax.json-api:1.1.4'
implementation 'org.glassfish:javax.json:1.1.4'
implementation 'org.jopendocument:jOpenDocument:1.3'
}
javafx {
version = 16
modules = ['javafx.controls']
}
application {
mainClass = "org.openjfx.HelloFX"
mainModule = "hellofx"
}
compileJava任务失败,并出现以下错误:
C:\Users\xxx\badass-jlink-example-log4j2-javafx-master\src\main\java\module-info.java:5: error: module not found: javax.json
requires javax.json;
^
C:\Users\xxx\badass-jlink-example-log4j2-javafx-master\src\main\java\module-info.java:6: error: module not found: org.glassfish
requires org.glassfish;
有没有人能给我们一个开始解决这个问题的提示?
1条答案
按热度按时间qncylg1j1#
问题似乎与
module-info.class
文件有关,该文件包含在导入为org.glassfish:javax.json:1.1.4
的旧javax.json
中。该库已被重新定位到jakarta
,新的org.glassfish:jakarta.json:2.0.1
不再显示原始问题。因此解决方案是切换到新的库。