Вопрос по java, maven – Уменьшить размер файла фляги

4

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

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

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

Что вы подразумеваете под "неиспользованными зависимостями"? ? В ваших собственных помах или чужих? khmarbaise
Если httpclient содержит зависимости, которые не используются, вы можете использовать exclude в вашем pom, чтобы исключить транзитивные зависимости. khmarbaise
В свой pom я включил httpclient apache, который составляет около 350kb. В его pom-файле есть зависимости от других файлов. Мне нужен инструмент, который уменьшает неиспользуемые классы из jar и уменьшает файл jar. user1365737

Ваш Ответ

3   ответа
3

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

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

mvn dependency:analyze

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

mvn dependency:tree

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

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

1

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

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

Error: User Rate Limit Exceeded
5

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

  • a WAR or EAR or similar file,
  • a so-called UberJAR file produced by combining lots of JAR files; e.g. using the Maven shade plugin, or
  • dependencies at a finer granularity than Maven modules.

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

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

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

Похожие вопросы