Servlet 3.0 API'sına maven bağımlılığı?


229

Maven 2'ye Servlet 3.0 API'sını yüklemesini nasıl söyleyebilirim?

Denedim:

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

Kullandığım http://repository.jboss.com/maven2/ ama ne depo doğru olacaktır?

Zeyilname:

Tüm Java EE 6 API'sı ve aşağıdaki ayarlar için bir bağımlılıkla çalışır:

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

Yalnızca Servlet API'sini bağımlılık olarak eklemeyi tercih ederim, ancak "Brabster" ayrı bağımlılıkların Java EE 6 Profilleri ile değiştirildiği konusunda doğru olabilir. Bu varsayımı doğrulayan bir kaynak var mı?


84
Java.net/maven/2 deposunda kaynak yok, javadoc yok. Oracle, cehenneme git!
stepancheg

2
Servlet-api yerine javaee-Api kullanmak, javax.servlet.ServletContext ile aynı sürümü vermez. Yay çerçevesi 3.1 kullanıyorum ve dinamik dağıtıcı (ek açıklama) kullanıyorum. Sa'ad'ın cevabı benim için çalışan tek cevap. Pascal ile gitmemelisiniz, çünkü bu daha genel görünüyor. Heck .. gradle bağımlılıkların çözümünde maven yener.
Mukus

OMG, eser adını olarak servlet-apideğiştirdiler javax.servlet-api. Yarım saat "hata ayıklama" kayboldu ...: /
insan-e

Yanıtlar:


116

Servlet API'sını yalnızca bağımlılık olarak eklemeyi tercih ederim,

Dürüst olmak gerekirse, nedenini anladığımdan emin değilim ama boş verin ...

Brabster ayrı bağımlılıklarının yerini Java EE 6 Profilleri aldı. Bu varsayımı doğrulayan bir kaynak var mı?

Java.net'in maven deposu gerçekten de WebProfile için aşağıdaki eseri sunar:

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

Bu kavanoz Servlet 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'yi içerir.

Ancak bildiklerime göre, hiçbir şey bu API'ların ayrı olarak dağıtılmayacağını söyleyemez (java.net deposunda veya başka bir yerde). Örneğin (tamam, belirli bir durumda olabilir), JSF 2.0 API'si ayrı olarak kullanılabilir (java.net deposunda):

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

Ve aslında, sen alabilir javax.servlet-3.0.jardan orada ve kendi depoda takın.


3
Bir küçük düzeltme: JavaEE-web api EL 2.2 (Unified İfade Dil 2.2) değil, EL 1.2 içerir
Andrey

1
... ve sınıf kullanımı için: 'javax: javaee-web-api: 6.0' derleyin
Robert Christian

1
javaee-web-apiYalnızca yöntem saplamaları içerdiğini unutmayın (bayt kodu yok). Bu bağımlılığı providedkapsam dışında kullanamazsınız, bu yüzden Sa'ad'ın önerisini tercih ederim.
Rafael Winterhalter

2
@Pascal - "Yalnızca bağımlılık olarak Servlet API'sini eklemeyi tercih ederim" - bir JEE uyumlu kapsayıcıyla (TomEE, wildfly vb.) Saf bir sunucu uygulaması kapsayıcısı (tomcat, iskele) ile uğraşıyorsanız bunu yapardınız
YoYo

1
JavaEE-web API için güncellendi<version>7.0</version>
OJVM

461

Bu son zamanlarda eklenmiş gibi görünüyor:

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> sağlanan </scope> '
u eklemelisiniz

1
Hey, Bu iyi çalışıyor ama bunun kullanılacak tam bağımlılık olduğundan emin değilim (örneğin Tomcat 7 ile); Bunun nedeni, bu bağımlılığa bağlı kaynakların, gerçekten hata ayıklama yaptığınızda gerçekte çalışanlarla eşleşmemesidir.
Eugen

5
@TejaswiRana Sağlanan kapsam, savaşa paketlenmediği anlamına gelir. Bağımlılık derleme zamanında kullanılabilir, sunucu kitaplığı klasöründe beklersiniz.
banterCZ

