当前位置: 首页 > 知识库问答 >
问题:

如何处理Java(EE)中的冲突依赖关系

明松
2023-03-14

我正在Java EE6平台上开发一个企业应用程序。IDE是NetBeans 7.2,应用服务器是GlassFish 3.1.2.2。

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

尽管我以前开发过不那么简单的Java EE应用程序,但我在开发应用程序时遇到了无数的头疼问题,这些问题可能与此相关,也可能与此无关。根据我在web上读到的内容,包括几十个stackoverflow问题和bug跟踪系统,我想如果我能够将原始库(HBase-RDF)及其所有依赖项打包为一个完整的jar文件,并防止它们直接包含在项目中,那么我可能就能够摆脱一些令人头疼的问题。

我的第一个问题是,我所说的问题产生的原因是对的吗?这会是我问题的根源吗?我想答案是肯定的,因为我已经通过从类路径中删除JAXB和Xerces JAR解决了我的一个问题,幸运的是我必须使用的Hbase-RDF的那些部分没有使用它们。

第二个问题是,如果我对前一个问题的看法是对的,我该怎么做呢?我如何限制这些库只能由一个库(Hbase-RDF)使用?

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

共有1个答案

狄誉
2023-03-14

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

 类似资料:
  • 我想验证一下,给定包中的类只引用驻留在包本身中的类。然而,我遇到了一个冲突,告诉我a类依赖于例如java.lang.String,这对我来说是完全可以的。有没有一种方法可以忽略基本的java包?

  • 问题内容: 假设我有四个项目: 项目A(依赖于B和D) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下,如果我运行项目A,则Maven将正确地解决对D的依赖关系。如果我理解正确,则Maven始终以最短的路径获取依赖关系。由于D是A的直接依赖项,因此将使用B内指定的D而不是D。 但是现在假设这种结构: 项目A(依赖于B和C) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下

  • 我有一个相当大的遗留项目,我正在添加一个组件。此组件使用HtmlUnit。我可以用Maven编译它,但是当我运行它时,我得到: 所以它缺少正确的构造函数。我认为这几乎肯定是中的版本冲突,但我不确定如何解决它。下面是我的(请注意我一直尝试玩的排除和依赖关系管理的所有游戏): 有什么想法吗? 编辑:有人认为这个问题是这个问题的重复,但事实并非如此,因为本例中的依赖类型不是。

  • 我正在开发一个Android库。该库几乎没有依赖关系。我不确定如果开发人员将我的库与我的库中已经存在的其他依赖项一起使用会发生什么。我试着搜索这个,但什么也找不到。 例如,我在我的库中使用version X的Volley库,并将其作为gradle包发送。开发人员将Version Y和我的库一起导入Volley。 在库(模块、jar或包)中包含依赖项的最佳方式是什么,以最大限度地减少冲突情况。

  • 由一些模块组成的maven项目。我的一个模块正在使用google版本的guava依赖项。现在,我正在我的项目中集成另一个模块,该模块也使用guava但版本。 因此,我希望新模块使用guava版本,而其余项目使用guava版本。我尝试将guava的添加到新模块中,但没有成功。 更新:@Guillaume Darmont的答案为不同的模块解决了问题。但现在我的问题是,新模块有两个依赖项,其中一个使用g

  • 错误为:java.security.NoSuchProviderException:JCE无法验证提供程序BC。注意,我已经添加了这段代码:security.addProvider(new BouncyCastleProvider()); 这在使用spring boot embedded tomcat时可以很好地工作,但在导出到运行在wildfly服务器上的war文件时就不行了。 下面是我如何宣布