2

我的耳朵里有 apache commons lang,我正在调用一个 ejb,它在 ear 文件夹中包含所有 jar 并正确配置,但是当我调用 ear 时,我收到以下错误

Caused by: java.lang.ClassNotFoundException:    
org.apache.commons.lang.builder.ToStringBuilder from [Module "test.common:main"

这是从我创建(编译)的使用 commons lang 的模块中抛出的。为什么jboss不使用ear部署中的commons lang?除了罐子在耳朵外面,我还应该在其他地方使用它们吗?

4

1 回答 1

1

EAR 是隔离的,因此您的模块无法看到您在 EAR 中打包的内容。

模块本身也是隔离的。因此,您需要在模块module.xml文件中为模块提供“commons lang”的依赖项。例如 JBossAS7 提供了一个 commons-lang 模块。您可以将其作为依赖项包含在 module.xml 中:

 <dependencies>
    <module name="org.apache.commons.lang" />
 </dependencies>

同样,您可以在EAR/META-INF/jboss-deployment-structure.xml. 这样,模块和 EAR 都将使用相同的 commons-lang jar,因此您可以避免 CLassCastExceptions。

或者,您可以在中添加export="true"依赖项,module.xml以便在包含模块时将其依赖项导出到其他包。

于 2013-03-14T03:24:42.580 回答