5
Neden yapay nesneyi tekrar kullanmadı servlet-api? <excludes>Eski artifactId için eklemek eğlenceli çünkü (bağımlılıklarınızdan biri hala eskisine bağlıysa, hem eski hem de yeni sunucu uygulaması api'lerini sınıf yolunuzda almayı önlemek için)? :)
Geoffrey De Smet

3
FYI, en son sürümü javax.servlet-api-3.1.0. Sadece Servlet konteynerinizin bu sürümü işleyebildiğinden emin olun. Örneğin , Tomcat'in 8. sürümü 3.1'i işleyebilir .
Basil Bourque


25

İşte kullandığım. Bunların hepsi Merkezde ve kaynaklara sahip.

Tomcat 7 için (Java 7, Servlet 3.0)

Not - Servlet, JSP ve EL API'leri Tomcat'te sağlanır. Web uygulamasıyla yalnızca JSTL (kullanılıyorsa) paketlenmelidir.

<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 için (Java 8, Servlet 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>

Bu işe yarar, ancak öngörülen bağımlılıklar Maven bölümünde bulunur ancak "sağlanan" olarak işaretlendikleri için WAR dosyasına hiçbir zaman dahil edilmez. AMA ... Bu Tomcat lib dizinini Eclipse oluşturma yoluna dahil etsem bile, projeyi Tomcat lib dizinindeki JAR'ları kullanmaya asla alamıyorum ve orada açıkça görülebilirler. Pom.xml'im asla bu Tomcat JAR'ları çözemez ve her zaman 3.0 sürümü Tomcat'in sağladığı malzemeler yerine yerel Maven deposundan servlet-api JAR'ın 3.0.1 sürümünü gerektirir. Bunun neden olduğu hakkında hiçbir fikrim yok ... kimse açıklayabilir mi?
Geeb

Tomcat 8.5 için hangi <groupId> javax.servlet </groupId> <artifactId> javax.servlet-api </artifactId> sürümünü kullanabilir miyim?
Gog1nA

24

Ne yazık ki, javaee- (web) -api'yi bağımlılık olarak eklemek size IDE içinden göz atmak için Javadoc veya Kaynağı Servlet Api'ye vermez. Bu, diğer tüm bağımlılıklar için de geçerlidir (JPA, EJB, ...) Servlet API kaynaklarına / javadoc'a ihtiyacınız varsa, pom.xml'nize aşağıdakileri ekleyebilirsiniz (en azından JBoss & Glassfish için çalışır):

Depo:

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

Bağımlılık:

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

Java EE 6'nın tüm parçaları için kaynakları ve Javadocs'u almak için javaee-api'yi bağımlılıklardan tamamen çıkardım ve ayrık parçalar (javax.ejb, javax.faces, ...) ile değiştirdim.

DÜZENLE:

İşte eşdeğer Glassfish bağımlılığı (her iki bağımlılık da kullanılmalıdır, hangi uygulamayı kullanırsanız kullanın).

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

1
Neden sürüm belirtmek gerekiyor 1.0.0.Beta2's versiyonu ise, 3.0ihtiyacımız olan? Bu onu karmaşık hale getirir.
Geoffrey De Smet

9

Apache Geronimo projesi Maven Central deposuna bir Servlet 3.0 API bağımlılığı sağlar:

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

2
Bu işe yarıyor ve en basit yol gibi görünüyor, teşekkürler! BTW Apache Geronimo'nun sunabileceği daha çok şey var: mvnrepository.com/artifact/org.apache.geronimo.specs
stivlo

5

Sadece yeni gelenler için.

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

4

Eylül ayından itibaren DZone üzerinde Servlet 3.0 API için örnek bir POM buldum .

Http://download.java.net/maven/2/ adresindeki java.net deposunu kullanmanızı öneririz.

Orada Java EE API'leri var, örneğin http://download.java.net/maven/2/javax/javaee-web-api/6.0/ POM ile peşinde olduğunuz gibi görünebilir, örneğin :

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

API'lerin sürüm kurallarının, yeni 'profillerin' bir parçası olarak genel EE spesifikasyonunun (yani Java EE 6 vs. Servlets 3.0) sürümüne uyacak şekilde değiştirildiğini tahmin ediyorum. JAR'a baktığımızda, tüm 3.0 servlet şeyleri orada gibi görünüyor. Zevk almak!


Teşekkürler, işe yarıyor! Geriye kalan tek soru, Java EE 6 Profillerinin ayrı kütüphanelerin yerini almasıdır. (
sorumdaki eke

Buna güvenirseniz, taşınabilir savaş yapamazsınız (JBoss, Tomcat, Jetty, ... üzerinde çalışır), çünkü Tomcat / Jetty için sağlanan bu bağımlılığın bir kısmını (sunucu uygulaması) koymanız gerekir ve bunun bir kısmı sağlanmadı (cdi), ki bu imkansız.
Geoffrey De Smet

3

Java EE 6 bağımlılıklarını dahil etmenin uygun bir yolu (JBoss önerilir) aşağıda gösterilmiştir. Sonuç olarak, bağımlılıklar ayrı ayrı yerleştirilir (javaee-web-api'deki gibi bir kavanoza değil), kütüphanelerin kaynak dosyaları ve javadocları maven deposundan indirilebilir.

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

Yalnızca bireysel bağımlılıkları dahil etmek için dependencyManagementbölüm ve kapsam importkullanılabilir:

    <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

Bu kodu deneyin ...

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

Alfa aşamasındaki bağımlılıklar her zaman üretim uygulaması için uygun değildir.
Stephan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.