java - Eclipse e4 应用程序 - 包含在插件中时未找到 ContextFactory

标签 java eclipse jaxb osgi

我有一个纯 e4 应用程序,希望它能在 Java 11 中工作。

我有一个插件,它提供了可供我们的产品使用的库。我已将最新的 JAXB 库添加到插件的 MANIFEST.MF.classpath 中。

插件 MANIFEST.MF

Bundle-ClassPath:
 ...
 jakarta.activation-api-1.2.1.jar,
 jakarta.xml.bind-api-2.3.2.jar,
 jaxb-osgi-2.3.2.jar,
 ...
Export-Package:
 ...
 com.sun.xml.bind,
 com.sun.xml.bind.v2,
 ...

插件.classpath

...
<classpathentry exported="true" kind="lib" path="jakarta.activation-api-1.2.1.jar"/>
<classpathentry exported="true" kind="lib" path="jakarta.xml.bind-api-2.3.2.jar"/>
<classpathentry exported="true" kind="lib" path="jaxb-osgi-2.3.2.jar"/>
...


产品 MANIFEST.MF

Bundle-ClassPath:
 ...
 NameOfPlugin;bundle-version="1.0.0",
 ...
Import-Package: 
 ...
 com.sun.xml.bind.v2,
 ...

产品.classpath

...
<classpathentry exported="true" kind="lib" path="jakarta.activation-api-1.2.1.jar"/>
<classpathentry exported="true" kind="lib" path="jakarta.xml.bind-api-2.3.2.jar"/>
<classpathentry exported="true" kind="lib" path="jaxb-osgi-2.3.2.jar"/>
...


运行配置

我已经更新了应用程序的 JVM 选项。

-Djavax.xml.bind.JAXBContextFactory=com.sun.xml.bind.v2.ContextFactory


异常

java.util.concurrent.ExecutionException: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory]
    at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:552)
    at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:513)
    at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:90)
    at com.google.common.util.concurrent.Uninterruptibles.getUninterruptibly(Uninterruptibles.java:199)
    at com.google.common.cache.LocalCache$Segment.getAndRecordStats(LocalCache.java:2312)
    at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
    at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2154)
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2044)
    at com.google.common.cache.LocalCache.get(LocalCache.java:3952)
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4958)
    at com.ci.data.reports.ReportFileManager.getAllQueryFromFile(ReportFileManager.java:81)
    at com.ci.data.reports.ReportFileManager.lambda$getAllQueryFromFiles$11(ReportFileManager.java:321)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:952)
    at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:926)
    at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:327)
    at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)


为什么找不到ContextFactory类?

最佳答案

从您列出的 JAR 中,我认为您只包含了 JAXB API,但没有包含 JAXB 实现

请记住,Java 11 完全删除了 JAXB,从而破坏了向后兼容性。您需要检查类路径上的任何 JAR 是否实际上包含类 com.sun.xml.bind.v2.ContextFactory

您可能需要类似 org.glassfish.jaxb:jaxb-runtime 的东西 jar 。

关于java - Eclipse e4 应用程序 - 包含在插件中时未找到 ContextFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59213260/

相关文章:

javascript - 除非我们重新部署 war 文件,否则 Js 更改不会反射(reflect)在浏览器中

java - Webview 后退按钮导致错误

java - JaxB 性能增强

java - 在 JAXB 2.0 中扩展 JAXB 生成的对象

java - NamingContext 无法转换为数据源?

java - 找到所有集合的组合 - 设置封面?

java - hibernate 问题 "session is closed"

java - 从文件夹中排除 cpp 而不删除

eclipse - 在解决构建路径错误之前,无法构建项目。

java - Android 中 JAXB 的标准等效项