2011-10-11 2 views
1

나는 봄, 최대 절전 모드 및 스트럿츠 2 웹 응용 프로그램을하고 난이 오류를 얻을 : 클래스 패스에서 숨겨진 항아리를 찾는 방법은 무엇입니까?

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
java.lang.NoSuchFieldError: TRACE 

그래서 내가 그것을 봤 this 느릅 나무는 말한다 발견 :

if you are on the Equinox Console, perform the following check: packages org.apache.log4j

내가 한 어떤 및 도착를 이 :

org.apache.log4j; version="1.2.15"<org.apache.log4j_1.2.15.v201005080500 [33]> 
    org.apache.velocity_1.5.0.v200905192330 [37] imports 

그리고 정말 뜻 ... 그러나 나는이의 확신하면 해당 단지는 내가 사용하는 것으로되어있어 하나가 아닌 무엇인지 모른다.

실제로 프로젝트 및 Tomcat 라이브러리의 모든 log4j jar를 삭제 한 후 패키지 명령 을 실행했습니다.

log4j 항아리를 삭제 한 후에도 내 프로젝트의 모든 클래스에서 org.apache.log4j.Level 클래스를 가져올 수 있습니다. 물론 가져올 수있는 Level 클래스에는 TRACE 필드가 없습니다. .

그래서 어떻게 위치를 찾을 수 있습니까? 그리고 어떻게 그것이 내 프로젝트 classpath에 포함 되나요?

감사합니다.

+0

당신의 WEB-INF/lib 폴더를 확인합니다. 때로는 물건들이 "마술처럼"들어갑니다 .-) –

답변

3

시도 :

System.out.println(org.apache.log4j.Level.class.getProtectionDomain().getCodeSource().getLocation()); 
+0

정말 훌륭합니다. 이것이 나온 이유는 다음과 같습니다. file : /Dvlp/Servers/Tomcat-6.0.33/lib/GroboUtils-5-core.jar 이제 WinXP에서이 문제가 발생하지 않는 이유를 이해하지 못했습니다. 데비안과 함께 일하는 사람). –

0

jvm 인수 '-verbose'또는 '-verbose : class'는 콘솔에서로드되는 각 클래스 (대부분의 경우 jar)에서 출력됩니다. 아마도 이것은 (웹 응용 프로그램을 실행하는 방법에 따라) 사용할 수 있습니다.

log4j의 경우 많은 사람들이 log4j를 항아리와 함께 운송합니다. 이상적으로는 패키지 이름을 변경해야하지만 그렇지 않은 패키지 이름은 변경해야합니다. 이것은 내가 (모든 log4j를 클래스로 대체 주시기) 다음 인쇄를 찾고 있었다 log4j.dtd을 찾습니다

for file in *.jar 
do 
    unzip -l "$file" 2> /dev/null | grep "log4j.dtd" && echo $ 
done 

: 내가 쓴/내가 사용하는 그것에서 log4j에 있던 항아리 찾으려면 다음 bash는 스크립트를 조립 zip 파일의 경로와 그 파일을 포함하는 zip 파일의 이름. 모든 항아리가있는 디렉토리에서 실행하십시오. 문제를 일으키는 병의 위치를 ​​찾으려면 다음

관련 문제