【问题标题】:How to handle conflicting dependencies in Java (EE)如何处理 Java (EE) 中的冲突依赖项
【发布时间】:2012-08-24 12:47:47
【问题描述】:

我正在 Java EE 6 平台上开发企业应用程序。 IDE 为 NetBeans 7.2,应用服务器为 GlassFish 3.1.2.2。

业务逻辑必须使用一个库(具体来说是 HBase-RDF)来处理其核心中的一些任务。原始的 HBase-RDF 代码依赖于许多包,我相信 Glassfish 已经使用了它们的新版本。例如,我可以看到 jar 文件中已经包含 javax.xml、javax.activation、com.sun.jersey 和类似的包。

虽然我过去曾开发过不那么平凡的 Java EE 应用程序,但我在开发可能与此相关或不相关的应用程序时遇到了无数头疼的问题。根据我在网上阅读的内容,包括数十个 stackoverflow 问题和错误跟踪系统,我想如果我可以将原始库 (HBase-RDF) 及其所有依赖项打包为整个 jar 文件,并防止它们直接包含在项目中。

我的第一个问题是,我对问题的原因是否正确?这可能是我问题的根源吗?我想答案是肯定的,因为我已经通过从类路径中删除 JAXB 和 Xerces jar 解决了我的一个问题,幸运的是,我必须使用的 Hbase-RDF 的那些部分并没有涉及到它们。

第二个问题是,如果我对上一个问题的看法是正确的,我该怎么做?如何将这些库限制为仅由一个库 (Hbase-RDF) 使用?


注意:说构建过程完成没有任何问题可能很有用,但我在部署和运行项目时面临两个主要问题。首先,应用程序成功部署在我的本地 Glassfish 实例上,该实例与 netbeans 一起安装,但相同的 .ear 包无法部署在另一个相同版本的实例上,并且 server.log 文件不包含任何有助于查找问题原因的内容.该错误与this 非常相似,但建议的解决方案不起作用。第二个问题与this 非常相似,我再次尝试了每一个建议的解决方案,但都没有运气。有趣的是,web模块内部的web服务调用EJB成功,但是JSF facelet index.html运行失败。

【问题讨论】:

  • 你使用Maven、Ivy、Gradle之类的吗?
  • 原始库代码带有 pom.xml。因为我不使用 maven ,所以我只是将库打包在一个 jar 文件中,并将它与它的依赖项一起包含在我的项目中。这可能是一个错误,我很高兴听到正确的做法。
  • 这是为您制作这些东西的 Maven。它基本上比较依赖项的版本,如果允许只选择一个或显示冲突存在的位置。请从库中发布 pom.xml,我们会看到。

标签: java jakarta-ee netbeans glassfish dependencies


【解决方案1】:

我不确定您关心的是构建过程还是部署。
因为对于部署,如果您有一个依赖于您已经部署的库的不同版本的库,如果不求助于OSGi(不能使用相同的类加载器的两个版本的库),这是不可能工作的。
您是否尝试过完全删除依赖库并仅使用较新的版本。
如果您唯一的依赖项是 JAXB 和 java 的 xml 包,那么您可能会很幸运

【讨论】:

  • 我已经试过了。库内的代码会中断。这似乎是一个向后不兼容的问题,或者尽管我努力确定自己在做什么,但我可能已经删除了一些新库中不存在的东西。甚至像 javax.servlet 这样的包也被包含为依赖项......
  • 您是否尝试仅删除常用库?
  • 我在发布问题之前尝试了这个,因为这是我能想到的最后一件事。库代码中断。
猜你喜欢
  • 2020-01-28
  • 2016-08-21
  • 2023-01-26
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多