【问题标题】:How to handle missing ExpressionFactory#newInstance() method in api downloaded by maven?如何处理maven下载的api中缺少的ExpressionFactory#newInstance()方法?
【发布时间】:2011-01-13 11:54:34
【问题描述】:

根据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中包含了这个方法。

【问题讨论】:

    标签: java maven-2 jakarta-ee


    【解决方案1】:

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

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

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

    【讨论】:

    • 我想为“所有”服务器编译,而不是为一个特殊的。而且我想确保我不使用特定的函数或类,它只在 glassfish 中可用,但在 jboss 中不可用。
    • 每个java服务器都提供标准的api。如果您坚持使用 java api 中描述的类,您的应用程序将适用于所有服务器。我会完成我的答案。
    • 为什么不漂亮?你说的maven jar只是提供基础API的接口,并不是真的“更漂亮”
    • 实际上,这不是正确的,newInstance 方法不在 Java EE 5 中(并且 Tomcat 不再是参考实现,因此在 Tomcat 上运行并不能保证任何东西)。
    【解决方案2】:

    根据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 了解详细信息)但该评论从未发布过

    因此,您在 java.net 存储库中的 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 版本保持一致)。而且这个版本确实在ExpressionFactory 上公开了newInstance() 方法。

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 2012-06-18
      • 2021-12-20
      • 1970-01-01
      • 2014-05-24
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多