如何告诉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>

我更倾向于只添加Servlet API作为依赖项,但“Brabster”可能是正确的,单独的依赖项已被Java EE 6 Profiles取代。有消息来源证实这一假设吗?


从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 vs. Servlets 3.0),作为新“配置文件”的一部分。在JAR中,似乎所有3.0 servlet的东西都在里面。享受吧!


我更喜欢只添加Servlet API作为依赖项,

老实说,我不太明白为什么,但没关系……

Brabster单独的依赖项已被Java EE 6 Profiles所取代。有消息来源证实这一假设吗?

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

这个罐子包括 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存储库或其他地方)。例如(好吧,这可能是特殊情况),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,并将其安装到您自己的存储库中。


不幸的是,将javaee-(web)- Api添加为依赖项并不能让您从IDE中浏览Javadoc或Servlet Api的Source。对于所有其他依赖项(JPA、EJB,……)也是如此。 如果你需要Servlet API源代码/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>

我完全从依赖项中删除了javae -api,并将其替换为独立的部分(javax. api)。ejb、javax。faces,…)来获取Java EE 6所有部分的源代码和Javadocs。

编辑:

这里是等效的Glassfish依赖项(尽管无论你使用什么应用服务器,这两个依赖项都应该工作)。

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

Apache Geronimo项目在Maven Central repo上提供了一个Servlet 3.0 API依赖:

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

下面演示了一种包含Java EE 6依赖项的方便方法(推荐使用JBoss)。因此,依赖关系是分开放置的(不像javaee-web-api那样全部放在一个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节和作用域导入:

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

或者,您可以使用带有Servlet 3.0 API的中央Maven存储库,该API也为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/


这似乎是最近添加的:

https://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>

这是我用的。所有这些都在中央,都有来源。

适用于Tomcat 7 (java7, Servlet 3.0)

注意- Tomcat中提供了Servlet、JSP和EL api。只有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 (java8, 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>

试试这段代码…

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

只对新人开放。

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

放置这个依赖项,不要忘记选择:包含“提供”范围的依赖项

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