서버 Jar 패키지 충돌 해결

2799 단어 jar 가방
개발 테스트 시 정상입니다. 정식 서버에 배치되면 다음과 같은 몇 가지 이상이 발생하면jar 패키지 충돌이 발생할 수 있습니다.
1, 자바 클래스에서 자바를 찾을 수 없습니다.lang.ClassNotFoundException
2, 방법은 자바가 존재하지 않습니다.lang.NoSuchMethodError
3, 필드에java가 없습니다.lang.NoSuchFieldError
4, 클래스 오류java.lang.LinkageError
 
war 패키지에서 jar 패키지와 서버에서 jar 패키지가 충돌합니다. 현재 서버 기능이 점점 강해지고 있기 때문에 도입된 jar도 계속 증가하고 있습니다.
충돌의 가능성도 커지고 공식 환경이 복잡하며 서버 관련 설정을 쉽게 수정할 수 없기 때문에
jar가방 충돌 문제를 해결하기 위해 어려움을 가져온다. 만약에 이런 문제를 해결한 적이 있다면 그것은 상당히 사람을 괴롭히는 것이다. 다음은 몇 가지 방법의 총결이다.
충돌 원인:
이런 충돌의 근본적인 원인은 같은 자바 클래스에 여러 개의jar 패키지나 클래스 경로가 존재하는데 이것은 대부분이 다른jar 패키지 버전을 사용했기 때문이다.
해결 방법:
1, 사례법
서버에 이미 응용된jar 패키지를 사용합니다 (전제: 서버에 이미 다른 응용 프로그램이 배치되었습니다). 이 방법으로 충돌을 해결한 적이 있습니다
2, 최소화법
공식 환경에는 많은 제한이 있습니다. 업로드, 배치, 정지, 테스트 이런 과정은 간단할수록 좋습니다. 최근에 War 패키지 중 137jar를 삭제하면 14개의jar 패키지만 남습니다.
전체 테스트 검증 주기 대폭 단축
3, 출처법
클래스가 어떤jar 패키지에 불러왔는지 알면 해결이 쉬워요. 이상에서 오류가 발생하는 클래스의 전체 클래스 이름이 있습니다.
이 패키지를 가져오면 충돌하는jar 패키지를 확인할 수 있습니다.
class가 그jar가방에 탑재된 것을 어떻게 알았는지 어제 영감이 떠올랐는데 사실도 매우 간단하다. 코드는 다음과 같다.
clazz.getResource("className.class").toString(); 


  
4, 서버 분석
각종 응용 서버의class 불러오는 메커니즘을 이해하면 어떤 원인, 언제 충돌이 발생했는지 판단할 수 있다. 이렇게 하면class 불러오는 순서를 조정하여 해결할 수 있다.
최근 WAS 서버의 jar 패키지 충돌은 이 방법으로 해결되었습니다.
 
참조 서버jar 패키지 충돌을 해결하는 4가지 방법
tomcat 클래스 불러오는 순서 Tomcat 아래의 파일 디렉터리/bin:tomcat을 시작하고 닫는 스크립트 파일을 저장합니다./conf:tomcat의 각종 프로필을 저장합니다. 예를 들어:server.xml/server/lib:tomcat 서버에 필요한 각종jar 파일 (jar 파일은tomcat 서버에만 접근할 수 있음)/server/webapps:tomcat이 가지고 있는 두 가지 웹 응용 프로그램:admin 응용 프로그램과 관리자 응용 프로그램입니다./common/lib:tomcat 서버 및 모든 웹 응용 프로그램에서 접근할 수 있는jar 폴더 (웹과tomcat 서버에서 이jar에 접근할 수 있음)/shared/lib: 웹에서 접근할 수 있는jar 파일을 저장합니다.(모든 웹에 접근할 수 있으나tomcat에 접근할 수 없음)/logs:tomcat의 로그 파일/webapps를 저장합니다. 웹 응용 프로그램을 발표할 때 기본적으로 웹 응용 파일을 이 디렉터리에 저장합니다./work:tomcat은 jsp에서 생성된 Servlet을 이 디렉터리에 저장하고 다른 디렉터리에 저장합니다. 웹 응용 프로그램, WEB-Inf 디렉터리에 lib 하위 디렉터리를 만들 수도 있습니다. 이 하위 디렉터리에 각종jar 파일을 저장할 수 있습니다.이jar 파일들은 현재 웹 응용 프로그램에서만 접근할 수 있습니다.그 중에서 웹-inf 디렉터리에 있는lib와classes 디렉터리, Tomcat 클래스 마운트는 먼저classes 디렉터리에 있는 클래스를 마운트하고lib 디렉터리에 있는 클래스를 마운트합니다.클래스가 같을 때,classes가 우선이기 때문입니다.그 중에서 jsp가 실행될 때class를 찾는 순서는 프로젝트 폴더(WEB-INF\lib)->용기 폴더(tomcat\common\lib)->jdk 폴더(jdk\jre\lib\ext)Tomcat은 위에서 찾는 차원 구조로 아래로 내려가거나 설정할 수 있습니다. 
 
자세한 내용
완전한jar 패키지 충돌 해결 과정  
jar 패키지 충돌 문제 배열 총결산  
인터페이스 테스트 중jar 패키지 의존 충돌 분석 해결 프로세스 기교

좋은 웹페이지 즐겨찾기