所以我最近接受了一份 Java 作業,需要一個專案來提高我的 Java 技能(已經有幾年了)。我開始撰寫一個 JavaFX 應用程式——本質上是一些游戲模組工具——并使用 JLink / 插件來確保我可以構建一個獨立的可執行檔案。這一切都很順利,我開始開發我的應用程式。我現在嘗試為朋友構建一個可執行檔案來幫助測驗,當我將應用程式作為可執行檔案或從打包的 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)
我的模塊資訊.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-link、j-modules 等。任何診斷此問題的幫助將不勝感激!
uj5u.com熱心網友回復:
所以我設法在多一點時間后解決了我的問題......典型!
如果其他人發生這種情況,那確實是由于缺少傳遞依賴。查看我的專案的依賴項(使用 VS Code):

看著我發現module-info: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://www.uj5u.com/gongcheng/513500.html
