1

我有三个项目,我们在 RAD (Eclipse) 中称它们为 A、B 和 C。A 是一个简单的 java 项目,其中包含 B 和 C 都将使用的支持代码。B 和 C 都是将在 WebSphere 上运行的 webapp。

我写了 B,其中包含 A 作为构建路径中的项目引用,并将其包含在部署程序集中以作为 jar 放置在 web-inf/lib 中。这或多或少完美地工作。

C 是其他人编写的预先存在的项目,我必须对其应用相同的代码。我尝试了同样的技巧(我想),虽然它在编译时找到了 A,但当我发布到测试环境类时没有找到。当我导出耳朵时,我发现 C 有代表 A 的罐子,并且在类似的位置。但是,C 在 jar 的根目录中有一个 lib 目录(与战争相邻)。A.jar 在其中一场战争的 lib 中。

我从未在其他部署中看到过这个额外的 lib 文件夹,并且一直在搜索设置并且不知道它来自哪里。

所以我的问题是:1)有谁知道是什么产生了那个根 lib 文件夹,但更重要的是...... 2)知道为什么找不到我的类......我认为这个额外的 lib 以某种方式把它搞砸了,但是A.jar 位于 C.war 的 web-inf/lib 中。

4

2 回答 2

0

解决了。这就是发生的事情。我不知道的是,一位同事实际上在耳朵项目中创建了一个二级 lib 目录,因为他计划在那个耳朵下部署第二次战争,并想要一个共享库的地方。

我仍然不明白下一部分。出于某种原因,这个 lib 目录不只是添加到类路径中,而且似乎取代了 A.jar 所在的 web-inf/lib。由于他的项目(最终)也需要 A.jar,我很乐意将 A.jar 生成到该文件夹​​中。但我确实想了解为什么在创建此替代库时 web-inf/lib 停止工作。

于 2013-02-27T15:25:35.913 回答
0

这被称为library-directoryEAR 并包含可供所有模块访问的实用程序 jar。它默认为“lib”,但可以更改。

您应该使用 zip 工具编辑 ear 文件 -

  • 如果两个 WAR 都需要 A.jar,请在 lib 文件夹中尝试。它不应包含 WAR 中所需的任何代码
  • 否则,编辑 ear 文件并将其从 lib 文件夹中取出
于 2013-02-27T14:54:04.780 回答