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

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

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

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

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

3 ответа

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

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

Jar плагин

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

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 и т. Д.), Но конфигурация идет в другом файле.

Плагин Shade

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

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

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

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

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

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

Другие вопросы по тегам