2012-06-25 2 views
2

~ 10 개의 외부 라이브러리를 사용하는 애플릿을 작성하고 있습니다. 그들은 함께 2 메가 바이트 이상을 차지합니다. 일부 라이브러리에서는 1-2 클래스 만 사용하므로 다른 많은 라이브러리도 안전하게 삭제할 수 있습니다. 그래서 문제는 jar 라이브러리에서 사용되지 않는 클래스를 제거하는 것입니다.외부 java 라이브러리를 축소하는 방법은 무엇입니까?

다른 많은 질문이 Proguard에 연결됩니다. 그러나 라이브러리를 처리하지 못하거나 (내가 잘못된 것을하고 있습니다.) 또한 리플렉션을 사용하는 코드의 일부를 파괴합니다.

+0

외부 라이브러리에서 파일을 삭제하려면 외부 라이브러리의 클래스가 종속적이면 지루한 과정이라고 생각합니다. 불필요한 요소를 제거하고 ClassNotFoundException과 같은 불만 사항이 있으면 추가 할 수 있습니다. AFAIK, 프로 가드가 클래스 파일을 숨겨 줘서 불필요한 클래스를 제거하지는 않습니다. – kosa

답변

1

당신은 maven-shade-plugin을 사용하여 코드와 libs를 결합한 최소화 된 jar 파일을 빌드 할 수 있습니다.

0

ClassDep과 같은 것을 사용합니다. 이는 어떤 클래스를 사용할지 정적으로 식별합니다.

그러나 쉽게 이것을 속일 수 있습니다. 코드의 일부가 포함 상상 :

Class.forName(className); 

그래서 동적으로 클래스 명을 구축하고 그 클래스를로드 할 수 있습니다. ClassDep과 같은 도구는 이러한 사례를 식별 할 수 없기 때문에 수축 된 병에 대한 포괄적 인 테스트를 수행해야합니다.

0

JAR 파일을 "압축 해제"하고 원하는 클래스 만 가져 와서 사용자 정의 아카이브에 저장할 수 있습니다. Brian A.은 이러한 수업 및 몇 가지주의 사항을 식별하는 방법에 대한 좋은 제안을했습니다. 난 당신이 라이센스를 위반하는 수도 추가 할 수 있습니다 ...

1

ProGuard는 라이브러리와 함께 코드를 처리 할 수 ​​있습니다 (-injars 옵션 사용). 처리하지 않으려는 외부 라이브러리를 계속 보관할 수 있습니다 (-libraryjars 옵션 사용).

자동 축소 도구는 반사에 문제가 있습니다. ProGuard는 몇 가지 기본 리플렉션을 인식하고 리플렉션을 위해 보존해야하는 내부 API 부분을 지정할 수 있습니다. ProGuard는 몇 가지 강력한 구성을 지원하지만 라이브러리에 반영되는 정도에 따라 시행 착오가 필요할 수 있습니다.