제네릭 매개 변수화 및 로컬 변수 유형에 사용되는 클래스를 포함하여 Java 클래스의 모든 종속성을 가져 오려고합니다. 지금까지 내가 찾은 최고의 프레임 워크는 아파치 bcel입니다. 그것을 사용하여 바이트 코드에서 모든 필드, 메서드 인수 및 로컬 변수를 쉽게 찾을 수 있습니다. 기본적으로 제네릭 및 지역 변수 유형을 제외한 모든 것. 예를 들어, 라인 List<Point> points = new ArrayList<Point>();
에서 하나의 종속성을 찾을 수 있습니다 - 배열을 사용하여 JavaClass.getConstantPool()
bcel에서 ArrayList. List 인터페이스도 Point 클래스도 감지 할 수 없습니다. 나는 또한 tattletale와 CDA를 불행히도 성공하지 못했습니다 (같은 결과). 수입을 검사하는 것만으로는 충분하지 않습니다. 동일한 패키지의 의존성이 필요하며 와일드 카드를 허용하지 않습니다. 어떤 도움을 주셔서 감사합니다.Java 클래스의 모든 종속성 찾기
답변
나는 결국 해결책을 찾았습니다. ASM Bytecode Framework
은 올바른 도구입니다. 공식 tutorial과 오른쪽 example을 사용하면 필요한 모든 의존성을 쉽게 얻을 수 있습니다. 이 예에서는 이미 원하는 방문자의 클래스 DependencyVisitor
이 있습니다. 올바른 서식을 얻으려면 나는 단지 하나의 방법 DependencyVistitor
의 예제 코드를 변경했다, 그래서 그것은 단지 패키지 대신 전체 클래스 이름을 추가합니다
private String getGroupKey(String name)
{
//Just comment that block so you can get full class names instead of package only
/*
int n = name.lastIndexOf('/');
if (n > -1)
{
name = name.substring(0, n);
}
*/
// Replace resource char with package separator char
packages.add(name.replace("/", "."));
//packages.add(name);
return name;
}
가
DependencyVisitor
코드를 보면 쉽게 그것이 무엇을 이해하고 그것을 수정할 수 있습니다 필요합니다. 그것을 예제 클래스에서 실행하면 멋지고 유용한 결과를 얻을 수 있습니다 :
[java.util.ArrayList, java.lang.Object, java.util.List, java.awt.Point, goobar.test.asmhello.TestClass, java.lang.String, java.lang.Integer, java.awt.Graphics, goobar.test.asmhello.TestClass2]
. 여기에는 사용 된 모든 클래스와 인터페이스 및 제네릭 매개 변수화에 사용되는 모든 유형이 포함됩니다.
완벽하고 이러한 문제가 발생하지 않았지만 일반적으로 특수 효과로 식별 할 수 있지만 멋지다. –
예제 코드는 [here] (http://websvn.ow2.org/listing.php?repname=asm&path)로 옮겼습니다. = % 2Ftrunk % 2Fasm % 2Fexamples % 2F dependencies % 2Fsrc % 2Forg % 2Febjectweb % 2Fasm % 2Fdepend % 2F). – seanf
- 1. 단일 클래스의 모든 종속성 찾기
- 2. 모든 db에서보기 종속성 찾기
- 3. 종속성 찾기 및 종속성
- 4. 프로젝트에서 클래스의 모든 인스턴스화 찾기
- 5. Java 프로그램이 리플렉션을 사용하여로드하는 모든 클래스의 이름 찾기
- 6. 관계의 모든 다중 값 종속성 찾기
- 7. 저장된 프로 시저 목록의 모든 종속성 찾기
- 8. java : 클래스의 모든 변수 이름을 얻으십시오.
- 9. 특정 Java 클래스의 파일 경로 찾기
- 10. 클래스의 종속성 시각화
- 11. 가능한 모든 경로 찾기 Java
- 12. 클래스의 모든 인스턴스에서 변수 값 찾기
- 13. jQuery 특정 클래스의 모든 요소 찾기
- 14. 찾기 종속성 패키지 관리자
- 15. WebApiConfig 클래스의 종속성 삽입
- 16. 템플릿 클래스의 순환 종속성
- 17. 클래스의 데이터 종속성
- 18. 기능 종속성 찾기
- 19. dll 종속성 찾기
- 20. maven 종속성 찾기 "com.sun.javadoc"
- 21. 런타임에 클래스 패스에서 데이터를로드하는 Java 클래스의 데이터 종속성 관리
- 22. 종속성 제어 논리 제어 - 순환 종속성 찾기
- 23. SQL Server 2005의 종속성 찾기
- 24. Java 코드의 가져 오기 문에서 Maven 종속성 또는 Repo 찾기
- 25. 한 클래스의 모든 종속성 클래스 이름을 찾는 방법은 무엇입니까?
- 26. 프로그래밍 방식으로 Java 클래스의 모든 메서드 호출
- 27. 클래스의 모든 객체에 영향을주는 방법은 무엇입니까? (Java)
- 28. Java 클래스의 모든 객체를 쉽게 초기화하는 방법
- 29. 도메인 클래스의 자동 연결 종속성
- 30. 다른 클래스의 GetValue 종속성 속성
런타임시 바이트 코드에서이 작업을 수행하려고합니까? 컴파일 시간? –
모든 정적 종속성 (런타임이 아님)을 찾고 싶습니다. 아마도 바이트 코드를 읽는 것이 최선의 방법 일 것입니다. 하지만 소스 코드를 파싱 해 볼 수는 있습니다. (단지 최선의 아이디어로 보이지 않고 그 해결책을 찾지 못했습니다.) – goobar
모든 소스 종속성이 클래스 파일 (메소드 내의 일반 유형, 인라인 상수)에 있어야 할 필요는 없습니다. 알맞은 텍스트 편집기 나 유닉스'strings'에서 클래스 파일을보십시오. –