2012-06-25 30 views
2

我正在寫一個applet,它使用~10個外部庫。他們一起佔用超過2兆字節。在一些庫中,我們只使用1-2個類,所以很多其他類可以安全地刪除。所以問題是如何從jar庫中刪除未使用的類?如何縮小外部java庫?

很多其他問題鏈接到Proguard。但它不處理庫(或者我做錯了什麼),也毀掉了使用反射的代碼的一部分。

+0

如果你想從外部庫中刪除文件,如果外部庫中的類是相關的,我覺得這是一個單調乏味的過程。可能是你可以開始刪除不必要的,並添加如果有任何投訴,如ClassNotFoundException。 AFAIK,proguard隱藏你的類文件,這並不意味着它刪除了不必要的類。 – kosa

回答

1

你可以使用maven-shade-plugin,並告訴它建立一個最小化的jar文件,結合你的代碼和libs。

0

可能使用類似ClassDep,它靜態地標識你將使用哪些類。

然而,它可以很容易地欺騙這個。想象一下你的一些代碼包含:

Class.forName(className); 

所以你可以動態地構建一個類名並加載那個類。諸如ClassDep之類的工具無法識別這些情況,因此您需要對縮小的罐子進行全面測試。

0

您可以簡單地「解壓縮」JAR,只需從每個類中選擇需要的類,然後將它們放置在自定義存檔中。 Brian A.對如何識別這些類和一些警告給出了很好的建議。我會添加他們,你可能會違反許可以及...

1

ProGuard可以將您的代碼與庫一起處理(使用選項-injars)。您仍然可以保留您不想處理的外部庫(使用選項-libraryjars)。

任何自動收縮工具都會遇到反射問題。 ProGuard可以識別一些基本的反射,並且允許您指定爲了反思而保留的內部API的部分。 ProGuard支持一些強大的配置,但取決於庫中的反射量,它可能仍然需要反覆試驗。