Eclipse 4.12-java.lang.ClassNotFoundException:com.sun.xml.internal.bind.v2.ContextFactory

Eclipse 4.12-java.lang.ClassNotFoundException:com.sun.xml.internal.bind.v2.ContextFactory,eclipse,eclipse-plugin,eclipse-rcp,java-11,Eclipse,Eclipse Plugin,Eclipse Rcp,Java 11,我在运行eclipse插件时遇到以下错误。 Eclipse将4.12与java11一起使用。它过去在Eclipse4.6.3+java8中运行良好 javax.xml.bind.JAXBException: Provider com.sun.xml.internal.bind.v2.ContextFactory not found - with linked exception: [java.lang.ClassNotFoundException: com.sun.xml.internal.b

我在运行eclipse插件时遇到以下错误。 Eclipse将4.12与java11一起使用。它过去在Eclipse4.6.3+java8中运行良好

javax.xml.bind.JAXBException: Provider com.sun.xml.internal.bind.v2.ContextFactory not found
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory cannot be found by com.my.cep.studio.cluster.topology_0.0.0]

!ENTRY com.my.cep.diagramming 4 0   at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:146)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:289)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:412)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:375)
    at com.my.cep.studio.cluster.topology.editors.ClusterTopologyDiagramManager.parseFile(ClusterTopologyDiagramManager.java:193)
    at com.my.cep.studio.cluster.topology.editors.ClusterTopologyDiagramManager.openModel(ClusterTopologyDiagramManager.java:175)
    at com.my.cep.diagramming.drawing.BaseDiagramManager.createDrawingCanvas(BaseDiagramManager.java:233)
    at com.my.cep.diagramming.drawing.DiagramManager$2.run(DiagramManager.java:259)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    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.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory cannot be found by com.my.cep.studio.cluster.topology_0.0.0
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:512)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:423)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:415)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:155)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:480)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:112)

是的,您正在使用javax中存在于java8中但在java11中被删除的特性

看到这个答案了吗

在将a迁移到Java 11时,我偶然发现了这个问题。我认为以下内容可能会有用

我的Maven POMs、javax绑定、JAXB实现以及一些测试都准备就绪。然而,原始应用程序的测试一直莫名其妙地抱怨没有找到
com.sun.xml.internal.bind.v2.ContextFactory

实际上,JAXB的任何第三方实现中都没有这个类(我使用的是Glassfish的一个,但还有其他几个),必须用一些新的实现替换
javax.xml.bind.JAXBContext.newInstance()
中实例化的默认工厂(
com.sun.xml.bind.v2.JAXBContextFactory
在我的例子中,我想在其他JAXB库中也是如此)

其中一种设置方法是通过
jaxb.properties
文件,该文件必须对类路径可见(因此,在Maven中,它通常类似于
src/main/resources/*

javax.xml.bind.context.factory=com.sun.xml.bind.v2.JAXBContextFactory

在我的例子中,它包含了旧的现已消失的工厂。我想,如果当前的JAXB库不符合该文件,它们将使用正确的默认工厂,但是它可能已经存在于您的代码库中,您可能需要一段时间才能实现它。我希望这个答案将为您节省我浪费的时间。

Sun人员已经删除了它在Java11中直接访问jaxb包。
如果您面临hibernate
NullPointerException
问题,这些依赖项将起作用

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0.1</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.25.0-GA</version>
</dependency>

com.sun.xml.bind
jaxb内核
2.3.0.1
javax.xml.bind
jaxb api
2.3.1
com.sun.xml.bind
jaxb impl
2.3.1
org.javassist
javassist
3.25.0-GA
当我尝试使用Intellij时,这些LIB对我很有用(灵感来源于上面Vivek的回答)

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.moxy',version: '2.7.3'
    compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
    compile 'com.sun.xml.bind:jaxb-core:2.3.0.1'
    compile 'com.sun.xml.bind:jaxb-impl:2.3.1'
    compile 'org.javassist:javassist:3.25.0-GA'
}

我也遇到了同样的问题。jakarta.xml.bind实现将希望使用com.sun.xml.bind.v2.ContextFactory而不是com.sun.xml.internal.bind.v2.ContextFactory,它可以在com.sun.xml.bind中使用。因此,combo对我来说是有效的。

build.gradle中有两行代码对我有用

compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
compile group: 'org.glassfish.jaxb', name: 'jaxb-runtime', version: '2.3.1'

您已经安装到Eclipse(
com.my.cep.studio
?)中的插件使用JAXB,JAXB包含在Java 8中,但不包含在Java 11中。应该可以解决您的问题(您仍然可以在Eclipse中为您的项目使用Java 11)。@howler com.my.cep.studio是我的自定义编写插件。Eclipse内部插件出现异常“javax.xml.bind_2.2.0.v201105210648.jar”。这与jaxb jar相同,内部代码相同。在返回newInstance(contextPath、contextPathClasses、平台默认\工厂\类、类加载器、属性)的第行中,类ContextFinder find方法出现异常.PLATFORM\u DEFAULT\u FACTORY\u类指向com.sun.xml.internal.bind.v2.ContextFactoryEclipse平台不需要或不包含JAXB插件(只有一些Eclipse IDE包包含
javax.xml.bind
插件)。您的依赖项中可能缺少插件/捆绑包。显示如何包含
javax.xml.bind.ContextFinder
,并找出缺少的插件包含
com.sun.xml.internal.bind.v2.ContextFactory
。您只需阅读此答案,我理解这一点,但这与我的情况不同。请参阅上面的注释。有关Intellij,我包括了与此相同的内容:OP在EclipseIDE的上下文中清楚地被问到