是否有Java EE JDK

我知道这已被问了一百万次我做了我的功课,但最后我还不完全理解的是,是否有“Java EE JDK”?

当我下载SDK时,它会尝试安装我不想要的大量垃圾。 所以我做了一些阅读并意识到实际上Java SDK是一组技术上与JDK无关的工具。 所以我正在寻找的只是简单的JDK单独下载。

我们知道Sun的(现在的Oracle)网站一直提供 “Java SE JDK”。 但是,我正在开发一个Web应用程序,并对一些 Java EE特性感兴趣:javax.servlet,javax.validation,javax.persistence和javax.transaction。 所以我真正想要的是“Java EE JDK”。

我正在使用典型的Maven / Tomcat / Spring / Hibernate设置,在过去,我总是在Maven提供的范围中为我的项目添加仅API依赖项,用于Java EE规范的这些部分,即:

 javax.servlet servlet-api 2.5  

因此,如果我为我的项目所需的所有Java EE API执行此操作,那么我实际上使用Java SE JDK和一些其他手动声明的Java EE组件。 此外,当我指示我的IDE使用Java EE SDK安装附带的JDK时,这些额外的命名空间不可用。

换句话说,对于所有意图和目的,似乎Java EE SDK下载附带的JDK等同于我在安装“Java SE JDK”时获得的JDK …如果这是正确的那么有我不需要安装Java EE SDK,我可以简单地使用Java(SE)JDK声明我需要的任何Java EE组件作为* -api /提供的依赖关系,就像我上面描述的那样。

所以我的问题是:我在上面描述了正确的方法,还是有“Java EE JDK”这样的东西? 即一个JDK,它带有未实现的接口,如javax.servlet和javax.resources等等? 如果这样的野兽存在,我会从哪里下载?

您所问的是“我可以将所有EE组件”作为单一下载而无需GlassFish,NetBeans等。

那么确切地知道Java EE究竟是什么是有帮助的。 这是一组有时相关/有时不相关的“企业”级别组件的规范(无论企业意味着什么:))。 例如,servlet-api规范(如前面的答案所示)是Java EE规范的一部分。 JTA(事务API),JPA,Java Mail等也是如此。

EE组件有两种类型。 1.仅作为接口发送的应用程序服务器或第三方实现它们。 例如JTA,JPA,Servlet-API。 2.那些作为完整参考实现发布的。 例子是Java-Mail。 我无法想到其他人,但会有一些。

现在,一个完整的应用程序服务器,如glassfish,附带了一组实现,因此很多时候人们在Glassfish,Websphere等中看到它们,并认为他们需要使用它们。 像Tomcat这样的容器不是应用程序服务器,它是一个servlet容器,因此只实现完整Java EE堆栈的子集(仅限servlet所需的部分)。

为了获得完整的Java EE接口/实现集,您需要在构建中添加单独的接口或实现。 在这种情况下,你只需要“知道”在哪里找到它们,而这取决于经验。 例如,人们倾向于知道JPA是作为Hibernate依赖项的一部分添加的。

在下载JDK时,只有一个JDK,无论是从Java SE下载还是从Java EE下载中获取它。

不同之处在于,当您从Java EE下载中下载它时,它将打包在SDK中。 SDK附带Glassfish,代码示例,API文档,教程。 我真的不需要这些,所以我更喜欢从Java SE下载下载。

在Maven JavaEE项目中,您将指定对Java EE库的依赖关系。 对于jboss AS7,您可以使用jboss-spec依赖项,它可以为所有Java EE类进行导入。 Application Server提供了实现Java EE API的类:

  org.jboss.spec jboss-javaee-6.0 3.0.2.Final-redhat-3 pom import  

如果要查看此pom导入的javaEE工件,请查看: http ://maven.repository.redhat.com/techpreview/eap6/6.1.0/maven-repository/org/jboss/spec/jboss- 的JavaEE-6.0 / 3.0.2.Final-红帽-3 / JBoss的-的JavaEE-6.0-3.0.2.Final-红帽-3.pom

一般来说,你或多或少是正确的。

应用程序服务器通常提供Java EE API以及Java EE API的实现。 因此,如果您想使用与应用程序服务器相同的版本,请使用:

  javax.servlet servlet-api 2.5 provided  

如果要使用较新版本,则应省略提供的范围。

如果您想使用更新或不同的实现(例如EclipseLink而不是Hibernate),您还必须为实现添加依赖项。 否则你可以省略它。