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

时间:2012-08-29 20:21:27

标签: java java-ee netbeans glassfish dependencies

我正在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无法运行。

1 个答案:

答案 0 :(得分:0)

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