2012-04-30 20 views
4

Есть ли способ уменьшить размер файла jar?Уменьшить размер файла jar

Я хочу инструмент, который уменьшает неиспользуемые зависимости.

Я использую maven для управления зависимостями.

Любая помощь будет оценена по достоинству.

+0

Что вы подразумеваете под «неиспользуемыми зависимостями»? В твоем собственном пом или чуме других? – khmarbaise

+0

В моем собственном pom я включил httpclient apache, который составляет около 350kb.in в его файле pom, он имеет зависимости от других файлов. Мне нужен инструмент, который уменьшает неиспользуемые классы из jar и уменьшает файл jar. –

+0

Если httpclient содержит зависимости, которые не используются, вы можете использовать исключение в своем pom, чтобы исключить транзитивные зависимости. – khmarbaise

ответ

5

Файл JAR обычно не содержит зависимостей в смысле Maven. Таким образом, вы должны говорить о:

  • войны или EAR или аналогичный файл,
  • так называемый UberJAR файл, созданный путем объединения множество JAR-файлов; например с использованием плагина Maven shade или
  • зависимостей при более тонкой детализации, чем модули Maven.

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

Для последнего может потребоваться отдельный инструмент для последующей обработки файла JAR. Избавление от неиспользуемых классов - это то, что может сделать обфускатор. Однако вам нужно быть осторожным, чтобы не исключать классы или имена классов, которые используются рефлексивно; например с помощью структуры DI/IoC или структуры AOP.

(В общем, этот инструмент пытается выяснить, какие классы используются при анализе зависимостей, подразумеваемых внешними ссылками .class. DI/IoC/AOP и т. Д. Представляют другие виды зависимости, которые не очевидны в структура файла .class.)

1

pack200 может значительно уменьшить размер JAR. Но его трудно использовать с Maven и невозможно использовать с контейнером EE.

Почему у вас неиспользуемые зависимости?

+1

У меня есть файл jar, который имеет зависимости с другими банками. Я использую только 1-2 класс на этой банке и хочу уменьшить неиспользованные. –

3

Если вам нравится знать зависимости, которые использует ваш проект, просто проверьте maven-dependency-plugin, который может использоваться для анализа используемых/неиспользуемых зависимостей.

Проверьте зависимости через:

mvn dependency:analyze 

или посмотрите на DEP дерева, как это:

mvn dependency:tree 

Или вы посмотрите в ваш язь может (в зависимости от которых одна вы используете) например, с Eclipse (Indigo) и плагином m2e у вас есть вкладка «Иерархия зависимостей», которая показывает дерево зависимостей, в т.ч. транзитивные зависимости.

В некоторой ситуации вы должны быть осторожны в отношении зависимостей, которые используются каркасами DI, которые не могут быть проанализированы плагином maven-dependency или плагинами ide.

Смежные вопросы