2016-07-15 1 views
0

여기 내 자바 버전의 비 JAR 확장자를 가진 파일 :자바로드

# java -version 
java version "1.4.2" 
Java(TM) 2 Runtime Environment, Standard Edition (build 2.2) 
IBM J9SE VM (build 2.2, J2RE 1.4.2 IBM J9 2.2 Linux amd64-64 j9xa64142-20080130 (JIT enabled) 
J9VM - 20071205_1933_LHdSMr 
JIT - r7_level20071016_1845) 

(이 IBM 정보 서버의 일부입니다)

나는 라이브 응용 프로그램에 배포했다 일부 업데이트가 있었다 그래서 나는 기존 jar 파일 중 하나를 교체해야했습니다. 분명히 이전의 mylibrary.jar 파일을 백업했고 그 파일을 mylibrary.jar.old이라고했습니다.

몇 시간의 디버깅 후 응용 프로그램을 시작한 후에 어떤 이유로 mylibrary.jar이로드되지 않고 mylibrary.jar.old이 실제로로드되었음을 확인했습니다.

실제로 둘 다 클래스 경로에 있지만 JAR 확장자가 아닌 파일은로드되지 않을 것으로 예상됩니다. 이 문제가 재현 될 수 있다고 확신하며 문제를 재현 할 수 있습니다.

내가 누락 된 항목이 있습니까? 이에 관해 오라클의 웹 사이트에서 아무 것도 찾을 수 없었습니다.


편집 : 나는 또한 오라클에서 자바 테스트 한과 같은 일이 발생합니다.

java version "1.7.0_51" 
Java(TM) SE Runtime Environment (build 1.7.0_51-b13) 
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode) 
+0

버전 정보에 Sun/Oracle JRE가 아닌 IBM JRE가 사용 중이라고 표시되어 있으므로 IBM 설명서를 확인하십시오. – dsh

+0

어떤 IDE를 사용하고 있습니까? (있는 경우) – Defenestrator

+0

아니요, 어떤 IDE도 사용하고 있지 않습니다. 이것은 실제로 IBM Information Server 8.1의 JAR 파일 파트입니다 - http://www.ibm.com/support/knowledgecenter/SSZJPZ_8.1.0/com.ibm.swg.im.iis.productization.iisinfsv.sdfnav.doc/ dochome/iisinfsrv_home.html (ojb-conf.jar - 관련성이있는 경우). 이 JAR에는 데이터베이스 연결 세부 사항이 들어 있습니다. – Razvan

답변

3

실제로는 클래스가로드되며 병은로드되지 않습니다. jar은 zip 형식의 형식이며 JVM은 병을 압축 해제하여 클래스를 지연로드합니다.

자바 extension 메커니즘을 사용하면 JVM이 반드시 .jar 확장자가 아닌 파일 (zip)로 클래스를로드 할 수 있습니다.

페이지 here은 확장자가없는 jar 파일을 VM에서로드하는 방법을 자세하게 설명합니다.

mylibrary.jar.old 형식의 오래된 병은 완벽하게 압축을 풀 수 있습니다. 7-zip을 사용하여 테스트하십시오. 따라서 JVM은이 오래된 항아리에서 필요할 때 클래스를로드 할 수 있습니다. 이제는 mylibrary.jar.old 대신 mylibrary.jar에서 픽업되지 않습니다. JVM 기본 클래스 로딩은 jar 파일을 Date Modified으로 볼 수 있고 이미 클래스가 발견 되었기 때문에 JVM이 다른 jar에서보기 싫어하기 때문에 나는 짐작할 수 있습니다.

또한 응용 프로그램에서 mylibrary.jar.old을 제거하고 Java classpath에 지정되지 않은 디렉토리의 다른 어딘가에 백업합니다.

+1

그래, 아마도 그렇게 보입니다. 확장 메커니즘이 사용되며 "* [..] 지정된 디렉토리에서 모든 JAR 파일 (.jar 이외의 확장자 또는 확장자가없는 경우에도)이로드됩니다. *". – Razvan