4

我正在 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 文件不包含任何有助于查找问题原因的内容. 该错误与此非常相似,但建议的解决方案不起作用。第二个问题与此非常相似,我已经尝试了每一个建议的解决方案,但没有运气。有趣的是,Web 模块内的 Web 服务调用 EJB 成功,但是 JSF facelet index.html 运行失败。

4

1 回答 1

0

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

于 2012-08-29T20:55:33.300 回答