サーブレット3.0 APIのMaven依存関係?


229

Maven 2にServlet 3.0 APIをロードするように指示するにはどうすればよいですか?

私は試した:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>3.0</version>
    <scope>provided</scope>
</dependency>

http://repository.jboss.com/maven2/を使用していますが、どのリポジトリが適切ですか?

補遺:

Java EE 6 API全体の依存関係と次の設定で動作します。

<repository>
    <id>java.net</id>
    <url>http://download.java.net/maven/2</url>
</repository>

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>

私は依存関係としてサーブレットAPIのみを追加したいと思いますが、個別の依存関係がJava EE 6プロファイルに置き換えられた「ブラブスター」は正しいかもしれません。この仮定を確認する情報源はありますか?


84
ソース、java.net / maven / 2リポジトリにjavadocはありません。オラクル、地獄に行って!
stepancheg 2011

2
servlet-apiの代わりにjavaee-Apiを使用しても、同じバージョンのjavax.servlet.ServletContextは提供されません。私はSpring Framework 3.1を使用しており、動的ディスパスサー(注釈)を使用しています。Sa'adの答えは私にとって有効な唯一の答えです。Pascalの方が一般的であると思われるため、実際にはPascalを使用しないでください。依存関係の解決において、GradleはMavenに勝っています。
Mukus

OMG、彼らはアーティファクト名をからservlet-apiに変更しましたjavax.servlet-api。30分「デバッグ」を失った...:/
insan-e

回答:


116

依存関係としてサーブレットAPIのみを追加したいのですが、

正直なところ、理由はわかりませんが、気にしないでください...

Brabsterの個別の依存関係は、Java EE 6プロファイルに置き換えられました。この仮定を確認する情報源はありますか?

実際、Java.netのmavenリポジトリーは、WebProfileに以下の成果物を提供します。

<repositories>
  <repository>
    <id>java.net2</id>
    <name>Repository hosting the jee6 artifacts</name>
    <url>http://download.java.net/maven/2</url>
  </repository>
</repositories>        
<dependencies>
  <dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

このjarには、サーブレット3.0、EJB Lite 3.1、JPA 2.0、JSP 2.2、EL 1.2、JSTL 1.2、JSF 2.0、JTA 1.1、JSR-45、JSR-250が含まれています。

しかし、私の知る限りでは、これらのAPIが個別に(java.netリポジトリまたは他の場所で)配布されないということは言うまでもありません。たとえば(特定のケースではありますが)、JSF 2.0 APIは個別に(java.netリポジトリで)利用できます。

<dependency>
   <groupId>com.sun.faces</groupId>
   <artifactId>jsf-api</artifactId>
   <version>2.0.0-b10</version>
   <scope>provided</scope>
</dependency>

そして実際には、そこjavax.servlet-3.0.jarから取得して独自のリポジトリにインストールできます。


3
1つの小さな修正:javaee-web-apiにはEL 1.2ではなくEL 2.2(Unified Expression Language 2.2)が含まれています
Andrey

1
...そしてgradleを使用する場合:コンパイル 'javax:javaee-web-api:6.0'
Robert Christian

1
javaee-web-apiメソッドスタブのみが含まれていることに注意してください(バイトコードは含まれません)。この依存関係をprovidedスコープ外で使用することはできません。そのため、私はSa'adの提案を好みます。
Rafael Winterhalter 2014年

2
@Pascal-「サーブレットAPIのみを依存関係として追加したい」-純粋なサーブレットコンテナ(tomcat、jetty)とJEE準拠のコンテナ(TomEE、wildflyなど)を扱う場合は、そうします
YoYo

1
JavaEEのウェブ-APIはに更新されました<version>7.0</version>
OJVM

461

これは最近追加されたようです:

http://repo1.maven.org/maven2/javax/servlet/javax.servlet-api/3.0.1/

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
</dependency>

29
<scope> provided </ scope>を追加する必要があります
SerkanArıkuşu2012

1
こんにちは、これは正常に動作しますが、これが使用される正確な依存関係であるかどうかはわかりません(たとえば、Tomcat 7で)。その理由は、この依存関係に関連付けられているソースが、実際にデバッグを行ったときに実際に実行されているソースと一致しないためです。
Eugen

5
@TejaswiRana提供されるスコープは、それが戦争用にパッケージ化されていないことを意味します。依存関係はコンパイル時に利用可能で、サーバーライブラリフォルダーにあることが期待されます。
banterCZ 2013年

5
なぜartifactIdを再利用しないのservlet-apiですか?<excludes>古いArtifactId を追加するのは楽しいためです(依存関係の1つがまだ古いものに依存している場合に、クラスパスで古いサーブレットAPIと新しいサーブレットAPIの両方を取得しないようにするため)?:)
Geoffrey De Smet 2013

3
参考までに、最新バージョンはjavax.servlet-api-3.1.0です。サーブレットコンテナがそのバージョンを処理できることを確認してください。たとえば、Tomcatのバージョン8は3.1を処理できます。
バジルブルク2014


25

これが私が使うものです。これらはすべて中央にあり、出典があります。

Tomcat 7(Java 7、サーブレット3.0)の場合

注-サーブレット、JSP、およびEL APIはTomcatで提供されます。JSTL(使用する場合)のみをWebアプリにバンドルする必要があります。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>2.2.4</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

Tomcat 8(Java 8、サーブレット3.1)の場合

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

