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

Как я могу сказать 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>

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

10 ответов

Решение

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

Если честно, я не уверен, что понимаю почему, но не берите в голову...

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

Репозиторий 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 оттуда и установите его в своем собственном хранилище.

Это, кажется, добавлено недавно:

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>

Или вы можете использовать Central Maven Repository с 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/

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

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

Примечание. Servlet, JSP и EL API предоставляются в Tomcat. Только 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>

К сожалению, добавление javaee-(web)-api в качестве зависимости не дает вам Javadoc или Source для Servlet Api для просмотра их из IDE. Это также относится ко всем другим зависимостям (JPA, EJB, ...). Если вам нужны исходники Servlet 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, ...), чтобы получить исходные коды и Javadoc для всех частей Java EE 6.

РЕДАКТИРОВАТЬ:

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

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

Проект 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>

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

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

Я нашел пример POM для API Servlet 3.0 на 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. Наслаждайтесь!

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

Поместите эту зависимость и не забудьте выбрать: Включить зависимости с "предоставленной" областью

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

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

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>3.0-alpha-1</version>
    </dependency>
Другие вопросы по тегам