У меня есть проект Maven с одним java-файлом, который использует плагин Maven Shade для создания uber jar. Моя цель — создать исполняемый файл jar как можно меньшего размера. Я решил использовать параметр minimizeJar в плагин, чтобы сделать мою банку меньше. Параметр указывает только зависимости, необходимые для запуска, или те, которые нужно скомпилировать, или и то, и другое?
Как подключаемый модуль Maven Shade решает, какие зависимости поместить в финальную банку при использовании функции MinimJar?
Ответы (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 будет содержать зависимости, относящиеся к области компиляции и времени выполнения.