19

これは何百万回も聞かれ、宿題をしましたが、最後に完全に理解していないのは、「Java EEJDK」があるのか​​ということです。

SDKをダウンロードすると、不要なものをたくさんインストールしようとします。そこで、読んでみると、実際にはJavaSDKは技術的にJDKとは関係のないツールのセットであることがわかりました。したがって、私が探しているのは、JDKのみのクリーンでシンプルなスタンドアロンダウンロードです。

「JavaSEJDK」は、Sun(現在のOracle)のWebサイトから常に入手できます。ただし、私はWebアプリケーションを開発しており、Java EE機能のいくつか(javax.servlet、javax.validation、javax.persistence、javax.transaction)に興味があります。つまり、実際に私が本当に探しているのは「JavaEEJDK」です。

私は典型的なMaven/Tomcat / Spring / Hibernateセットアップを使用しており、これまでは、Java EE仕様のこれらの部分について、プロジェクトにMavenで提供されたスコープのAPIのみの依存関係を常に追加していました。

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

したがって、プロジェクトに必要なすべてのJava EE APIに対してこれを行う場合、実際には、手動で宣言された追加のJavaEEコンポーネントとともにJavaSEJDKを使用しています。さらに、Java EE SDKインストールに付属のJDKを使用するようにIDEに指示すると、これらの追加の名前空間は使用できません。

言い換えると、すべての目的と目的で、Java EESDKダウンロードに付属するJDKは「JavaSEJDK」をインストールしたときに取得するJDKと同等であるように見えます...これが正しければ、 Java EE SDKをインストールする必要はなく、Java(SE)JDKを使用して、必要なJavaEEコンポーネントを上記のように*-api/provided依存関係として宣言するだけです。

ですから、私の質問は次のとおりです。私が上で説明したのは正しい方法ですか、それとも「Java EE JDK」のようなものはありますか?つまり、javax.servletやjavax.resourcesなどの未実装のインターフェースが付属しているJDKですか?そして、そのような獣が存在する場合、どこからダウンロードしますか?

4

3 に答える 3

20

あなたが求めているのは、GlassFishやNetBeansなどを使わずに「すべてのEEコンポーネントを1回のダウンロードで入手できますか」ということです。

JavaEEが実際に何であるかを正確に知ることは役に立ちます。これは、関連する場合と関連しない場合がある「エンタープライズ」レベルのコンポーネントの仕様のセットです(エンタープライズが意味するものは何でも:))。たとえば、servlet-api仕様(前の回答で示されている)は、JavaEE仕様の一部です。JTA(トランザクションAPI)、JPA、JavaMailなども同様です。

EEコンポーネントには2つのタイプがあります。1.インターフェースとしてのみ出荷され、アプリケーションサーバーまたはサードパーティがそれらを実装するもの。例としては、JTA、JPA、サーブレットAPIがあります。2.完全なリファレンス実装として出荷されるもの。例はJava-Mailです。頭から離れて他の人のことを考えることはできませんが、いくつかあるでしょう。

現在、glassfishな​​どの完全なアプリケーションサーバーには一連の実装が付属しているため、多くの場合、Glassfish、Websphereなどの内部でそれらを見て、それらを使用するにはそれが必要だと考えています。Tomcatなどのコンテナはアプリケーションサーバーではなく、サーブレットコンテナであるため、完全なJava EEスタックのサブセット(サーブレットにのみ必要な部分)のみを実装します。

Java EEインターフェース/実装の完全なセットを取得するには、ビルドに個別のインターフェースまたは実装を追加する必要があります。その場合、あなたはそれらをどこで見つけるかを「知る必要があります」、そしてそれは経験によってもたらされます。たとえば、JPAがHibernateの依存関係の一部として追加されることを人々は知っている傾向があります。

于 2012-05-08T13:15:30.587 に答える
4

JDKのダウンロードに関しては、JavaSEダウンロードから取得するかJavaEEダウンロードから取得するかにかかわらず、JDKは1つだけです。

違いは、Java EEダウンロードからダウンロードすると、SDKにパックされることです。SDKには、Glassfish、コードサンプル、APIドキュメント、チュートリアルが付属しています。私はこれらを本当に必要としないので、JavaSEダウンロードからダウンロードすることを好みます。

Maven JavaEEプロジェクトでは、JavaEEライブラリへの依存関係を指定します。jboss AS7の場合、すべてのJavaEEクラスのインポートを可能にするjboss-spec依存関係を使用します。JavaEEAPIを実装するクラスを提供するのはアプリケーションサーバーです。

<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

于 2013-06-19T17:20:51.240 に答える
2

一般的に、あなたは多かれ少なかれ正しいです。

アプリケーションサーバーは通常、JavaEEAPIとJavaEEAPIの実装を出荷します。したがって、アプリケーションサーバーと同じバージョンを使用する場合は、次を使用します。

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

新しいバージョンを使用する場合は、提供されているスコープを省略してください。

新しい実装または異なる実装(Hibernateの代わりにEclipseLinkなど)を使用する場合は、実装の依存関係も追加する必要があります。それ以外の場合は省略できます。

于 2012-05-03T19:59:19.293 に答える