【发布时间】:2016-03-19 21:38:01
【问题描述】:
我想在我的 Jave EE 7 应用程序中使用 OmniFaces 1.7。我的应用程序是一个包含 JAR 和 skinny WAR 的 EAR。我的一些 JAR 依赖于 OmniFaces,因此 OmniFaces 工件必须在 EAR 中,但不能在 WAR 中的 WEB-INF/lib 中。
这是我的 EAR 的样子:
EAR
+-- lib
| +-- [some 3rd party JARs]
| `-- omnifaces.jar
+-- myEJBs.jar
`-- myWAR.war
当我这样说时,OmniFaces 转换器(如GenericEnumConverter)没有在 JSF 中注册并且无法工作。对此的原因在here 和here 进行了讨论。基本上按照JSF 2.0 Spec(11.5.1 扫描类注解的要求节),只扫描WARs的WEB-INF/lib目录。
所以我的问题是:我应该如何在我的应用程序中包含 OmniFaces?
包含它两次(在EAR/lib 和 WARs WEB-INF/lib 中)可能会起作用,但感觉很笨拙。我前段时间用 RichFaces 4.3.5(同样的问题)尝试过,但没有成功,但导致IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter。
【问题讨论】:
-
OmniFaces' known issues page 声明:“还应注意的是,由于依赖项通常仅在 WAR 中可用,例如 JSF、Servlet 和 EL,因此 OmniFaces 不能简单地包含为 EAR 库。 "但是如果我想在我的 EJB 中使用像
org.omnifaces.config.BeanManager这样的类呢? -
在 maven-users 列表上的 discussion 之后,我认为 OmniFaces 的类(如 BeanManager 或 Utils)目前不应在 WAR 之外的类中使用。一种解决方案可能是将 OmniFaces 拆分为两个单独的 JAR:一个真正的 JSF 组件库和一个可在任何地方使用的通用库。
标签: jsf-2 ear omnifaces skinny-war