首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JLink XML依赖问题

JLink XML依赖问题
EN

Stack Overflow用户
提问于 2022-10-08 12:46:47
回答 1查看 41关注 0票数 1

因此,我最近得到了一份Java工作,需要一个项目来提高我的Java技能(几年前)。我开始编写一个JavaFX应用程序--本质上是一些游戏模式工具--并使用JLink / plugin来确保我能够构建一个独立的可执行文件。一切进展顺利,我开始开发我的应用程序。现在,我已经尝试为朋友构建一个可执行文件来帮助测试,当我以可执行文件的形式或从打包的jar文件中运行该应用程序时,我遇到了一个依赖问题:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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-模块等任何帮助诊断这将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-08 15:47:03

所以过了一段时间我设法解决了我的问题.典型的!

如果有其他人在这种情况下发生,那确实是由于缺少了一个传递依赖。查看我的项目的依赖性(使用VS代码):

看看module-info for woodstox-core,我发现:

代码语言:javascript
复制
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中,从而解决了这个问题。

代码语言:javascript
复制
module expmanager {
    ...
    requires transitive com.ctc.wstx;
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73997099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档