有没有办法在运行时确定Java EE版本?

Jos*_*sue 6 java java-ee

是否有编程方式来确定哪个版本的java ee环境可用?

Ste*_*n C 6

不知道有没有办法获取Java EE版本号,但是可以获取到Servlet API版本号和JSP版本号:

  • 您可以从ServletContext对象以独立于实现的方式获取 servlet api 版本。寻找方法getMajorVersion()getMinorVersion()方法。

  • 您可以通过以下方式获取 JSP 版本:

    JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion()

毫无疑问,平台(即应用程序服务器)有特定的方式来查找或推断各种版本号。


值得注意的是,如果考虑到应用服务器供应商可能会做什么,“Java EE 版本”是一个橡胶概念;例如,挑选他们支持的 Java EE 技术,并可能挑选版本。例如,Tomcat 并不支持所有的 Java EE - 缺少 EJB 支持。

  • 注意`web.xml`中的`<web-app version>`对`ServletContext#getMajorVersion()`和`getMinorVersion()`有影响。理论上,这可以设置为 2.5,而容器本身支持 3.0。然后容器以回退模式运行。如有必要,这可以与检查 Servlet 3.0 特定类(例如`@WebServlet` 注释)是否在类路径中相结合,具体取决于 OP 需要此信息的确切原因。 (2认同)

Dav*_*ins 5

没有标准的方法可以做到这一点.您最接近的方法是使用reflection/ClassLoader并检查在给定Java EE版本中引入的特定API类/方法.

脱离我的头顶:

  • 添加了Java EE 6/EJB 3.1 javax.ejb.Singleton
  • 添加了Java EE 5/EJB 3.0 javax.ejb.Stateless
  • 添加了J2EE 1.4/EJB 2.1 javax.ejb.TimerService
  • 添加了J2EE 1.3/EJB 2.0 javax.ejb.MessageDrivenBean

在此之前它是J2EE 1.2/EJB 1.1

但请注意,如果这是针对Tomcat(通过标签判断),最好的方法是检查System.getProperty("tomcat.version").您应该能够基于Tomcat版本暗示servlet版本.