概述:我有一个使用Apache Maven作为构建系统的 JEE6 项目。我的项目生成了一个 EAR,其中包含一些常见的 JAR、一些 EJB 模块和一个 WAR。生成的 EAR 应该部署到JBoss AS 7(目前为 7.1.1)。
最佳实践:如果您有一个 web 应用程序(如我的)并且 webapp 的类(托管 bean)可能会在其他项目中重用,推荐的 方式(maven 方式)将这些类打包到一个单独的 JAR中并使 WAR 依赖于这个 JAR。然后将 JAR 与 EAR 一起打包(但不在 WAR 中)。到目前为止,一切正常。
这是我的 EAR 的布局:
EAR
+-- lib
| +-- [some 3rd party JARs]
| `-- war-backingbeans.jar
+-- myEJBs.jar
`-- myWAR.jar
问题:当我的 backingbeans JAR 中的类开始依赖于一些 JSF 类(如FacesContext
. JBoss AS7 附带 JSF JAR,并自动为类路径上的 WAR 提供这些 JAR。但是,这些 JAR 不在 EAR 的类路径或 EAR 中的其他 JAR 上。
我可以在 maven 端添加对相关 JAR 的相应依赖项,但这最终会将 JSF JAR 打包到 EAR 中。我真正想要的是 JBoss 将它的 JSF JAR 放在 JAR 的类路径中。
我通过在 EAR 目录中提供具有以下内容的jboss-deployment-structure.xml
文件找到了解决方案:META-INF
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<dependencies>
<module name="javax.faces.api" slot="main" export="true"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
我现在的问题是,我这样做是正确的还是被认为是黑客行为?我的问题有更好/更便携的解决方案吗?
提前非常感谢,
-马丁