문제

우리는 Tomcat 5.5에 전쟁 파일을 배포하고 있으며 Web-Inf Classs가 .classes 파일을 포함하는 경우 잘 작동하지만 .Classes가 포함 된 .jar 파일을 Web-Inf lib로 이동하면 런타임에 예외가 생깁니다. java.lang.nosuchmethoderror를 불평하지만 .jar 파일의 기존 클래스 파일은 클래스가 포함되어 있으며 메소드는 종료됩니다!

이에 대한 도움을 주시면 감사하겠습니다.

도움이 되었습니까?

해결책

이것은 계급 갈등으로 인해 발생할 수 있습니다. 어딘가에 오래된 버전의 클래스가 없는지 확인하십시오 (Tomcat의 공유 폴더, Web-Inf/Classes, Web-Inf/Lib). 이 경우 실제로 어떤 클래스 Tomcat을로드할지 알 수 없습니다. 방법없이 하나를 선택하면 경험하는 예외가 발생합니다.

다른 팁

ClassNotFoundError가 아닌 Nosuchmethoderror를 받고 있기 때문에 JAR 파일 외부의 구식 클래스가 있음을 의미합니다. 당신은 그것을 찾고 제거해야합니다.

이것은 방어 적으로 클래스 클로린입니다. http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html#class%20Definitions

보시다시피 Web-INF/LIB를 비교하는 Web-Inf/클래스에서 클래스의 우선 순위가 더 높습니다. 같은 이름 (및 패키지)의 두 클래스가 있습니다. 그들 중 하나가 클래스 폴더에있을 때 우선 순위가 높아집니다. 둘 다 Lib 폴더에있을 때 두 번째는 먼저 얻는다 (항아리는 알파베이스 순서를 기준으로 우선 순위를 갖는다)

이것은 당신의 상황을 설명 할 수 있습니다.

도움이되기를 바랍니다 -Yonatan

웹 애플리케이션의 관점에서 클래스 또는 리소스 로딩은 다음 리포지토리 에서이 순서대로 나타납니다.

JVM의 부트 스트랩 클래스
시스템 클래스 로더 클래스 (위에서 설명)
/웹 응용 프로그램의/Web-Inf/클래스
웹 응용 프로그램의 /web-inf/lib/* .jar
공통 클래스 로더 클래스 (위에서 설명)

"Common Class Loader"에 의해 검색된 위치는 Common.Loader 속성에 의해 $ catalina_base/conf/catalina.properties로 정의됩니다. 여기에서 공유 위치를 활성화/정의합니다.
shared.loader = $ {catalina.base}/shared/classes, $ {catalina.base}/shared/lib/*. jar

위의 순서는 당신이 직면 한 문제에 대한 더 많은 통찰력을 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top