我知道这已被问了一百万次我做了我的功课,但最后一件事我还不完全明白,是否有“Java EE JDK”?
当我下载SDK时,它会尝试安装我不想要的大量垃圾。所以我做了一些阅读并意识到实际上Java SDK是一组技术上与JDK无关的工具。所以我正在寻找的只是简单的JDK单独下载。
我们知道Sun的(现在的Oracle)网站上的“Java SE JDK”一直是available。但是,我正在开发一个Web应用程序,并对 Java EE特性的一些感兴趣:javax.servlet,javax.validation,javax.persistence和javax.transaction。所以我真正想要的是“Java EE JDK”。
我正在使用典型的Maven / Tomcat / Spring / Hibernate设置,在过去,我总是在Maven提供的范围中为Java EE规范的这些部分添加仅API依赖项,即:< / p>
<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等等?如果这样的野兽存在,我会从哪里下载?
答案 0 :(得分:16)
在没有GlassFish,NetBeans等的情况下,您所要求的是“我能获得所有EE组件”作为单个下载吗?
确切地知道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依赖项的一部分添加的,例如。
答案 1 :(得分:3)
在下载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
答案 2 :(得分:1)
一般来说,你或多或少是正确的。
应用程序服务器通常提供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),您还必须为实现添加依赖项。否则你可以省略它。