我正在尝试使用Gradle运行一个模块化JavaFX应用程序,该应用程序几乎没有其他模块化和非模块化依赖关系,但我一直在解决依赖关系。该项目在Eclipse中,使用OpenJDK 14-。我已经能够使用org.beryx.runtime插件运行、构建和打包与非模块化相同的应用程序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。后者无法作为模块找到。
这是经过修改的模块-info.java
module hellofx {
requires javafx.controls;
requires org.apache.logging.log4j;
requires javax.json;
requires org.glassfish;
exports org.openjfx;
}
和build.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:Usersxxxbadass-jlink-example-log4j2-javafx-mastersrcmainjavamodule-info.java:5: error: module not found: javax.json
requires javax.json;
^
C:Usersxxxbadass-jlink-example-log4j2-javafx-mastersrcmainjavamodule-info.java:6: error: module not found: org.glassfish
requires org.glassfish;
有人暗示要开始解决这个问题吗?
问题似乎与作为org.glassfish:javax.json:1.1.4
导入的旧javax.json
中包含的module-info.class
文件有关。该库已重新定位到jakarta
,新的org.glassfish:jakarta.json:2.0.1
不再显示原始问题。因此,解决方案是切换到较新的库。