因此,我最近得到了一份Java工作,需要一个项目来提高我的Java技能(几年前)。我开始编写一个JavaFX应用程序--本质上是一些游戏模式工具--并使用JLink / plugin来确保我能够构建一个独立的可执行文件。一切进展顺利,我开始开发我的应用程序。现在,我已经尝试为朋友构建一个可执行文件来帮助测试,当我以可执行文件的形式或从打包的jar文件中运行该应用程序时,我遇到了一个依赖问题:
Exception in thread "JavaFX Application Thread" javax.xml.stream.FactoryConfigurationError: Provider for javax.xml.stream.XMLInputFactory cannot be found
at java.xml/javax.xml.stream.FactoryFinder.find(Unknown Source)
at java.xml/javax.xml.stream.XMLInputFactory.newFactory(Unknown Source)
at com.fasterxml.jackson.dataformat.xml@2.13.4/com.fasterxml.jackson.dataformat.xml.XmlFactory.<init>(Unknown Source)
at com.fasterxml.jackson.dataformat.xml@2.13.4/com.fasterxml.jackson.dataformat.xml.XmlFactory.<init>(Unknown Source)
at com.fasterxml.jackson.dataformat.xml@2.13.4/com.fasterxml.jackson.dataformat.xml.XmlFactory.<init>(Unknown Source)
at com.fasterxml.jackson.dataformat.xml@2.13.4/com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(Unknown Source)
at expmanager/expmanager.data.FileManager.<init>(Unknown Source)
at expmanager/expmanager.project.Project.<init>(Unknown Source)
at expmanager/expmanager.controller.SelectorController.handleLoadClick(Unknown Source)我的模块-info.java:
module expmanager {
requires javafx.controls;
requires javafx.fxml;
requires com.fasterxml.jackson.core;
requires com.fasterxml.jackson.dataformat.xml;
requires com.fasterxml.jackson.databind;
requires transitive javafx.graphics;
opens expmanager.controller to javafx.fxml;
opens expmanager.controller.listItem to javafx.fxml;
opens expmanager.controller.tab to javafx.fxml;
opens expmanager.controller.component to javafx.fxml;
opens expmanager.data.itemtypes to com.fasterxml.jackson.databind;
opens expmanager.data.core to com.fasterxml.jackson.databind;
opens expmanager.data.expansion to com.fasterxml.jackson.databind;
opens expmanager.project.expansion to javafx.base;
opens expmanager.project.mission to javafx.base;
exports expmanager;
exports expmanager.data.core;
exports expmanager.data.itemtypes;
exports expmanager.data.expansion;
exports expmanager.project;
exports expmanager.project.expansion;
exports expmanager.project.mission;
}和build.gradle:
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.10'
id 'org.beryx.jlink' version '2.25.0'
id "com.diffplug.spotless" version "6.11.0"
}
spotless {
ratchetFrom 'main'
java {
eclipse().configFile('formatter.xml')
}
}
repositories {
mavenCentral()
}
javafx {
version = "19"
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
application {
mainClass = "expmanager.SelectorApp"
mainModule = "expmanager"
}
jlink {
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
mergedModule {
requires 'java.xml'
}
launcher {
name = 'expmanager'
}
jpackage {
imageOptions = ['--win-console']
skipInstaller = 'true'
}
}
dependencies {
implementation 'com.fasterxml.jackson.core:jackson-core:2.13.4'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.4'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.13.4'
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4'
}当我run时,这个应用程序运行得很好。基于一些谷歌搜索,我尝试将java.xml作为一个mergedModule,但这没有任何效果。试图对缺少的库执行同样的操作会引发错误,尝试将其作为依赖项添加到gradle中也会引发错误。
这是我第一次使用j-链接,j-模块等任何帮助诊断这将不胜感激!
发布于 2022-10-08 15:47:03
所以过了一段时间我设法解决了我的问题.典型的!
如果有其他人在这种情况下发生,那确实是由于缺少了一个传递依赖。查看我的项目的依赖性(使用VS代码):

看看module-info for woodstox-core,我发现:
module-info module com.ctc.wstx {
...
provides javax.xml.stream.XMLEventFactory with com.ctc.wstx.stax.WstxEventFactory;
provides javax.xml.stream.XMLInputFactory with com.ctc.wstx.stax.WstxInputFactory;
provides javax.xml.stream.XMLOutputFactory with com.ctc.wstx.stax.WstxOutputFactory;
...
}因此,我将这个问题添加到模块的module-info中,从而解决了这个问题。
module expmanager {
...
requires transitive com.ctc.wstx;
...
}https://stackoverflow.com/questions/73997099
复制相似问题