我试图使用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:\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;
有谁有办法开始解决这个问题吗?
发布于 2022-10-12 08:55:05
这个问题似乎与导入为module-info.class
的旧javax.json
中包含的org.glassfish:javax.json:1.1.4
文件有关。库已被重新定位到jakarta
,而新的org.glassfish:jakarta.json:2.0.1
不再显示原来的问题。因此,解决方案是切换到较新的库。
https://stackoverflow.com/questions/74012442
复制相似问题