2012-05-03 7 views
13

Ich weiß, das wurde eine Million Mal gefragt, und ich habe meine Hausaufgaben gemacht, aber die letzte Sache, die ich nicht vollständig verstehe, ist, gibt es eine "Java EE JDK"?Gibt es ein Java EE JDK

Wenn ich das SDK herunterlade, versucht es, viele Mist zu installieren, die ich nicht will. Also habe ich etwas gelesen und festgestellt, dass das Java SDK eigentlich eine Reihe von Tools ist, die technisch nicht mit dem JDK verwandt sind. Was ich suche, ist ein sauberer einfacher Standalone-Download nur des JDK.

Wir wissen, dass "Java SE JDK" war immer available von Sun (jetzt Oracle) Website. Ich entwickle jedoch eine Webanwendung und interessiere mich für einige der Java EE-Features: javax.servlet, javax.validation, javax.persistence und javax.transaction. Was ich wirklich suche, ist ein Java EE JDK.

Ich verwende ein typisches Maven/Tomcat/Spring/Hibernate-Setup und in der Vergangenheit habe ich immer API-only-Abhängigkeiten im bereitgestellten Bereich in Maven zu meinem Projekt für diese Teile der Java EE-Spezifikation hinzugefügt, dh:

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

Also, wenn ich dies tun für alle Java EE APIs, die mein Projekt erfordert, dann bin ich tatsächlich mit einigen zusätzlichen manuell deklarierten Java EE-Komponenten Java SE JDK verwenden. Darüber hinaus sind diese zusätzlichen Namespaces nicht verfügbar, wenn ich meine IDE anweisen, das JDK zu verwenden, das mit der Java EE SDK-Installation geliefert wurde.

Mit anderen Worten, es scheint, dass das JDK, das mit dem Java EE SDK-Download kommt, dem JDK entspricht, das ich bekomme, wenn ich das "Java SE JDK" installiere ... Wenn dies der Fall ist Dann muss ich das Java EE SDK nicht mehr installieren, und ich kann einfach das Java (SE) JDK verwenden, das alle Java EE Komponenten, die ich als * -api/bereitgestellte Abhängigkeiten benötige, wie oben beschrieben deklariert.

Also meine Fragen ist: ist das, was ich oben den richtigen Weg zu beschreiben, oder gibt es so etwas wie ein "Java EE JDK"? ein JDK, das mit den nicht implementierten Schnittstellen von Dingen wie javax.servlet und javax.resources und so weiter kommt? Und wenn solch ein Biest existiert, wo würde ich es herunterladen?

Antwort

16

Was Sie fragen, ist „kann ich alle EE-Komponenten“ als Einzel-Download ohne Glassfish, NetBeans, usw.

Nun, es ist hilfreich, genau zu wissen, was Java EE wirklich ist. Es ist eine Reihe von Spezifikationen von manchmal verwandten/manchmal nicht verwandten "Enterprise" -Ebenen-Komponenten (was auch immer Enterprise bedeutet :)). Zum Beispiel ist die Servlet-API-Spezifikation (wie durch eine vorherige Antwort angegeben) Teil der Java EE-Spezifikation. So ist die JTA (Transaktions-API), JPA, Java Mail und so weiter.

Es gibt zwei Arten von EE-Komponenten. 1.Diejenigen, die nur als Schnittstellen geliefert werden und der Anwendungsserver oder eine dritte Partei implementiert sie. Beispiele sind JTA, JPA, Servlet-API. 2. Diejenigen, die als vollständige Referenzimplementierungen ausgeliefert werden. Beispiele sind Java-Mail. Ich kann nicht an andere denken, aber es wird welche geben.

Jetzt wird ein vollständiger Anwendungsserver, wie Glassfish, mit den Implementierungen ausgeliefert, so dass die Leute sie oft in Glassfish, Websphere usw. sehen und denken, dass sie das brauchen, um sie zu benutzen. Ein Container wie Tomcat ist kein Anwendungsserver, sondern ein Servlet-Container und implementiert daher nur eine Teilmenge des vollständigen Java EE-Stacks (die Teile, die nur für Servlets benötigt werden).

Um die vollständigen Java EE-Schnittstellen/Implementierungen zu erhalten, müssen Sie Ihrem Build die separaten Schnittstellen oder Implementierungen hinzufügen. In diesem Fall müssen Sie einfach wissen, wo Sie sie finden können, und das ergibt sich aus Erfahrung. Menschen neigen dazu zu wissen, dass JPA beispielsweise als Teil der Abhängigkeiten von Hibernate hinzugefügt wird.

1

Im Allgemeinen sind Sie mehr oder weniger korrekt.

Die Anwendungsserver enthalten normalerweise die Java EE API sowie die Implementierung der Java EE API. Also, falls Sie die gleiche Version als Anwendungsserver verwenden möchten, dann verwenden:

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

Wenn Sie eine neuere Version verwenden möchten, sollten Sie den vorgesehenen Umfang weglassen.

Wenn Sie eine neuere oder eine andere Implementierung (z. B. EclipseLink anstelle von Hibernate) verwenden möchten, müssen Sie auch eine Abhängigkeit für die Implementierung hinzufügen. Andernfalls können Sie es weglassen.

+0

Ich vergaß zu Verwendung in meinem Beispiel zur Verfügung gestellt, aber das ist, was ich immer in der Praxis tun. In Bezug auf meine Hauptfrage ("Gibt es ein Java EE JDK?") Lautet Ihre Antwort "Nein", es gibt ein Java JDK und es gibt Java EE APIs und die Schnittstellen der Java EE APIs werden separat zum Java JDK verteilt entweder mit Verteilungen von Implementierungen oder nur mit api-Deklaration. Verstehe ich das richtig? –

+0

@AmirAbiri Ja, das ist richtig – Puce

3

Wenn es um das Herunterladen des JDK geht, gibt es nur ein JDK, unabhängig davon, ob Sie es von den Java SE-Downloads oder von den Java EE-Downloads erhalten.

Der Unterschied ist, dass wenn Sie es von den Java EE-Downloads herunterladen, es in einem SDK verpackt ist. Das SDK enthält Glassfish, Codebeispiele, API-Dokumentation und Tutorials. Ich brauche diese nicht wirklich, also bevorzuge ich das Herunterladen von Java SE-Downloads.

In einem Maven JavaEE-Projekt würden Sie Ihre Abhängigkeiten zu den Java EE-Bibliotheken angeben. Im Fall von jboss AS7 verwenden Sie die jboss-spec-Abhängigkeiten, mit denen Sie Importe für alle Java EE-Klassen durchführen können. Es liegt der Application Server die Klassen zur Verfügung zu stellen, die die Java EE APIs implementieren:

<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> 

Wenn Sie von diesem pom importiert die JavaEE Artefakte sehen möchten, werfen Sie einen Blick auf: 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