これは機能しますが、規定の依存関係は最終的にMavenセクションにありますが、「提供済み」としてマークされているため、WARファイルには含まれていません。しかし、このTomcat libディレクトリをEclipseビルドパスに含めても、プロジェクトでTomcat libディレクトリのJARを使用することはできません。私のpom.xmlは、これらのTomcat JARを解決できず、3.0バージョンのTomcatが提供するのではなく、常にローカルMavenリポジトリからのservlet-api JARのバージョン3.0.1を必要とします。これがなぜなのかわかりません...誰か説明できますか?
Geeb

Tomcat 8.5で使用できる<groupId> javax.servlet </ groupId> <artifactId> javax.servlet-api </ artifactId>のどのバージョンを提供できますか?
Gog1nA 2018

24

残念ながら、javaee-(web)-apiを依存関係として追加しても、JavadocまたはソースがIDE内から参照するためにサーブレットAPIに提供されません。これは、他のすべての依存関係(JPA、EJBなど)にも当てはまります。サーブレットAPI sources / javadocが必要な場合は、pom.xmlに以下を追加できます(少なくともJBoss&Glassfishで機能します)。

リポジトリ:

<repository>
  <id>jboss-public-repository-group</id>
  <name>JBoss Public Repository Group</name>
  <url>https://repository.jboss.org/nexus/content/groups/public/</url>
</repository>

依存:

<!-- Servlet 3.0 Api Specification -->
<dependency>
   <groupId>org.jboss.spec.javax.servlet</groupId>
   <artifactId>jboss-servlet-api_3.0_spec</artifactId>
   <version>1.0.0.Beta2</version>
   <scope>provided</scope>
</dependency>

依存関係からjavaee-apiを完全に削除し、個別のパーツ(javax.ejb、javax.facesなど)に置き換えて、Java EE 6のすべてのパーツのソースとJavadocを取得しました。

編集:

同等のGlassfish依存関係を次に示します(使用するアプリサーバーに関係なく、両方の依存関係が機能するはずです)。

<dependency>
  <groupId>org.glassfish</groupId>
  <artifactId>javax.servlet</artifactId>
  <version>3.0</version>
  <scope>provided</scope>
</dependency>

1
バージョンが必要な1.0.0.Beta2場合、バージョンを指定する必要があるのはなぜ3.0ですか?これは複雑になります。
Geoffrey De Smet 2013

9

Apache Geronimoプロジェクトは、Maven Centralリポジトリにサーブレット3.0 APIの依存関係を提供します。

<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-servlet_3.0_spec</artifactId>
    <version>1.0</version>
</dependency>

2
これは機能し、最も簡単な方法のようです、ありがとう!ところで、Apache Geronimoには、mvnrepository.com
artifact

5

初心者向け。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

4

9月にDZoneでServlet 3.0 APIのサンプルPOMを見つけました。

http://download.java.net/maven/2/にあるjava.netリポジトリを使用することをお勧めします

そこにJava EE APIがあります。たとえば、http: //download.java.net/maven/2/javax/javaee-web-api/6.0/のように、POMはあなたが求めているもののように見える:

<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-web-api</artifactId>
  <version>6.0</version>
</dependency>

新しい「プロファイル」の一部として、APIのバージョン規則がEE仕様全体(つまり、Java EE 6とServlets 3.0)のバージョンに一致するように変更されたと思います。JARを見ると、3.0サーブレットのものがすべて入っているように見えます。楽しい!


ありがとう、うまくいきました!残っている唯一の問題は、Java EE 6プロファイルが個別のライブラリを置き換えたかどうかです。(私の質問の補遺を参照)
デーモン

これに依存している場合、ポータブルウォー(JBoss、Tomcat、Jettyなどで動作する)を作成できません。Tomcat/ Jettyの場合、提供されている依存関係(サーブレット)の一部を配置する必要があるためです。その一部が提供されていません(cdi)。これは不可能です。
Geoffrey De Smet 2013

3

Java EE 6の依存関係を含めるための便利な方法(JBoss推奨)を以下に示します。その結果、依存関係は個別に配置され(javaee-web-apiのようにすべてが1つのjarに含まれるわけではありません)、ライブラリのソースファイルとjavadocsがmavenリポジトリからダウンロードできます。

<properties>
    <jboss.javaee6.spec.version>2.0.0.Final</jboss.javaee6.spec.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.jboss.spec</groupId>
        <artifactId>jboss-javaee-web-6.0</artifactId>
        <version>${jboss.javaee6.spec.version}</version>
        <scope>provided</scope>
        <type>pom</type>
    </dependency>
</dependencies>

個々の依存関係のみを含めるには、dependencyManagementセクションとスコープimportを使用できます。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.jboss.spec</groupId>
                <artifactId>jboss-javaee6-specs-bom</artifactId>
                <version>${jboss.javaee6.spec.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!-- No need specifying version and scope. It is defaulted to version and scope from Bill of Materials (bom) imported pom. -->
        <dependency>
            <groupId>org.jboss.spec.javax.servlet</groupId>
            <artifactId>jboss-servlet-api_3.0_spec</artifactId>
        </dependency>
    </dependencies>

-3

このコードを試してください...

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>3.0-alpha-1</version>
    </dependency>

アルファ段階の依存関係は、本番アプリケーションに常に適しているとは限りません。
Stephan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.