Определите используемые библиотеки, чтобы уменьшить размер файла JAR - PullRequest
1 голос
/ 16 декабря 2010

Я использую HtmlUnit в некоторых программах, и у меня всегда возникает проблема, что всякий раз, когда я его использую, мне нужно добавлять все файлы (библиотеки), которые я скачал с веб-сайта HtmlUnit, чтобы файл jar, который я получаю, всегда составлял 10 МБ.

Это файлы, которые я добавляю:

alt text

Но в большинство моих программ я включаю только это:

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

Я обычно использую только WebClient и HtmlElements (HtmlForm, HtmlTable и т. Д.), Поэтому я нахожу странным, что они мне нужны.

У меня вопрос: могу ли я уменьшить количество включенных библиотек или, может быть, лучше, как определить, какие библиотеки, которые я включаю, вообще не используются?

Ответы [ 3 ]

3 голосов
/ 16 декабря 2010

Вы действительно хотите проверить все классы всех добавленных библиотек, нужны они или нет?

ИМХО, это работа для программы. Одной из популярных программ с открытым исходным кодом для этого является ProGuard .

Обычно ProGuard известен как obfuscator (переименуйте все в файлах классов, чтобы понимание декомпилированных классов было сложным), но его можно использовать без запутывания при использовании параметров -dontobfuscate . Кроме того, я предлагаю вам также использовать параметр -dontoptimize .

Если вы запустите ProGuard на своем большом толстом JAR, вы получите гораздо меньший.

Если вам интересно, я могу опубликовать небольшую часть файла сборки ant, в которой показано, как настроить и вызвать ProGuard.

1 голос
/ 16 декабря 2010

Я знаю о JBoss Tattletale , но я сам не пробовал.

Имейте в виду, что библиотека может быть доступна только во время определенных прогонов кода (например, в зависимости отвходной сигнал), поэтому очень трудно быть уверенным в том, что библиотека может понадобиться.

Если вы избавитесь от некоторых библиотек, ваше приложение может работать сейчас, но не работать на другом входе или произойдет сбой привы начнете использовать HtmlUnit по-другому в вашем следующем выпуске.В настоящее время 10 МБ - это не так много, поэтому, возможно, избавиться от некоторых банок не стоит.

1 голос
/ 16 декабря 2010

Вы должны принять во внимание не только класс, который вы используете напрямую, но и все их зависимости. Вам нужно будет отследить весь граф объектов, чтобы выяснить, что не называется.

...