Servlet 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

2
servlet-api 대신 javaee-Api를 사용하면 동일한 버전의 javax.servlet.ServletContext를 제공하지 않습니다. 스프링 프레임 워크 3.1을 사용하고 동적 dispathcer (주석)를 사용하고 있습니다. Sa'ad의 대답은 나에게 맞는 유일한 대답입니다. 파스칼을 사용하는 것이 더 일반적인 것처럼 보이면 안됩니다. Heck .. gradle이 의존성을 해결하는 데있어 maven보다 뛰어납니다.
Mukus December

OMG, 이슈 이름을 에서 (으) servlet-api로 변경 했습니다 javax.servlet-api. 30 분의 "디버깅"을
잃어 버렸다

답변:


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에는 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 에서 가져 와서 자신의 저장소에 설치할 수 있습니다.


3
하나의 작은 수정 : 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유일한 방법 스텁 (NO 바이트 코드)가 포함되어 있습니다. provided범위 밖에서이 종속성을 사용할 수 없으므로 Sa'ad의 제안을 선호합니다.
Rafael Winterhalter

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> 제공됨 </ scope>을 추가해야합니다
Serkan Arıkuşu

1
이봐, 이것은 잘 작동하지만 이것이 정확한 의존성인지 확실하지 않습니다 (예 : Tomcat 7). 그 이유는이 종속성에 연결된 소스가 실제로 디버깅을 수행 할 때 실제로 실행중인 것과 일치하지 않기 때문입니다.
Eugen

5
@TejaswiRana 제공되는 범위는 전쟁으로 포장되지 않았 음을 의미합니다. 종속성은 컴파일 타임에 사용할 수 있으며 서버 라이브러리 폴더에 있어야합니다.
banterCZ

5
왜 artifactId를 재사용하지 않았 servlet-api습니까? <excludes>이전 artifactId 를 추가 하는 것이 재미 있기 때문에 (종속성 중 하나가 여전히 이전 의존성에 의존하는 경우 클래스 패스에서 이전 서블릿 API와 새 서블릿 API를 모두 얻지 못하게하기 위해)? :)
Geoffrey De Smet

3
참고로 가장 최신 버전은 javax.servlet-api-3.1.0입니다. 서블릿 컨테이너가 해당 버전을 처리 할 수 ​​있는지 확인하십시오. 예를 들어 Tomcat 버전 8은 3.1을 처리 할 수 ​​있습니다 .
Basil Bourque


25

여기 내가 사용하는 것이 있습니다. 이 모든 것은 중앙에 있으며 출처가 있습니다.

Tomcat 7 (Java 7, Servlet 3.0)의 경우

주 – 서블릿, 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>

이것은 작동하지만 규정 된 종속성은 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

24

불행히도 javaee- (web) -api를 종속성으로 추가한다고해서 Javadoc 또는 소스를 서블릿 API에 제공하여 IDE 내에서 찾아 볼 수는 없습니다. 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>

필자는 의존성에서 javaee-api를 완전히 제거하고 Java EE 6의 모든 부분에 대한 소스 및 Javadoc을 얻기 위해 개별 부분 (javax.ejb, javax.faces 등)으로 대체했습니다.

편집하다:

다음은 동등한 Glassfish 종속성입니다 (어떤 응용 프로그램 서버를 사용하든 두 종속성이 모두 작동해야 함).

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

1
필요한 버전 1.0.0.Beta2인 경우 왜 version을 지정 3.0해야합니까? 이것은 복잡합니다.
Geoffrey De Smet

9

Apache Geronimo 프로젝트는 Maven Central 저장소에 Servlet 3.0 API 종속성을 제공합니다.

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

2
이것은 작동하며 가장 간단한 방법 인 것 같습니다. 감사합니다! BTW Apache Geronimo는 훨씬 더 많은 것을 제공합니다 : mvnrepository.com/artifact/org.apache.geronimo.specs
stivlo

5

새로 온 사람들을 위해.

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

4

9 월부터 DZoneServlet 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 프로파일이 별도의 라이브러리를 대체 한 경우입니다. (내 질문에있는 부록 참조)
deamon

이에 의존하면 Tomcat / Jetty의 경우 제공된 종속성 (서블릿) 및 그것의 일부는 (cdi) 제공되지 않으므로 불가능합니다.
Geoffrey De Smet

3

Java EE 6 종속성을 포함하는 편리한 방법 (JBoss 권장)이 아래에 설명되어 있습니다. 결과적으로 javaee-web-api와 같이 하나의 jar 파일에 의존성이 별도로 배치되므로 소스 파일과 라이브러리의 javadoc을 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.