JVM에서로드 한 모든 Java 패키지의 이름을 가져와야합니다. 이것은 IDE에있는 것과 같은 패키지 브라우저를 표시합니다. ClassLoader 클래스의 보호 된 "패키지"필드에 액세스하여 현재 클래스 로더와 해당 조상의 패키지 목록을 가져올 수 있습니다. 하지만 그들은 자신의 클래스 로더를 가지고 다른 웹 애플 리케이션에 의해로드 된 패키지를 얻을 수 없습니다. Weblogic 서버에서 이것을 테스트하고 있습니다JVM에 의해로드 된 모든 패키지 이름 목록을 얻는 방법
답변
getParent()
을 사용하여 클래스 로더의 트리를 탐색하고 ClassLoader를 확장하는 모든 클래스를 찾고 현재 인스턴스를 모두 찾습니다 (디버그 API가 도움이 될 것입니다). 하지만 보안 정책 때문에 웹 서버에서는 작동하지 않습니다 (웹 앱은 서로 엿볼 수 없습니다).
Tomcat의 경우 모든 클래스가로드 될 때 기록 할 수있는 옵션이 있습니다. 이렇게하면 서버 속도는 상당히 느려지지만 개발 서버에서는 옵션 일 수 있습니다.
그건 그렇고, 왜 내가 필요한지 궁금합니다. 가장 간단한 해결책은 jar tvf
으로 앱이 가져 오는 모든 JAR 파일을 나열하고 경로의 마지막 부분 (클래스 파일)을 제거하는 것입니다.
Weblogic 보안 모델의 예상되는 동작은 다른 웹 응용 프로그램의 클래스 로더에 액세스 할 수 없다는 것입니다. 이것은 실제로 얻을 수있는 것이 아닙니다. 자세한 내용은 this article을 참조하십시오.
나는 또한 그가 무슨 일을하는지 궁금해. 어쩌면 그는 다른 사람들의 웹 앱을 보안 구멍으로 스캔하는 방법을 찾으려고 할 것입니다. –
그는 몇몇 라이브러리가 어떤 라이브러리를 사용하고 있는지 파악하려고 노력 중일 수도 있습니다. JMX 관리자가 이런 종류의 정보를 찾을 수 없습니까? – ThaDon
나는 정말로 확신 할 수 없다 - 만약 그들이 할 수 있다면 게시해라, 나는 분명히 나의 표를 가질 것이다. – stevedbrown
내가 이것을 할 수있는 유일한 방법은 각 webapp을 수정하여로드 된 클래스 정보에 대한 각각의 요청을 보낼 수 있도록하는 것입니다. 그런 다음 기존 웹 응용 프로그램의 응답을 결합하여 표시 할 수있는 새로운 웹 응용 프로그램을 만들 수 있습니다.
멋진 UI에서이 정보가 필요하지 않다면 Sun JVM에는 클래스 로딩과 관련된 내용을 보여주는 -XX vm 옵션이 있습니다.
http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
내가하는 JRockit에 익숙한 아니에요하지만 비슷한 옵션을 가지고 있지 않은 경우에 나는 놀랠 것입니다.
좋아요. Weblogic에서이 기능을 사용할 수있었습니다. 다시 한 번 내 목표는 주어진 WebLogic 서버에 전개 된 모든 애플리케이션에서 Java 패키지 이름을 얻는 것이 었습니다. 왜? 내 이유가 있었어 :)
먼저 모든 배포 된 응용 프로그램의 귀, 전쟁 또는 jar 파일 위치를 확보해야합니다. 이를 위해 WebLogic에서 AppDeployment MBeans를 가져 와서 아래와 같이 반복합니다. 우리가 전쟁, 귀, 항아리 또는 폭발 폴더의 경로를 얻을 모든 작업을 수행하는 PackageFinder 클래스의 findPakages 방법에 전달 위의 코드에서
Set<ObjectName> set = utils.getConfigMBeansByType("AppDeployment");
for (ObjectName objectName : set) {
String name = objectName.getKeyProperty("Name");
if (!appCache.contains(name)) {
//System.out.println("Config bean: " + objectName);
Object path = utils.getPropertyValue(objectName,
"AbsoluteSourcePath");
//System.out.println("Path: " + path);
if(path != null){
PackageFinder finder = new PackageFinder();
packages.addAll(finder.findPackages(path.toString()));
}
appCache.add(name);
}
}
.
public Set<String> findPackages(String path){
File file = new File(path);
if(file.exists() && file.isFile()){
InputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(file));
if(path.toLowerCase().endsWith(".war")){
processWar(in);
}else if(path.toLowerCase().endsWith(".ear")){
processEar(in);
}/*
Rest of the method body removed, I guess you get the idea
*/
return packageNames;
}
public void processJar(InputStream in){
ZipInputStream zin = null;
try {
zin = new ZipInputStream(in);
ZipEntry entry;
while((entry = zin.getNextEntry()) != null){
if(entry.getName().endsWith(".class")){
addPackage(entry.getName());
}
}
} catch (Exception e) {
}
}
주 : 이것은 JVM에서로드 된 모든 클래스의 패키지 이름을 리턴하지 않습니다. 내 목적에 부합하는 WebLogic 서버에서 배포 된 모든 응용 프로그램과 함께 번들로 제공되는 클래스의 모든 패키지 이름을 반환합니다. – maneesh
- 1. Git의 저장소에있는 모든 blob 목록을 얻는 방법
- 2. Delphi - 디렉토리의 모든 파일 목록을 얻는 방법
- 3. SharePoint의 모든 사용자 목록을 얻는 방법
- 4. 패키지 이름 얻기
- 5. JVM에 포함 된 기능
- 6. VB6를 사용하여 디렉토리의 모든 파일 이름 목록을 얻는 방법은 무엇입니까?
- 7. 배송 업체의 모든 패키지 목록을 얻으십시오
- 8. Go에 설치된 모든 패키지 목록을 얻으십시오
- 9. 참조 된 어셈블리에서 모든 유형을 얻는 방법?
- 10. JVM에 전달 된 주 클래스/jar 파일 이름 검색
- 11. SQL Server의 XML 값에서 요소 이름 목록을 얻는 방법
- 12. XeTeX에서 사용 가능한 모든 (TTF-) 글꼴 목록을 얻는 방법?
- 13. Linq to Sql을 사용하는 열 이름 목록을 얻는 방법
- 14. 이름 목록을 얻는 방법 + 다른 테이블의 이름과 관련된 항목 수
- 15. getResourceAsStream에 의해로드 된 리소스를 다시로드하십시오.
- 16. ResourceDictionary에 의해로드 된 StaticResource를 반복하십시오.
- 17. Android에서 언어 목록을 얻는 방법
- 18. joomla 언어 목록을 얻는 방법
- 19. FormView에서 사용되는 EntityDataSource에 의해로드 된 모든 Entity 속성이 없음
- 20. symfony에서 모듈 목록을 얻는 방법
- 21. 이클립스 보여주는 패키지 이름
- 22. py2app : __import__에 의해로드 될 모듈을 포함시키는 방법?
- 23. mootools에있는 요소의 모든 자손 목록을 얻는 것
- 24. jar 파일의 패키지 정보를 얻는 방법
- 25. 특정 컴퓨터의 SqlInstances 목록을 얻는 방법
- 26. 모든 Oracle E-Business Suite 11i 보고서 목록을 얻는 방법
- 27. Google App Engine - 모든 앱 관리자 목록을 얻는 방법?
- 28. C#에서 모든 SQl 데이터 유형의 목록을 얻는 방법?
- 29. drupal bootstrap 스크립트 : x 유형의 모든 노드 목록을 얻는 방법?
- 30. asp.net mvc 프로젝트 내의 모든 페이지 목록을 얻는 방법
Package.getPackages()가 더 일반적입니다. –