如何在maven下载的api中处理缺少的ExpressionFactory #newInstance()方法?

时间:2010-02-05 11:46:12

标签: java maven-2 java-ee

根据java ee 5 api,ExpressionFactory提供了一种方法#newInstance。 我正在使用maven中提供的官方javaee-api:Java EE 5 APIs now in a Maven repository...

但是这个jar不提供这种方法。所以我得到编译器错误。

如何在不使用javaee实现的情况下获得可编译版本,例如glassfish,openejb?

maven(java.dev.net)提供的官方Java EE 6.0 jar包含此方法。

2 个答案:

答案 0 :(得分:3)

  

根据java ee 5 api ExpressionFactory提供了一种方法#newInstance

嗯,javadoc不是证明,实际上,这很可能是Java EE 5 javadoc中的一个错误。 Maintenance Review 1 of the JSR-245中添加了两个newInstance()工厂方法(为了使EL独立并从JSP 2.1中取出,请查看详细信息的JSR-245 MR1 Change Log)但该审核< strong>从未发布。

因此,在java.net repo中的java-ee bundle中找不到此方法也就不足为奇了。

  

但是这个jar不提供这种方法。所以我得到编译器错误。

正如所料。这个方法不在Java EE 5中(至少这是我的理解)。所以你需要使用:

ExpressionFactory factory = new ExpressionFactoryImpl();
  

maven(java.dev.net)提供的官方Java EE 6.0 jar包含此方法。

是的,因为这是Java EE 6,因为EL现在是独立的,有自己的规范(从技术上讲,EL仍然在JSR-245中,如果这令人困惑,很抱歉)。因此,Java EE 6包括EL 2.2(是的,版本jumped from 1.1 to 2.1.2,然后是2.2,以便更好地与JSP版本保持一致)。此版本确实在newInstance()上公开ExpressionFactory方法。

答案 1 :(得分:1)

为什么不想使用Java EE服务器中的库?你最终必须在一个地方进行测试,即使是在本地测试。您可以使用Tomcat,它易于安装和使用。

例如,在Tomcat中,所有提供Java EE api的jar都可以在lib文件夹中找到。如果使用这些库进行编译,并坚持使用标准Java EE API,那么您的代码将与实现Java EE API的所有服务器兼容。

如果您使用Maven并且不希望在您的树状结构中安装这些库并安装服务器,则可以使用 system 依赖类型(有关更多信息,请参阅here) )