1

好的,所以我有一个使用 XMLBeans 3.0 的主应用程序。我正在尝试使用 Java10 和 Jlink 创建一个自包含的 JVM。所以我使用 scomp 命令根据一些 XSD 文件生成我的 Java 类,我将这个 JAR 命名为 custom.jar。我打开 custom.jar 并注意到 scomp 将 .xsb 文件放在这个包下:

 schemaorg_apache_xmlbeans.system.s2CA052CB375796887D9B5CB20D4C89AC

现在我的 JLink 项目也依赖于 xbean.jar。而且这个JAR似乎也有一个类似于custom.jar的包:

schemaorg_apache_xmlbeans.system

所以我编译主项目并使用 JLink 创建一个 JVM 运行时映像。然后我就可以提出我的申请了。
问题是在运行时我的应用程序引用了我的 custom.jar 中的一个类,我得到了一个丢失的文件错误。查看堆栈跟踪,似乎类加载器正试图在 xbean.jar 下找到我的自定义 .xsb 文件,但该 JAR 上当然不存在它。

我不太熟悉类加载的工作原理,尤其是现在在 Java10/模块中,但有人知道解决这个问题的方法吗?

这些是相关包路径的 module-info xbean.jar 的导出:

exports schemaorg_apache_xmlbeans.system.sXMLCONFIG;
exports schemaorg_apache_xmlbeans.system.sXMLLANG;
exports schemaorg_apache_xmlbeans.system.sXMLSCHEMA;
exports schemaorg_apache_xmlbeans.system.sXMLTOOLS;

这些是我的 custom.jar 的类似包路径的导出:

exports schemaorg_apache_xmlbeans.system.s2CA052CB375796887D9B5CB20D4C89AC;

下面是堆栈跟踪,但查看 xbean.jar 源代码,这是找不到 .xsb 文件的行:

SchemaTypeSystemImpl.this._resourceLoader.getResourceAsStream(resourcename);

可能是对任何模块信息文件的修改,或者如何告诉 scomp 更改默认的 schemaorg_apache_xmlbeans.system 包?

预先感谢。

        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.RuntimeException: Could not instantiate SchemaTypeSystemImpl (java.lang.reflect.InvocationTargetException): is the version of xbean.jar correct?
        at custom/schemaorg_apache_xmlbeans.system.sD4E93FD3AF9AB0042ABA3EB739A1C5B8.TypeSystemHolder.loadTypeSystem(Unknown Source)
        at custom/schemaorg_apache_xmlbeans.system.sD4E93FD3AF9AB0042ABA3EB739A1C5B8.TypeSystemHolder.<clinit>(Unknown Source)
        ... 48 more
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
        ... 50 more
Caused by: org.apache.xmlbeans.SchemaTypeLoaderException: XML-BEANS compiled schema: Could not locate compiled schema resource schemaorg_apache_xmlbeans/system/sD4E93FD3AF9AB0042ABA3EB739A1C5B8/index.xsb (schemaorg_apache_xmlbeans.system.sD4E93FD3AF9AB0042ABA3EB739A1C5B8.index) - code 0
        at xbean/org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl$XsbReader.<init>(SchemaTypeSystemImpl.java:1519)
        at xbean/org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl.initFromHeader(SchemaTypeSystemImpl.java:273)
        at xbean/org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl.<init>(SchemaTypeSystemImpl.java:185)
        ... 54 more
4

0 回答 0