【问题标题】:Eclipse e4 Application - ContextFactory not found when included in a pluginEclipse e4 应用程序 - 包含在插件中时找不到 ContextFactory
【发布时间】:2020-03-31 10:53:54
【问题描述】:

我有一个纯 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"/>
...


产品清单.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 类?

【问题讨论】:

  • 导出的包仅对使用 Import-Package 的其他插件可用。
  • @greg-449 我的结构应该怎么做?

标签: java eclipse jaxb osgi


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2014-10-12
    • 1970-01-01
    相关资源
    最近更新 更多