Создать минимизированную банку только с использованными классами - PullRequest
11 голосов
/ 01 марта 2012

Мне нужно создать минимальную банку библиотеки утилит для использования в Android. Я использую некоторые методы из библиотек Apache Commons (например, IOUtils, StringUtils). Однако каждое такое использование заставляет меня импортировать всю библиотеку (commons-lang, commons-io и т. Д.), Что абсолютно приемлемо для Tomcat (в любом случае war размера mamoot), но абсолютно неприемлемо для проекта Android. *

Итак, моя цель - упаковать все используемые классы из зависимостей в один jar - но только те классы, которые необходимы. Я помню, как однажды связался с плагином maven, который выполнил эту задачу, к сожалению, я не могу вспомнить его имя и не найти его через Google.

Так, пожалуйста, знаете ли вы плагин maven, который будет выполнять такую ​​минимизацию зависимостей, или какой-либо автономный инструмент, который будет делать то же самое?

Ответы [ 4 ]

6 голосов
/ 21 декабря 2015

Плагин maven, который вы не помните, вероятно, Плагин Apache Maven Shade , есть опция minimizeJar.Как заметил Andreas_D, сюда не входят классы, загруженные Class.forName, поэтому вам нужно будет implicity сказать в конфигурации , что они вам нужны.Вот как я сделал maven для включения драйвера jdbc в мою единственную банку:

<filter>
  <artifact>net.sourceforge.jtds:jtds</artifact>
    <includes>
      <include>**</include>
    </includes>
</filter>
1 голос
/ 01 марта 2012

Извините, может я не ясно понял вопрос. Обфускатор (то есть ProGuard ) может это сделать, не так ли? Он объединяет несколько JAR-файлов в один и удаляет неиспользуемые классы. Если вам не нужна обфускация / оптимизация (для предотвращения нежелательных побочных эффектов), вы можете отключить их, оставив включенной фазу сжатия.

0 голосов
/ 01 марта 2012

Как правило, невозможно автоматически выбрать все классы, которые используются приложением. Просто подумайте о том, что мы можем сделать с Class.forName(String name) или если мы используем контейнер внедрения зависимостей и объявим типы во внешних файлах конфигурации.

0 голосов
/ 01 марта 2012

Я полагаю, что если вы используете Eclipse для JAR проекта, он дает некоторые возможности сделать это во время JARing :) Может быть, это будет полезно.

Также вы можете собирать используемые вами библиотечные классы в пользовательской библиотеке и включатьэтот пользователь создал библиотеку в проекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...