Как подключаемый модуль Maven Shade решает, какие зависимости поместить в финальную банку при использовании функции MinimJar?

У меня есть проект Maven с одним java-файлом, который использует плагин Maven Shade для создания uber jar. Моя цель — создать исполняемый файл jar как можно меньшего размера. Я решил использовать параметр minimizeJar в плагин, чтобы сделать мою банку меньше. Параметр указывает только зависимости, необходимые для запуска, или те, которые нужно скомпилировать, или и то, и другое?


person user3704915    schedule 21.07.2014    source источник


Ответы (1)


Ответ находится выше на странице, на которую вы ссылаетесь:

оттенок:оттенок

Полное имя: org.apache.maven.plugins:maven-shade-plugin:2.3:shade

Описание: Mojo, выполняющий делегирование затенения компоненту Shader.

Атрибуты:

  • Требуется выполнение проекта Maven.
  • Требуется разрешение зависимостей артефактов в области действия: время выполнения.
  • Цель — потокобезопасность и поддержка параллельных сборок.
  • По умолчанию привязывается к этапу жизненного цикла: package.

Таким образом, включенные артефакты будут временем выполнения (и, следовательно, временем компиляции).

РЕДАКТИРОВАТЬ: полное объяснение областей действия см. в разделе Introduction to механизм зависимости - Dependency Scope.

В maven, когда вы выполняете разрешение зависимостей, он использует понятие областей действия - три наиболее важных из них (с этой страницы):

  • компилировать — это область по умолчанию, используемая, если она не указана. Зависимости компиляции доступны во всех путях к классам проекта. Кроме того, эти зависимости распространяются на зависимые проекты.
  • время выполнения — эта область указывает, что зависимость не требуется для компиляции, но предназначена для выполнения. Он находится в путях выполнения и тестовых классах, но не в пути к классам компиляции.
  • test — эта область указывает, что зависимость не требуется для нормального использования приложения и доступна только для этапов компиляции и выполнения теста.

Поэтому, когда вы компилируете исходники в src/main/java, вы будете использовать зависимости с областью compile. При запуске приложения вы будете использовать зависимости с областью действия compile или runtime. При компиляции тестов (в разделе src/test/java) вы будете использовать области compile и test. Когда вы запускаете свои тесты с помощью surefire, вы будете использовать зависимости с областями compile, test и runtime.

Это означает, что MinimJar будет содержать зависимости, относящиеся к области компиляции и времени выполнения.

person Matthew Farwell    schedule 21.07.2014
comment
Не могли бы вы объяснить, что это значит, когда говорится, что требуется разрешение зависимостей артефактов в области: время выполнения. - person user3704915; 22.07.2014