当我使用下面的代码时,它将版本返回为1.0.0.0_2-1
String version = FacesContext.class.getPackage().getImplementationVersion();
但是当我检查MANIFEST.MF
中的MYAPP.ear\MyWEB.war\WEB-INF\lib\jsf-impl.jar\META-INF\
文件时,它提到如下。
Implementation-Version: 2.0.2-FCS
所以我的问题是这个项目使用的是哪一个正确的版本?
我使用Oracle Weblogic 12C
实例。
答案 0 :(得分:0)
答案 1 :(得分:0)
Oracle WebLogic已经成为一个Java EE应用服务器,已经与其他JSF开箱即用。您不需要也不需要通过提供JSF来手动安装JSF。
您看到的1.0.0.0_2-1
来自WebLogic捆绑的JSF。它显然是一个JSF 2.1实现,但不幸的是,那里缺少修订版。你无法控制它。 Oracle显然修改了JAR和manifest。 Java EE应用程序服务器供应商拥有自己的构建系统,可根据源代码文件生成JAR。因此,JAR文件名和清单内容可能与“官方”JAR的文件名和清单内容不同。
在任何情况下,如果您没有将标准WebLogic 12c设置修改为currently latest available(12.1.3),那么我可以说它实际上是Mojarra 2.1.20。
只有在没有随附JSF的准系统servletcontainer(如Tomcat和Jetty)上,才需要手动安装JSF和webapp。无论如何,当您在WebLogic等Java EE容器上执行此操作时,您将面临由类路径冲突引起的问题。不要那样做。在您的特定情况下,您可以看到WebLogic捆绑的JSF实现实际正在使用。但API和Web资源(例如jsf.js
)仍将来自WAR。这迟早会在冲突中结束。