항아리가로드되지 않았습니다. 서블릿 사양 2.3, 섹션 9.7.2를 참조하십시오. 위반 클래스 : javax / servlet / Servlet.class 다음 메시지가 나타납니다. 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) –

동적 웹 프로젝트이기도 한 Maven 프로젝트를 실행 중입니다. Maven에서 모든 Spring 라이브러리를 사용했습니다. 을 만들었지 web.xml만 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 파일은 웹앱에 포함되어서는 안됩니다. 컨테이너는 이미 클래스 경로에 이러한 클래스를 가지고 있기 때문에이 jar에 포함 된 인터페이스를 구현합니다.

종속성은 Maven pom provided의 기본 compile범위가 아닌 범위에 있어야합니다 .

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

답변

서블릿 api jar 파일이 컨테이너에 이미로드되어 있고 lib디렉토리 에서 다시로드하려고하면이 경고 메시지가 표시됩니다 .

Servlet 사양에 따르면 webapps 디렉토리에 servlet.jar 을 사용할 수 없습니다 lib.

  • 디렉토리 servlet.jar에서 간단히 제거하여 경고 메시지를 제거 하십시오 lib.
  • lib디렉토리 에서 jar를 찾지 못한 경우 빌드 경로를 스캔하고 jar를 제거하십시오.

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

Maven 프로젝트를 실행하는 경우 컨테이너가 이미 자체 서블릿 jar를 제공 했으므로 pom.xml의 javax.servlet-api범위 provided로 종속성을 변경하십시오 .


답변

이를 수정하려면 범위제공됨으로 설정하십시오 . 이것은 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>

답변

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

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

답변

Maven 종속성 범위

제공 :이 훨씬 컴파일처럼,하지만 당신은 나타냅니다 기대 JDK 또는 컨테이너가 런타임에 의존성을 제공 할 수 있습니다. 예를 들어 Java Enterprise Edition 용 웹 애플리케이션을 빌드 할 때 웹 컨테이너가 해당 클래스를 제공 하기 때문에 Servlet API 및 관련 Java EE API 에 대한 종속성을 제공된 범위로 설정 합니다 . 이 범위는 컴파일 및 테스트 클래스 경로에서만 사용할 수 있으며 전 이적이지 않습니다.


답변

저는이 문제로 어려움을 겪고 있으며 수많은 “솔루션”을 시도했습니다.

그러나 결국 작동하고 실제로 수행하는 데 몇 초가 걸리는 유일한 방법은 새 서버 인스턴스를 삭제하고 다시 추가하는 것입니다 !

기본적으로 Eclipse에서 Servers 아래의 Tomcat 서버를 마우스 오른쪽 버튼으로 클릭하고 삭제했습니다. 다음으로 새 Tomcat 서버를 추가했습니다. 응용 프로그램을 정리하고 다시 배포하고이 오류를 제거했습니다.


답변

다음 디렉토리에서 jar 파일 el-api.jar를 확인하십시오. : C : \ apache-tomcat-7.0.39 \ lib \ el-api.jar이 있으면 웹 응용 프로그램 WEB-INF \ lib \의이 디렉토리에 있습니다. el-api.jar 항아리를 제거해야합니다.