IBM SBT SDK 1.1.0(Java)和Apache xerces

我正在将IC集成与IBM SBT SDK(Java)添加到仍使用xerces 2.4.0的现有项目中(截至2009年3月) .

使用IBM SBT SDK 1.0.x在这里没有引起任何问题,但是1.1.0的XML序列化实现完全依赖于org.w3c.xml.ls.DOMImplementationLS以及在将xerces移动到2004年的“xercesImpl”之后引入的这些东西 .

但是,该项目包含许多使用基于xerces和xml-apis的XML的代码,而且对于这些库的“更新”版本来说,移动速度太快会很危险 . 因此,我想“不要超过绝对要求” .

感谢maven没有人可以直接看到任何工件的哪个版本被加载,如果它没有在pom.xml中直接引用 . 因此我的问题:

IBM SBT SDK 1.1.0“真正”需要哪个版本的xercesImpl? 2.4.0是不够的,因为SBT SDK中使用的一些方法尚未在那里实现......

回答(1)

3 years ago

依赖项中的xerces版本为2.9.0;看看DOMUtil.java#loadDriver()类但是有一些解决办法可以避免SBTK完全使用xerces:

如果您的容器允许控制类路径树,则从工具箱中隐藏xerces库将使其默认为其他驱动程序 . 另外,您可以提供与旧xerces版本兼容的自己的XercesDriver类,并利用类加载器将其加载到我们的版本中 .

如果您在osgi容器中,您还可以确保主机应用程序清单声明对版本<= 2.4.0的依赖性并加载两个xerces版本,让容器为您修复依赖项

无论如何,回答这个问题,使用:

mvn dependency:list

我得到xerces版本2.9.0:

The following files have been resolved:
    com.ibm.sbt:com.ibm.commons:eclipse-plugin:9.0.0:provided
    p2.eclipse-plugin:javax.servlet:jar:3.0.0.v201112011016:system
    p2.eclipse-plugin:javax.xml:jar:1.3.4.v201005080400:system
    p2.eclipse-plugin:org.apache.xalan:jar:2.7.1.v201005080400:system
    p2.eclipse-plugin:org.apache.xerces:jar:2.9.0.v201101211617:system
    p2.eclipse-plugin:org.apache.xml.resolver:jar:1.2.0.v201005080400:system
    p2.eclipse-plugin:org.apache.xml.serializer:jar:2.7.1.v201005080400:system
    p2.eclipse-plugin:org.eclipse.core.contenttype:jar:3.4.200.v20120523-2004:system
    p2.eclipse-plugin:org.eclipse.core.jobs:jar:3.5.300.v20120912-155018:system
    p2.eclipse-plugin:org.eclipse.core.runtime:jar:3.8.0.v20120912-155025:system
    p2.eclipse-plugin:org.eclipse.equinox.app:jar:1.3.100.v20120522-1841:system
    p2.eclipse-plugin:org.eclipse.equinox.common:jar:3.6.100.v20120522-1841:system
    p2.eclipse-plugin:org.eclipse.equinox.preferences:jar:3.5.1.v20121031-182809:system
    p2.eclipse-plugin:org.eclipse.equinox.registry:jar:3.5.200.v20120522-1841:system
    p2.eclipse-plugin:org.eclipse.osgi:jar:3.8.2.v20130124-134944:system