2009-01-24 6 views

답변

9

halting problem으로 입증 되었 듯이 특정 클래스가 사용되거나 사용되지 않는다고 명확히 말할 수는 없습니다. 최소한 중간 정도 복잡한 응용 프로그램에. 왜냐하면 클래스는 컴파일시 바인딩되는 것이 아니라로드 될 수 있기 때문입니다.

  • XML 구성 (예 : Spring)을 기반으로합니다.
  • 속성 파일 (예 : JDBC 드라이버 이름)에서로드됩니다.
  • 은 주석과 함께 동적으로 추가됩니다.
  • 외부 입력 (예 : 사용자 입력, 데이터베이스의 데이터 또는 원격 프로 시저 호출)의 결과로로드 됨.

그러니 그냥 소스 코드를보고하는 것만으로는 충분없는 등. 즉, 합리적인 IDE라면 의존성 분석 도구를 제공 할 것입니다. IntelliJ가 확실히합니다.

실제로 필요한 것은 응용 프로그램이 수행하는 작업에 대한 런타임 계측이지만 보장되지는 않습니다. 결국, 이상한 조합의 입력으로 인해 특정 코드 경로가 천만 회 실행될 수 있으므로 사용자가 보상받을 수 있다고 보장 할 수는 없습니다.

이와 같은 도구에는 약간의 가치가 있습니다. Emma과 같은 것을보고 싶을 수도 있습니다. Yourkit과 같은 프로파일 러는 코드 덤프를 제공하여 분석을 수행 할 수도 있습니다 (일시적인 객체를 굉장히 잘 선택하지는 않지만).

개인적으로 나는 IDE가 당신에게 말할 것입니다 : 사용하지 않는 JAR을 제거하는 것 이상의 작은 가치를 발견했습니다. 그보다 더 세분화 된 것은 아무런 이득도 얻지 못하는 문제를 요구하는 것입니다.

+0

클래스를 동적으로로드하지 않으면 어떻게됩니까? 즉, XML 설정, 속성 파일, 주석, rpc 및 기타 등등이 없습니다. 그렇다면 그러한 도구는 작동하도록 보장 할 수 있습니까? – Pacerier

3

당신은 JarJar http://code.google.com/p/jarjar/

그것은 단지 종속성을 트림을 시도 할 수 있습니다.

+0

특히 뚱뚱한 항아리와 단지 코드의 항아리를 만듭니다. 'java -jar jarjar.jar find class code.jar fat.jar'을 사용하여 종속성을 나열합니다. 이것을 기반으로 "keep"구문의 rules 파일을 생성 한 다음, fat jar 파일을 최소화 된 jar 파일로 처리 할 수 ​​있습니다. –

4

예, 당신은 ProGuard을 원합니다. 완전히 무료 Java 코드 축소 기 및 obfuscator입니다. 구성하고, 빠르고 효과적입니다.

+1

참조가 검색 될 올바른 '루트'클래스 목록을 제공하고 리플렉션에서 사용하는 클래스를 잊어 버리지 않도록하십시오. –

0

대부분의 경우 javac 만 사용하면 아주 쉽게 할 수 있습니다.

기존 클래스 파일을 삭제합니다. 입력 클래스 이름으로 javac를 호출하십시오. 필요한 수업을 컴파일하지만 더 이상은하지 않습니다. 작업 완료.

+0

나는 OP가 자신의 클래스뿐만 아니라 라이브러리도 의미한다고 생각합니다. – Chii

+0

오픈 소스 사용! –