【问题标题】:Getting class from ear/war in ear/lib/jar returns ClassNotFoundException从 ear/lib/jar 中的 ear/war 获取类返回 ClassNotFoundException
【发布时间】:2013-11-13 06:23:53
【问题描述】:

我的项目结构如下。服务器是 Glassfish 4。IDE - netbeans 7.4。项目 temp 由项目 a 使用。

EAR
 + lib/temp.jar
 + a.war

Temp.jar 包含核心类。它们被战争使用。 Temp.jar 不会从战争中导入任何文件,它必须对战争一无所知。但是,temp.jar 具有通过反射创建战争类实例的类(根据 xml 文件)。在这里我得到ClassNotFoundException。如何修复?是否可以修复或我的项目结构错误?

注意:我没有将 temp.jar 放在 a.war 中,因为可以有不同的 war 文件可以使用这个 jar。

【问题讨论】:

  • 有application.xml 文件吗?它是否包含<library-directory> 元素?
  • @Nikos Paraskevopoulos 谢谢你的时间。不,没有任何application.xml
  • 我认为根据规范您的设置应该工作。但是,您能否在 WAR 中创建一个 META-INF/MANIFEST.MF 文件(在内容根目录下,即与 WEB-INF 并排)并按如下方式放置一个条目:Class-Path: lib/temp.jar
  • @Nikos Paraskevopoulos 结果是一样的。战争类可以毫无问题地到达 jar 类。 Jar 类无法访问战争文件。
  • 我的失败!!!我没有注意到确切的问题(使用 JAR 中的 WAR 类)。不过,一种 dirty 方法(从未测试过,请注意)是在 JAR 的清单中放置一个类似的 Class-Path 条目:Class-Path: ../a.war。但我建议将共享类放在 另一个 JAR 中,并从 WAR 和 JAR 中引用它。

标签: java jakarta-ee glassfish


【解决方案1】:

我找到了答案。

如果我们将 jar 放入 ear/lib 文件夹,则可以访问其中的类,但它们无法访问 lib 之外的类(在这种情况下,无需在清单文件中添加任何内容)。

如果我们将 jar 放在 ear 的根目录或任何其他文件夹 ear/bum 中,那么这些 jar 的类可以访问 war 类。

所以我得出结论,/lib 是单向的,任何其他都是双向的。

希望它能为人们节省很多时间。

【讨论】:

    【解决方案2】:

    将 jar 文件添加到您的 lib 文件夹。 更改 MANIFEST.MF 并将特定的 jar 路径添加到 Bundle-ClassPath。

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2013-04-02
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多