JAXBContextFactory 地狱 - java.lang.ClassNotFoundException:com.ibm.xml.xlxp2.jaxb.JAXBContextFactory

Dav*_*ard 3 java xml jaxb

我在我的开发环境中不断收到以下错误。我用

  • 火星日食 4.5.1
  • Oracle JDK 1.7(内部版本 1.7.0_79-b15)或 1.8(内部版本 1.8.0_65-b17)
  • Apache Ant 运行代码以及 Eclipse 运行代码
  • Ivy 用于依赖管理,其中我包括以下内容

    <!-- 3rd party dependencies -->
    <dependency org="log4j" name="log4j" rev="1.2.16" conf="test->default"/>
    <dependency org="commons-httpclient" name="commons-httpclient" rev="3.1" conf="compile->default"/>
    <dependency org="org.jvnet.jaxb2_commons" name="jaxb2-basics-runtime" rev="0.6.4" conf="default->runtime"/>
    <dependency org="org.jvnet.jaxb2_commons" name="jaxb2-basics-tools" rev="0.6.4" conf="default->runtime"/>
    <dependency org="org.jvnet.jaxb2_commons" name="jaxb2-basics" rev="0.6.4" conf="default->runtime"/>
    
    Run Code Online (Sandbox Code Playgroud)

我看过有关此主题的其他帖子,但他们的答案没有多大帮助。我尝试使用 jaxb.properties 但这并没有改变行为。

javax.xml.bind.context.factory=com.sun.tools.xjc.runtime.JAXBContextFactory


Exception in thread "main" javax.xml.bind.JAXBException
 - with linked exception:
[java.lang.ClassNotFoundException: com.ibm.xml.xlxp2.jaxb.JAXBContextFactory]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:227)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:432)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:637)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
    at com.acme.merge.util.ProjectsInformation.unMarshal(ProjectsInformation.java:24)
    at com.acme.merge.controller.MergeController.main(MergeController.java:44)
Caused by: java.lang.ClassNotFoundException: com.ibm.xml.xlxp2.jaxb.JAXBContextFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:563)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:225)
    ... 5 more
Run Code Online (Sandbox Code Playgroud)

我在忽略什么?

Dav*_*ard 5

我找到了根本原因。我在 ivy 中的一些依赖项具有传递依赖项,这些依赖项引入了一些 IBM WS 库。这些库会覆盖我的设置并强制使用com.ibm.xml.xlxp2.jaxb.JAXBContextFactory. 排除这些解决了我的问题。

冲突的 jar 来自包com.ibm.ws,名为runtime.jar.