어떤 클래스가 앱에 의해 효과적으로 사용되었거나 더 좋을지라도 JAR 라이브러리를 자동으로 트리밍하여 참조 및 사용되는 클래스 만 제공하는 도구가 있습니까?Java 프로그램에서 어떤 클래스를 사용하는지 확인하는 방법은 무엇입니까?
답변
halting problem으로 입증 되었 듯이 특정 클래스가 사용되거나 사용되지 않는다고 명확히 말할 수는 없습니다. 최소한 중간 정도 복잡한 응용 프로그램에. 왜냐하면 클래스는 컴파일시 바인딩되는 것이 아니라로드 될 수 있기 때문입니다.
- XML 구성 (예 : Spring)을 기반으로합니다.
- 속성 파일 (예 : JDBC 드라이버 이름)에서로드됩니다.
- 은 주석과 함께 동적으로 추가됩니다.
- 외부 입력 (예 : 사용자 입력, 데이터베이스의 데이터 또는 원격 프로 시저 호출)의 결과로로드 됨.
- 는
그러니 그냥 소스 코드를보고하는 것만으로는 충분없는 등. 즉, 합리적인 IDE라면 의존성 분석 도구를 제공 할 것입니다. IntelliJ가 확실히합니다.
실제로 필요한 것은 응용 프로그램이 수행하는 작업에 대한 런타임 계측이지만 보장되지는 않습니다. 결국, 이상한 조합의 입력으로 인해 특정 코드 경로가 천만 회 실행될 수 있으므로 사용자가 보상받을 수 있다고 보장 할 수는 없습니다.
이와 같은 도구에는 약간의 가치가 있습니다. Emma과 같은 것을보고 싶을 수도 있습니다. Yourkit과 같은 프로파일 러는 코드 덤프를 제공하여 분석을 수행 할 수도 있습니다 (일시적인 객체를 굉장히 잘 선택하지는 않지만).
개인적으로 나는 IDE가 당신에게 말할 것입니다 : 사용하지 않는 JAR을 제거하는 것 이상의 작은 가치를 발견했습니다. 그보다 더 세분화 된 것은 아무런 이득도 얻지 못하는 문제를 요구하는 것입니다.
당신은 JarJar http://code.google.com/p/jarjar/
그것은 단지 종속성을 트림을 시도 할 수 있습니다.
특히 뚱뚱한 항아리와 단지 코드의 항아리를 만듭니다. 'java -jar jarjar.jar find class code.jar fat.jar'을 사용하여 종속성을 나열합니다. 이것을 기반으로 "keep"구문의 rules 파일을 생성 한 다음, fat jar 파일을 최소화 된 jar 파일로 처리 할 수 있습니다. –
예, 당신은 ProGuard을 원합니다. 완전히 무료 Java 코드 축소 기 및 obfuscator입니다. 구성하고, 빠르고 효과적입니다.
참조가 검색 될 올바른 '루트'클래스 목록을 제공하고 리플렉션에서 사용하는 클래스를 잊어 버리지 않도록하십시오. –
대부분의 경우 javac 만 사용하면 아주 쉽게 할 수 있습니다.
기존 클래스 파일을 삭제합니다. 입력 클래스 이름으로 javac를 호출하십시오. 필요한 수업을 컴파일하지만 더 이상은하지 않습니다. 작업 완료.
나는 OP가 자신의 클래스뿐만 아니라 라이브러리도 의미한다고 생각합니다. – Chii
오픈 소스 사용! –
클래스를 동적으로로드하지 않으면 어떻게됩니까? 즉, XML 설정, 속성 파일, 주석, rpc 및 기타 등등이 없습니다. 그렇다면 그러한 도구는 작동하도록 보장 할 수 있습니까? – Pacerier