Подтвердить что ты не робот

Разница между плагинами maven (сборками-плагинами, jar-plugins, shaded-plugins)

Я новичок в Maven, и теперь меня смущает разница между этими плагинами Maven. Все это создает файлы JAR? теперь мои вопросы

  1. какая разница между jar, созданным в каждом плагине. (плагин сборки, jar-плагин, затененный плагин)

  2. Цель каждого плагина. (сборка, плагин jar, затененный плагин)

  3. Я знаю, даже без указания каких-либо из этих плагинов, когда наберите mvn package будет вывод jar. В чем разница выходной банки без этих плагинов и выходной банки с этими плагинами? ТИА

4b9b3361

Ответ 1

  1. maven-jar-plugin: этот плагин предоставляет возможность создавать и подписывать JAR файлы. Но он просто компилирует файлы Java в каталогах src/main/java и src/main/resources/. Он не включает JAR файлы зависимостей.
  2. maven-assembly-plugin: этот плагин извлекает все JAR файлы зависимостей в необработанные классы и группирует их вместе. Его также можно использовать для создания исполняемого JAR файла, указав основной класс. Работает в проекте только с меньшим количеством зависимостей; для большого проекта с множеством зависимостей это приведет к конфликту имен классов Java.
  3. maven-shade-plugin: упаковывает все зависимости в один uber-JAR. Его также можно использовать для создания исполняемого JAR файла, указав основной класс. Этот плагин особенно полезен, поскольку он объединяет содержимое определенных файлов, а не перезаписывает их путем перемещения классов. Это необходимо, когда есть файлы ресурсов с одинаковыми именами в JAR файлах, и плагин пытается упаковать все файлы ресурсов вместе.

См.: сравнение: Maven плагин банку, сборка, тень

Ответ 2

Jar plugin

Посмотрите, что может сказать следующая команда.

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-jar-plugin

Он имеет 3 гола, help, jar и test-jar. Я считаю, что вас больше всего интересует цель jar, которая в соответствии с описанием делает следующее:

Создайте JAR из текущего проекта.

В качестве примечания, выполнение mvn help:effective-pom в проекте с упаковкой, установленной на jar, показывает, что этот плагин автоматически настроен и выполняется во время фазы package.

  <plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <executions>
      <execution>
        <id>default-jar</id>
        <phase>package</phase>
        <goals>
          <goal>jar</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Плагин сборки

Это служит другой цели. У этого есть 8 целей, но 6 из них устарели. Таким образом, помимо цели help, это оставляет нам цель single.

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-assembly-plugin

Соберите комплект приложения или дистрибутив из дескриптора сборки. Эта цель подходит либо для привязки к жизненному циклу, либо для вызова непосредственно из командной строки (при условии, что все необходимые файлы доступны до начала сборки или создаются другой целью, указанной перед этим в командной строке).

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

Теневый плагин

Описание главной цели немного разочаровывает.

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-shade-plugin

Mojo, который выполняет штриховку делегирования в компонент Shader.

В основном вы хотите использовать этот плагин, если хотите создать uber-jar, который является вашим артефактом в JAR со всеми его транзитивными зависимостями.

В основном, если вы создаете библиотеку, вы будете придерживаться плагина JAR по умолчанию. Если вы создаете приложение, вы можете использовать плагин для тени, хотя для меня это довольно быстро и грязно. Если uber-jar не соответствует вашему вкусу, или дистрибутив не может вписаться в один JAR (внешняя конфигурация, собственные зависимости и т.д.), Тогда вы должны пойти на сборку плагинов.

Ответ 3

Плагин Maven jar просто создает файлы jar со всеми файлами SOURCE [.class файлы, скомпилированные из .java файлов], упакованными в него, но сам jar не может быть развернут, так как есть много других зависимостей, таких как сторонние файлы jar или другой библиотеки jar файлы, которые необходимы для выполнения файла SOURCE jar. Это, когда плагин сборки Maven входит в изображение, он создает пакет расширения по вашему выбору, например .zip,.tar,.gz, который является полностью развертываемым пакетом со всеми зависимостями, упакованными в него. Вы также можете указать структуру каталогов в сборке, который должен быть создан при развертывании пакета в сервисе