根据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包含此方法。
答案 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) )