2012-05-03 27 views
13

我知道這已被問了一百萬次,我做了我的功課,但我不完全理解的最後一件事是,有沒有「Java JDK」?有沒有一個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的提供範圍中向我的項目添加API-only依賴關係,這些部分是:

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

所以,如果我的所有,我的項目需要,那麼我實際上使用Java SE JDK有一些額外的手動聲明的Java EE組件了Java EE的API做到這一點。此外,當我指示我的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之類的未實現接口?如果這樣的野獸存在,我會從哪裏下載它?

回答

16

什麼你問的是:「我可以得到所有的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依賴項的一部分。

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),則還必須爲實現添加依賴項。否則,您可以省略它。

+0

我忘了在我的例子中提供的使用,但這是我在實踐中總是做的。關於我的主要問題(「是否存在Java EE JDK?」),您的答案是「否」,存在Java JDK並且存在Java EE API,並且Java EE API的接口分別分發給Java JDK ,可以使用實現的分發,也可以作爲僅用於聲明的分發。我是否正確理解這一點? –

+0

@AmirAbiri是的,這是正確的 – Puce

3

當談到下載JDK時,無論您是從Java SE下載還是從Java EE下載獲得JDK,都只有一個JDK。

區別在於,當您從Java EE下載中下載它時,它將打包在一個SDK中。該SDK附帶Glassfish,代碼示例,API文檔,教程。我並不真的需要這些,所以我更喜歡從Java SE下載下載。

在Maven JavaEE項目中,您將指定對Java EE庫的依賴關係。在jboss AS7的情況下,您可以使用jboss-spec依賴關係,這將允許您爲所有Java EE類執行導入。它是由應用服務器提供的是實現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