source

항아리가 장착되지 않았습니다.Servlet 사양 2.3, 섹션 9.7.2를 참조한다.문제 클래스: javax/servlet/Servlet.class

nicesource 2023. 1. 8. 14:34
반응형

항아리가 장착되지 않았습니다.Servlet 사양 2.3, 섹션 9.7.2를 참조한다.문제 클래스: javax/servlet/Servlet.class

저는 Maven 프로젝트를 진행하고 있는데, 이 프로젝트는 역동적인 웹 프로젝트이기도 합니다.메이븐에 있는 스프링 도서관을 다 이용했어요.가 창작했습니다.web.xml, Tomcat 7 다음 」 , Tomcat 7 서음음음음음음음음음 。

INFO: validateJarFile(C:\Users\mibvzd0\workspace\.metadata\.plugins\
org.eclipse.wst.server.core\tmp2\wtpwebapps\hapi_hl7\WEB-INF\lib\
servlet-api-2.4.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

.webapp/lib가 없었습니다하지만 그것은 작동하지 않았다.제 경우 어떻게 해야 하는지 알려주세요.

servlet API .jar 파일은 webapp 내에 포함되어서는 안 됩니다.이는 컨테이너가 클래스 경로에 이미 이러한 클래스를 가지고 있기 때문입니다.이 jar에 포함된 인터페이스를 구현합니다.

는 「」에 가 있습니다.provided "scope" 가 "scope" 입니다.compile(Maven, Maven 。

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

에 이미 api jar 파일에서 다시 로드하려고 이 .lib디렉토리로 이동합니다.

Servlet 사양에 따르면 웹 앱에는 servlet.jar를 사용할 수 없습니다.lib디렉토리로 이동합니다.

  • 하려면 , 「」를 삭제하는 만으로 끝납니다.servlet.jar의 서 lib디렉토리로 이동합니다.
  • lib디렉토리에서 빌드 경로를 스캔하고 jar를 제거합니다.

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\project\WEB-INF\lib

maven을 합니다.javax.servlet-apiprovidedpom에 pom.xml을 할 수 있습니다.

이 문제를 해결하려면 범위를 "제공"으로 설정하십시오.이는 Maven이 컴파일 및 테스트에만 코드 servlet-api.jar를 사용하지만 WAR 파일에는 포함하지 않음을 나타냅니다.전개된 컨테이너는 실행 시 servlet-api.jar를 제공합니다.

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

다음 Windows 명령줄이 문제의 jar 파일을 추적하는 데 유용할 수 있습니다.폴더 내의 모든 jars에 모든 클래스 파일의 인덱스가 생성됩니다.배포된 앱의 lib 폴더 내에서 실행한 다음 index.txt 파일에서 문제 클래스를 검색합니다.

for /r %X in (*.jar) do (echo %X & jar -tf %X) >> index.txt

메이븐 의존성 범위

provided : 는 컴파일과 비슷하지만 실행 시 JDK 또는 컨테이너가 의존관계를 제공함을 나타냅니다.예를 들어 Java Enterprise Edition용 웹 응용 프로그램을 만들 때 웹 컨테이너가 클래스제공하기 때문Servlet API 및 관련 Java EE API에 대한 종속성을 제공된 범위로 설정합니다.이 범위는 컴파일 및 테스트클래스 경로에서만 사용할 수 있으며 전이적이지 않습니다.

저는 이 문제와 씨름하고 있으며, 수많은 "해결책"을 시도해 왔습니다.

그러나, 결국, 기능하는 것은 불과 몇 초 밖에 걸리지 않았습니다.새로운 서버 인스턴스를 삭제하고 다시 추가하는 것입니다.

기본적으로 서버 아래의 이클립스에서 Tomcat 서버를 마우스 오른쪽 버튼으로 클릭하고 삭제했습니다.다음으로 새로운 Tomcat 서버를 추가했습니다.애플리케이션을 클리닝 해 재도입해, 이 에러를 없앴습니다.

jar 파일 el-api.jar : C:\apache-tomcat-7.0.39\lib\el-api.jar 를 체크합니다.이 디렉토리가 존재하는 경우 웹 어플리케이션 WEB-INF\lib\el-api.jar 에서 jar 를 삭제합니다.

URL 패턴이 잘못된 경우 이 오류가 발생할 수 있습니다.

예를 들어 @WebServlet("login")이라고 쓰면 이 오류가 표시됩니다.올바른 것은 @Web Servlet("/login")입니다.

및 ★★★★provided종속성이 하위 프로젝트에서 작동하지 않습니다.

Maven 프로젝트에서 상속을 사용하는 경우 이 구성을 상위 항목에 포함해야 합니다.pom.xml파일입니다.<parent>...</parent>pom.xml 섹션(상속 사용 시)을 지정합니다.그래서 부모님한테 이런 게 있을 거예요.pom.xml:

<groupId>some.groupId</groupId>
<version>1.0</version>
<artifactId>someArtifactId</artifactId>
<packaging>pom</packaging>
<modules>
    <module>child-module-1</module>
    <module>child-module-2</module>
</modules>
<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

JAX-WS 의존관계 라이브러리 "jaxws-rt.jar"가 없습니다.

http://jax-ws.java.net/ 를 참조해 주세요.JAX-WS RI 디스트리뷰션을 다운로드합니다.압축을 풀고 "jaxws-rt.jar"를 Tomcat 라이브러리 폴더 "{$"에 복사합니다.Tomcat}/lib" 입니다.Tomcat을 재시작합니다.

일반적으로 이 메시지는 양성 메시지입니다.라고 써있으면

INFO: validateJarFile(/<webapp>/WEB-INF/lib/servlet-api-2.5.jar) - jar not loaded. 
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

즉, tomcat은 이미 servlet-api-2.5.jar를 내장하고 있기 때문에 servlet-api-2.5.jar를 무시합니다.일반적으로 이것은 문제를 일으키지 않습니다.

뭐라고 쓰여있다면WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.class

그러면 (내 예에서는 그늘진 항아리를) 실행할 수 있습니다.

$mvn 의존관계: 트리

하는 "something에 대한알 수 ( servlet-api "servlet-api")tomcat-servlet-api-9.0.0 제 경우는 tomcat,되어 있을 입니다).pom 에 、 om 、 tomcat 、 른 、 른 、 른 른 、 른른 른 른 른 ). ). 。

 <dependency>
    ...
    <exclusions>
      <exclusion>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet</artifactId>
      </exclusion>
    </exclusions> 
</dependency>

https://stackoverflow.com/a/9941668/778517 에서

mvn dependency:tree그리고 결과는

(...)
[INFO] +- org.zkoss.zk:zkspring-core:jar:3.2.0:compile
[INFO] |  +- org.springframework:spring-beans:jar:3.0.7.RELEASE:compile
[INFO] |  +- org.springframework:spring-context:jar:3.0.7.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-asm:jar:3.0.7.RELEASE:compile
[INFO] |  +- org.springframework:spring-web:jar:3.0.7.RELEASE:compile
[INFO] |  \- org.reflections:reflections:jar:0.9.5-RC2:compile
[INFO] |     +- com.google.collections:google-collections:jar:1.0:compile
[INFO] |     +- ch.qos.logback:logback-classic:jar:0.9.9:runtime
[INFO] |     |  \- ch.qos.logback:logback-core:jar:0.9.9:runtime
[INFO] |     +- com.google.code.gson:gson:jar:1.4:compile
[INFO] |     \- javax.servlet:servlet-api:jar:2.5:compile
(...)

그래서 pom.xml에서 zkspring-core에서 제외 태그를 추가했습니다.

(...)
             <groupId>org.zkoss.zk</groupId>
             <artifactId>zkspring-core</artifactId>
             <version>3.2.0</version>
+            <exclusions>
+                <exclusion>
+                <groupId>javax.servlet</groupId>
+                <artifactId>servlet-api</artifactId>
+                </exclusion>
+            </exclusions>
             </dependency>
(...)

달리기를 하고 나서mvn dependency:tree및 javax.servlet : servlet - api : jar : 2.5 : clean

(...)
[INFO] +- org.zkoss.zk:zkspring-core:jar:3.2.0:compile
[INFO] |  +- org.springframework:spring-beans:jar:3.0.7.RELEASE:compile
[INFO] |  +- org.springframework:spring-context:jar:3.0.7.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-asm:jar:3.0.7.RELEASE:compile
[INFO] |  +- org.springframework:spring-web:jar:3.0.7.RELEASE:compile
[INFO] |  \- org.reflections:reflections:jar:0.9.5-RC2:compile
[INFO] |     +- com.google.collections:google-collections:jar:1.0:compile
[INFO] |     +- ch.qos.logback:logback-classic:jar:0.9.9:runtime
[INFO] |     |  \- ch.qos.logback:logback-core:jar:0.9.9:runtime
[INFO] |     \- com.google.code.gson:gson:jar:1.4:compile
(...)

제거한다.servlet.jar출처에서web-inf/lib폴더(tomcat에서 사용 가능)lib폴더는 정상적으로 동작합니다.

언급URL : https://stackoverflow.com/questions/15601469/jar-not-loaded-see-servlet-spec-2-3-section-9-7-2-offending-class-javax-serv

반응형