【发布时间】:2013-11-01 18:14:59
【问题描述】:
概述:我有一个使用Apache Maven 作为构建系统的JEE6 项目。我的项目生成了一个 EAR,其中包含一些常见的 JAR、一些 EJB 模块和一个 WAR。生成的 EAR 应部署到 JBoss AS 7(目前为 7.1.1)。
最佳实践:如果您有一个 Web 应用程序(如我的)并且该 Web 应用程序的类(托管 bean)可能会在其他项目中重用,那么它就是 recommended way (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 的 META-INF 目录中提供一个 jboss-deployment-structure.xml 文件找到了解决方案,该文件具有以下内容:
<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>
我现在的问题是,我这样做是正确的方式还是被认为是一种黑客行为?我的问题有更好/更便携的解决方案吗?
非常感谢,
- 马丁
【问题讨论】:
-
这里是related question 的链接,已经有一些答案。