문제

모범 사례는 아닐 수도 있지만 타사의 jar 파일에서 사용하지 않는 클래스를 제거하는 방법이 있습니까?내 수업이 라이브러리를 사용하는 방식을 살펴보고 일종의 적용 범위 분석을 수행한 다음 손대지 않은 모든 클래스가 제거된 또 다른 병을 뱉어내는 것입니다.

분명히 여기에는 문제가 있습니다.특히, 제가 제시한 사용 시나리오에서는 모든 클래스를 항상 사용하지 않을 수도 있습니다.

그런데 이러한 문제를 무시하고 원칙적으로 할 수 있을까?

도움이 되었습니까?

해결책

방법이 있습니다.

JarJar 프로젝트는 이 AFAIR를 수행합니다.JarJar 프로젝트의 첫 번째 목표는 필요한 경우 패키지 구조를 변경하여 자신의 jar에 타사 라이브러리를 포함할 수 있도록 하는 것입니다.그렇게 하면 필요하지 않은 클래스를 제거할 수 있습니다.

에서 확인해보세요 http://code.google.com/p/jarjar/.

다음은 항아리 축소에 대한 링크입니다. http://sixlegs.com/blog/java/jarjar-keep.html

다른 팁

Ant에는 classfileset이라는 도구가 있습니다.필요한 루트 클래스 목록을 지정하면 클래스 파일 세트가 해당 코드를 재귀적으로 분석하여 모든 종속성을 찾습니다.

또는 필요한 모든 기능을 실행하는 좋은 테스트 모음을 개발한 다음 테스트 적용 범위 도구에서 테스트를 실행할 수 있습니다.이 도구는 어떤 클래스(및 그 안의 명령문)가 실제로 활용되었는지 알려줍니다.이렇게 하면 정적 분석으로 찾을 수 있는 것보다 훨씬 더 작은 코드 세트를 얻을 수 있습니다.

나는 사용한다 프로가드 이를 위해.뛰어난 난독 처리기일 뿐만 아니라 여러 JAR을 결합한 다음 사용하지 않는 클래스나 클래스 멤버를 제거할 수 있는 코드 축소 단계도 있습니다.그것은 훌륭한 축소 작업.

이전 작업에서는 코드를 난독화할 뿐만 아니라 사용되지 않는 클래스와 메소드도 제거하는 Java 난독처리기를 사용했습니다."Class.byName" 또는 다른 유형의 리플렉션 작업을 수행하는 경우 난독처리기에 알려야 합니다. 왜냐하면 리플렉션에 의해 어떤 클래스나 메서드가 호출되는지 코드를 검사하여 알 수 없기 때문입니다.

물론 문제는 타사 라이브러리의 다른 부분이 리플렉션을 수행하는지 알 수 없기 때문에 "사용되지 않는" 클래스를 제거하면 테스트하지 않은 모호한 경우에 문제가 발생할 수 있다는 것입니다.

jar는 zip 파일이므로 가능하다고 생각합니다.소스에 접근할 수 있으면 더 깨끗합니다.클래스를 분해해 볼까요?

이 질문에 덧붙여, 이것이 성능을 향상시킬 수 있습니까?사용되지 않은 클래스는 JIT 컴파일되지 않아 시작 시간이 향상됩니까? 아니면 Java가 바이트코드로 컴파일하는 동안 이를 자동으로 감지하고 사용되지 않는 코드도 처리하지 않습니까?

이것은 흥미로운 프로젝트가 될 것입니다. (이미 수행한 사람이 있습니까?)

나는 도구에 항아리를 시작점으로 제공하고 라이브러리 항아리를 정리할 것이라고 가정합니다.리플렉션을 사용하여 jar가 직접 참조하는 클래스와 호출 트리에서 간접적으로 사용되는 클래스를 결정할 수 있습니다(전혀 사소하지는 않지만 실행 가능함).두 위치 중 하나에서 반사 코드를 발견하면 매우 큰 소리로 경고해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top