是否有Java EE JDK [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有Java EE JDK [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

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

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

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

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

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
</dependency>

因此,如果我为我的项目所需的所有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的类:

<dependency>
   <groupId>org.jboss.spec</groupId>
   <artifactId>jboss-javaee-6.0</artifactId>
   <version>3.0.2.Final-redhat-3</version>
   <type>pom</type>
   <scope>import</scope>
</dependency>

如果要查看此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-redhat-3/jboss-javaee-6.0-3.0.2.Final-redhat-3.pom

另一答案

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

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

<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>servlet-api</artifactId>
   <version>2.5</version><!-- or whatever version your application server provides -->
   <scope>provided</scope>
</dependency>

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

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

以上是关于是否有Java EE JDK [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何配置Java EE Eclipse+Tomcat开发环境,并导入项目

JDK是什么?J2EE是什么?

请问Java SE EE ME等有啥区别?

JAVA EE,JAVA SE,JAVA ME,JDK,JRE,JVM之间的区别

ubuntu16.04下配置JDK 1.8+安装Java EE,并实现最大子数组算法

POPTEST老李谈JVMJREJDKjava ee sdk with jdk区别