Зависимость от Maven для API Servlet 3.0?

Как я могу сказать Maven 2 загрузить API Servlet 3.0?

Я пробовал:

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

Я использую http://repository.jboss.com/maven2/, но какой репозиторий будет правильным?

Добавление:

Он работает с зависимостью для всего API Java EE 6 и следующих настроек:

<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 Profiles. Есть ли источник, подтверждающий это предположение?

Ответ 1

Я бы предпочел только добавить API-интерфейс Servlet в качестве зависимости,

Честно говоря, я не уверен, чтобы понять, почему, но неважно...

Brabster отдельные зависимости были заменены Java EE 6 Profiles. Есть ли источник, подтверждающий это предположение?

Репозиторий maven из Java.net действительно предлагает следующий артефакт для 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>

В эту банку входят 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.

Но, насколько мне известно, ничто не позволяет сказать, что эти API не будут распространяться отдельно (в репозитории java.net или где-то еще). Например (в порядке, это может быть частный случай), API JSF 2.0 доступен отдельно (в репозитории 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

Или вы можете использовать Центральный репозиторий Maven с API-интерфейсом Servlet 3.0, который также предоставляется для Tomcat Server 7.0.X

    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>7.0.21</version>
        <scope>provided</scope>
    </dependency>

отсюда: http://repo2.maven.org/maven2/org/apache/tomcat/tomcat-servlet-api/7.0.21/

Ответ 4

К сожалению, добавление javaee- (web) -api в качестве зависимости не дает вам Javadoc или Source Servlet Api для просмотра их из среды IDE. Это также относится ко всем другим зависимостям (JPA, EJB,...) Если вам нужны источники API сервлета /javadoc, вы можете добавить следующее в свой pom.xml(работает хотя бы для JBoss & Glassfish):

Repository:

<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,...), чтобы получить источники и Javadocs для всех частей Java EE 6.

EDIT:

Вот эквивалентная зависимость Glassfish (хотя обе зависимости должны работать независимо от того, какой сервер приложений вы используете).

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

Ответ 5

Вот что я использую. Все они находятся в Центральной и имеют источники.

Для Tomcat 7 (Java 7, Servlet 3.0)

Примечание. В Tomcat предусмотрены API-интерфейсы Servlet, JSP и EL. Только JSTL (если используется) необходимо связать с веб-приложением.

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

Ответ 6

Проект Apache Geronimo обеспечивает зависимость API-интерфейса Servlet 3.0 от репо Maven Central:

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

Ответ 7

Я нашел пример POM для Servlet 3.0 API на DZone с сентября.

Предложите использовать репортаж java.net, http://download.java.net/maven/2/

В нем есть API Java EE, например 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 сервлетов там. Наслаждайтесь!

Ответ 8

Просто для новичков.

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

Ответ 9

Ниже показан удобный способ (рекомендуется JBoss) включить Java EE 6. В результате зависимости размещаются отдельно (не все в одной банке, как в javaee-web-api), исходные файлы и 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>

Ответ 10

Попробуйте этот код...

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