ext
폴더에 다른 버전의 jar가 있다고 가정하고 다른 버전은 classpath
입니다. 항아리가로드 될 버전은 무엇입니까? 내 연구에 따르면 extension classloader
은 classpath
보다 먼저 실행되므로 확장 프로그램의 라이브러리가로드됩니다. 또는 classpath
으로 우선 적용됩니다. 버전이 동일하면 어떻게 될까요?JVM에로드 할 항아리는 무엇입니까?
1
A
답변
1
ClassLoader
의 계층에서 찾을 수있는 첫 번째 클래스를 사용합니다. 부트 스트랩 ClassLoader
이 (jre/lib
에 rt.jar
및 여러 가지 다른 중요한 jar
파일)을 부트 스트랩 클래스의를 구성
- :
그래서
ClassLoader
의의 다음 순서에서 클래스를 얻기 위해 노력할 것입니다 . - 확장
ClassLoader
확장 클래스 (확장 폴더jre/lib/ext
jar
의 파일)로 구성. ClassLoader
사용자 클래스 (클래스 경로에 정의 된 클래스가 정의 됨)로 구성됩니다.
클래스가 # 1에서 # 2 및 # 3으로 정의되지 않았으므로 찾을 수있는 첫 번째 클래스는 # 2에 있으므로 확장 폴더의 버전이 표시되고 무시됩니다 나중에 classpath에 정의 된 클래스.
그것은 클래스 레벨이 아닌 항아리 수준이 될 것이다 또한 How Classes are Found
1
참조하십시오. 클래스 (정규화 된 클래스 이름)가 이미 VM에로드 된 경우 ext 또는 클래스 경로 libs 클래스의 새 클래스는 무시됩니다.