2010-12-16 98 views
1

我在一些程序中使用HtmlUnit,並且我總是有問題,無論何時使用它,我必須添加從HtmlUnit網站下載的所有文件(庫),以便jar文件我得到的總是10 MB。確定使用的庫,以減少JAR文件的大小

這些是我添加的文件:

alt text

但在大多數我的節目,我只包括此:

import com.gargoylesoftware.htmlunit.Page; 
import com.gargoylesoftware.htmlunit.RefreshHandler; 
import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.html.*; 

我通常只使用Web客戶端和HTML元素(HtmlForm控件,HTMLTABLE等等),所以我覺得很奇怪,我需要所有這些。

我的問題是如果我可以減少包含的庫的數量,或者更好,我怎麼才能確定我包含的庫根本沒有被使用。

回答

3

如果需要或者不需要,你真的想檢查所有添加的類的所有類嗎?

恕我直言,這是一個程序工作。一個流行的開源程序是ProGuard

一般的ProGuard被稱爲混淆(在類文件重命名一切,所以,瞭解反編譯的類是困難的),但它可以在不混淆使用參數-dontobfuscate時使用。此外,我建議您也使用-dontoptimize參數。

如果你在你的大胖JAR上運行ProGuard,你會得到一個更小的。

如果您有興趣,我可以發佈一個ant構建文件的一小部分,顯示如何配置和調用ProGuard。

+0

如果庫使用反射來創建某些類,該怎麼辦? proguard如何處理這個問題? – 2010-12-16 15:55:02

+0

動態加載的類由包含完全限定類名稱的字符串檢測。可以指定通過反射訪問的方法和字段,以便它們不會被刪除。 – Robert 2011-06-17 12:13:07

1

您不僅要考慮直接使用的類,還要考慮它們的所有依賴關係。你將不得不追查整個對象圖來找出沒有被調用的東西。

1

我知道JBoss Tattletale,但我還沒有嘗試過自己。

請記住,只有在某些代碼運行期間纔可以訪問庫(例如,取決於輸入),因此很難確定是否需要庫。

如果您擺脫了一些庫,您的應用程序現在可能會工作,但在另一個輸入上失敗,或者在您的下一個版本中以不同方式開始使用HtmlUnit時失敗。現在10 MB並非如此,所以也許擺脫一些瓶子是不值得的。

+0

對於移動應用程序,10MB可能仍然很重要;我同意你的桌面或LAN託管的網絡應用程序。 – duffymo 2010-12-16 16:04:30

+0

當然,你是對的。因爲我對oli206的環境或要求一無所知,所以我只是提出一個建議(並且在我的措辭中使用了很多maybes)。 – 2010-12-16 16:11:32