2013-03-05 5 views
2

요약
웹 로직 10.3 클래스 로더 문제

구조적으로 변경되지 않았습니다있는 응용 프로그램 또는 코드의 변화는 이제 클래스 경로 문제가 발생한다. 변경된 사항은 환경이 구축 된 환경 (새로운 솔라리스 상자)뿐입니다.

응용 프로그램 서버 : 웹 로직 10.3

메이븐 전쟁 - 플러그인 : 응용 프로그램 전쟁 내에서 2.3

오류

는, 같은 클래스의 다른 버전을 가지고있는 두 종속이다 한 버전에 특정 생성자가 누락되었습니다 ...이 부분이 어디로 갈지 알 수 있습니다. 잘못된 버전의 클래스 (생성자 누락)가 대상으로 지정되어 있으므로 런타임 오류가 발생합니다.

이제 이것은 maven 프로젝트이며, 컴파일 할 때이 클래스의 올바른 버전이 클래스 경로에 처음 나타나는 방식으로 종속성이 정렬됩니다.

지금까지 알고있는 한, 빌드 부서에서 war 파일을 빌드하는 새로운 빌드 상자가 변경되었습니다. 내가 어떤 문제를 내 자신의 지역 환경 (창)에 전쟁을 생성하지 않으며 웹 로직 환경 서버 (유닉스 상자)에 배포하는 경우

는 테스트

다.

그러나 빌드 상자 (solaris)에 빌드 한 다음 동일한 환경에 배포하면 문제가 발생합니다.

두 war 파일을 비교해 보았는데 차이점이 없습니다.

내가 (클래스 패스에서 처음으로 잘못된 클래스를 치는) 의심스러운 것을 확인하기 위해 나는 잘못된 버전을 제외하고 패키지를 만들었고 놀라움은 놀랍습니다. weblogic 클래스 로더는 다른 클래스보다 먼저이 잘못된 클래스를로드하고 있습니다.

문제는 여전히 발생하고 있으며, 갑자기 이러한 원인이 있는지 확인해야합니다.

lib 디렉토리에있는 의존성을 결정하는 측면에서 웹 로직의 클래스 로더에 대한 규칙은 무엇

가 처음로드 질문?

그리고 MANIFEST의 버전 번호를 제외하고는이 동작이 완전히 다른 두 가지 전쟁간에 어떻게 변경 될 수 있습니까?

많은 감사,

사용자 편집

으로는 메이븐 종속성 트리 요청 :

[INFO] com.xxx.web:adminapp:war:100462.7 
[INFO] +- junit:junit:jar:4.11:test 
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test 
[INFO] +- struts:struts:jar:1.2.4:compile 
[INFO] | +- commons-beanutils:commons-beanutils:jar:1.6.1:compile 
[INFO] | +- commons-collections:commons-collections:jar:2.1:compile 
[INFO] | +- commons-digester:commons-digester:jar:1.5:compile 
[INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile 
[INFO] | +- commons-logging:commons-logging:jar:1.1.1:compile 
[INFO] | +- commons-validator:commons-validator:jar:1.1.3:compile 
[INFO] | +- oro:oro:jar:2.0.7:compile 
[INFO] | +- antlr:antlr:jar:2.7.2:compile 
[INFO] | \- commons-lang:commons-lang:jar:2.6:compile (version managed from 2.0) 
[INFO] +- displaytag:displaytag:jar:1.2:compile 
[INFO] | +- com.lowagie:itext:jar:1.3:compile 
[INFO] | +- org.slf4j:jcl104-over-slf4j:jar:1.4.2:compile 
[INFO] | \- org.slf4j:slf4j-log4j12:jar:1.4.2:compile 
[INFO] |  +- org.slf4j:slf4j-api:jar:1.4.2:compile 
[INFO] |  \- log4j:log4j:jar:1.2.13:compile 
[INFO] +- taglibs:request:jar:1.0.1:compile 
[INFO] +- org.apache.poi:poi:jar:3.8:compile 
[INFO] | \- commons-codec:commons-codec:jar:1.4:compile (version managed from 1.5) 
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided 
[INFO] +- javax.servlet:jsp-api:jar:2.0:provided 
[INFO] +- com.xxx.busservices:cdm:jar:623377.7:compile 
[INFO] +- com.xxx.busservices:homeratingservice-java-client:jar:1011147.2:compile 
[INFO] +- com.xxx.busservices:motorratingservice-java-client:jar:1011147.2:compile 
[INFO] +- com.xxx.techservices:entrefdata-java-client:jar:1011147.2:compile 
[INFO] +- com.xxx.techservices:auditservice-java-client:jar:626434.4:compile 
[INFO] +- com.xxx.framework:framework:jar:626434.4:compile 
[INFO] +- com.xxx.ibis:xxx-logging:jar:956942.1:compile 
[INFO] +- weblogic:wlfullclient:jar:10.3:provided 
[INFO] +- commons-fileupload:commons-fileupload:jar:1.2.2:compile 
[INFO] \- commons-io:commons-io:jar:2.1:compile 

cdm.jar 올바른 버전 FactorValueLite라는 클래스를 포함하고 또한 motorratingservice-java-client.jar 내 잘못된 버전 인이 클래스가 존재하면이 항아리는 먼저 클래스 경로에로드되는 것으로 보입니다.

+0

dependecy/excluions ...를 사용하여 빌드에서 오류가 발생한 클래스를 포함하는 것으로 알고있는 종속성을 제외 할 수 있습니까? 아마 http://classpathhelper.sourceforge.net/가 도움이 될 수 없다면. – sbk

+0

이것이 문제라는 것을 증명하기 위해이 작업을 수행했습니다. 그러나 갑자기 이것이 이제 지금 쟁점이되는 이유는 무엇입니까? – buymypies

+0

두 env의 JVM 버전을 비교 했습니까? 다른 방법으로 클래스 경로 검색을 수행하는 것으로 의심 될 수 있습니다. – sbk

답변

1

실패한 곳의 로컬 리포지토리 (건물중인 컴퓨터)에 오래된 아티팩트가있는 것 같습니다.

제거하거나 다른 경로를 지정하십시오 (테스트하기 위해). 예 :

mvn clean package -Dmaven.repo.local=/tmp/repository 

그런 경우 해결 방법은 간단합니다. 저장소를 제거하십시오.

+0

나는 작동하지 않는 전쟁과 작동하지 않는 것 모두에서 체크섬을 비교해 보았습니다. 둘 다 똑같습니다. – buymypies

+0

'NoSuchMethodError' (이름을 제공하고 발견 된 이슈 등)이있는 클래스에 관한 더 많은 정보를 제공해주십시오. 또한 전쟁 유물 구축 프로젝트의'mvn dependence : tree'를 첨부하십시오. – carlspring

+0

이슈를 배포 할 호스트의 웹 응용 프로그램 컨테이너에 포함 된 라이브러리에 차이점이 있습니까? – carlspring

0

사용 된 jar에 URL Class.getProtectionDomain().getCodeSource().getLocation() ("file : jar : ...")을 가져올 수 있습니다. 내 생각 엔 응용 프로그램 서버의 lib 디렉토리에있는 다른 항아리 하나입니다.