【发布时间】: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 我的结构应该怎么做?