이 항아리에서 .class 파일을 검색 할 수있는 모든 jar 경로를 가져오고 싶습니다. App 메인 폴더 아래에서 모든 jar 파일을 검색하는 기능을 작성했지만 문제가 발생했습니다. 일부 jar 번들은 존재하지만 OSGi에서 사용하지 않고 이전 버전입니다. xxxx_1.0.0.jar과 xxxx_1.2.0.jar는 모두 존재하지만 OSGi는 1.2.0 만 사용합니다. 메인 폴더에서 검색하면 결과 목록에 표시됩니다.OSGi에서 사용하는 모든 jar 경로를 얻는 방법은 무엇입니까?
그래서 OSGi에서 사용하는 모든 jar 파일을 가져 오는 방법이 있습니까? 그런 다음 사용하지 않은 jar 파일을 필터링 할 수 있습니다. 감사
추가됨 : 나는 모든 번들 절대 URL을 얻기 위해이 방법을 사용하려고했으나 실패 : 출력이 반복 다음의
StringBuffer sb = new StringBuffer();
Bundle[] bundles = com.ibm.director.services.storage.debugtool.Activator.context.getBundles();
for (Bundle bundle : bundles) {
java.net.URL url = bundle.getClass().getProtectionDomain().getCodeSource().getLocation();
sb.append("File:" + url.getFile() + ", Path:" + url.getPath() + "\n");
}
그러나 백 번 :
File:/opt/ibm/director/lwi/runtime/core/eclipse/plugins/org.eclipse.osgi_3.4.3.R34x_v20081215-1030-RCP20120203-1500.jar
File:/opt/ibm/director/lwi/runtime/core/eclipse/plugins/org.eclipse.osgi_3.4.3.R34x_v20081215-1030-RCP20120203-1500.jar,
File:....
사용 된 번들 수 : 588, 올바른 것일 수 있으며 API에서 절대 번들 경로를 가져올 수 있지만 모두 동일한 이유는 무엇입니까? 어떻게하면 실제 경로를 얻을 수 있습니까?
달성하고자하는 것을 설명해 주시겠습니까? 클래스 파일에서 무엇을 검색하고 싶습니까? 그 이유는 무엇입니까? –
@Christian Schneider classname이 사용자가 입력 한 런타임 .class를 디 컴파일하려고합니다. 구현 방법은 OSGi 환경에서 모든 항아리를 모으고이 클래스를 검색하는 것입니다. 실제로 xxx_1.2.0과 xxx_1.0.0 모두이 파일을 포함하지만 xxx_1.2.0 만 사용됩니다. 나는 단지 사용 된 것을 디 컴파일하려고한다. – JerryCai
언젠가 전에 비슷한 질문을 한 것을 기억합니다. OSGi에서 동일한 클래스 이름이 다른 번들에서 나올 수 있으므로 다른 버전을 동시에 사용할 수 있습니다. 따라서 클래스의 소스를 알고 싶으면 클래스를 보는 번들/클래스 로더를 지정해야합니다. 거기에서 클래스가로드 된 항아리 패키지 배선에서 찾을 수 있습니다. –