문제

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]

그것은 당신이 원하는 클래스/항아리를 찾기 위해 알아야 할 모든 것을 줄 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top