相关疑难解决方法(0)

在Java/Maven中处理"Xerces hell"?

在我的办公室里,仅仅提到Xerces这个词就足以煽动开发者的凶悍愤怒.粗略地看一眼其他Xerces关于SO的问题似乎表明,几乎所有Maven用户都会在某个时候"触及"这个问题.不幸的是,理解这个问题需要对Xerces的历史有一点了解......

历史

  • Xerces是Java生态系统中使用最广泛的XML解析器.几乎每个用Java编写的库或框架都以某种身份使用Xerces(传递,如果不是直接的话).

  • 包含在官方二进制文件中的Xerces罐子直到今天还没有版本化.例如,Xerces 2.11.0实现jar是命名的xercesImpl.jar而不是xercesImpl-2.11.0.jar.

  • Xerces团队不使用Maven,这意味着他们不会将正式版本上传到Maven Central.

  • Xerces曾经作为单个jar(xerces.jar)发布,但被分成两个jar,一个包含API(xml-apis.jar),另一个包含这些API的实现(xercesImpl.jar).许多较旧的Maven POM仍然声明依赖xerces.jar.在过去的某个时刻,Xerces也被释放xmlParserAPIs.jar,一些较老的POM也依赖于它.

  • 分配给xml-apis和xercesImpl的版本由那些将其jar部署到Maven存储库的人通常是不同的.例如,xml-apis可能是1.3.03版本,而xercesImpl可能是2.8.0版本,即使两者都来自Xerces 2.8.0.这是因为人们经常使用它实现的规范版本来标记xml-apis jar.还有就是这是一个非常不错的,但不完全击穿这里.

  • 更复杂的是,Xerces是包含在JRE中的Java API for XML Processing(JAXP)的参考实现中使用的XML解析器.实现类在com.sun.*命名空间下重新打包,这使得直接访问它们很危险,因为它们可能在某些JRE中不可用.但是,并非所有Xerces功能都通过API java.*javax.*API 公开; 例如,没有API公开Xerces序列化.

  • 几乎所有的servlet容器(JBoss,Jetty,Glassfish,Tomcat等)都会在一个或多个/lib文件夹中附带Xerces .

问题

解决冲突

对于上述某些原因(或许是全部原因),许多组织在其POM中发布和使用Xerces的自定义构建.如果你有一个小应用程序并且只使用Maven Central,这不是一个真正的问题,但它很快成为企业软件的问题,其中Artifactory或Nexus代理多个存储库(JBoss,Hibernate等):

由Artifactory代理的xml-apis

例如,组织A可能发布xml-apis为:

<groupId>org.apache.xerces</groupId>
<artifactId>xml-apis</artifactId>
<version>2.9.1</version>
Run Code Online (Sandbox Code Playgroud)

同时,组织B可能会发布jar如下:

<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.3.04</version>
Run Code Online (Sandbox Code Playgroud)

虽然B的jar版本低于A版jar,但Maven并不知道它们是同一个版本,因为它们有不同 groupId的版本.因此,它无法执行冲突解决,并且两个 jars都将作为已解析的依赖项包含在内:

使用多个xml-apis解决了依赖关系

Classloader Hell …

java xerces classloader dependency-management maven

703
推荐指数
8
解决办法
12万
查看次数

java.lang.AbstractMethodError:org.apache.xerces.jaxp.DocumentBuilderFactoryImpl不继承抽象javax.xml.parsers.DocumentBuilderFactory

一般的:

迁移 JSF-Web-Projekt(Java 和 Tomcat)时的 OmniFaces / Xercex / 命名冲突

简介
我们在过去几年开始构建和企业 JSF 应用程序(Eclipse、Maven、CDI (Open-Web-Beans)、Omni-Faces、PrimeFaces...)。
现在我们想从 java 1.8 和 tomcat 7 迁移到更新的版本。

问题
我们尝试在 tomcat 9 和 openjdk 14 上运行我们的应用程序,但没有成功,因此我们尝试将所有依赖项升级到兼容版本。
现在我们被困在启动 tomcat (在 eclipse 2020-03 中),但出现以下异常 - 不知道从哪里继续。

添加的文件
我添加了 pom 文件,以及异常后的依赖项和版本。如果您需要任何其他信息或更多详细信息,请随时询问。我正在寻找任何人可以为我指出我们使用错误的哪个版本的正确方向。

例外:

INFO: OpenSSL successfully initialized [OpenSSL 1.1.1g  21 Apr 2020]
Juni 09, 2020 4:12:29 PM org.apache.coyote.AbstractProtocol init
INFO: Initialisiere ProtocolHandler["http-nio-8080"]
Juni 09, 2020 4:12:30 PM org.apache.catalina.startup.Catalina load
INFO: Server initialization in [1.952] milliseconds
Juni 09, 2020 4:12:30 PM …
Run Code Online (Sandbox Code Playgroud)

java migration jsf tomcat omnifaces

4
推荐指数
1
解决办法
9242
查看次数