클래스가 제공 한 클래스 경로 항목을 어떻게 발견합니까?
-
23-08-2019 - |
문제
Java의 사용자 정의 클래스 로더의 여러 다른 .jars에서 여러 가지 클래스를로드하고 있습니다. 나는 관습을 만듭니다 URLClassLoader
, 몇 개의 .jars를 추가하고 전달하십시오. ServiceLoader
내가 원하는 수업을 찾기 위해.
내 질문은 : 수업이 주어지면 어떤 .jar에서로드 된 것을 발견 할 수있는 방법이 있습니까?
해결책
클래스 로더에서 FindResource를 호출하고 어디에서 왔는지 알아내는 URL을 구문 분석 할 수 있습니다.
다른 팁
다음 스 니펫이 작동해야합니다.
obj.getClass().getProtectionDomain().getCodeSource().getLocation().toString()
GetProtectionDomain 또는 GetCodesource를 호출 할 때 NULL에 대한 수표를 추가하고 모든 프로덕션 코드에서 적절하게 처리해야합니다. (클래스 로더, 보안 등에 따라 다릅니다)
매개 변수를 설정하십시오
-verbose:class
항아리/클래스를 사용하여 실행할 때 자바 그리고 그것은 당신에게 그것이로드하는 클래스와 그 기원을 완전히 줄이게 할 것입니다.
[Opened /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/sunrsasign.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/jsse.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/jce.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/charsets.jar]
[Loaded java.lang.Object from /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
[Loaded java.io.Serializable from /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
그것은 당신이 원하는 클래스/항아리를 찾기 위해 알아야 할 모든 것을 줄 것입니다.
제휴하지 않습니다 StackOverflow