Использовать «maven-shade-plugin», чтобы создать только 1 исполняемый файл jar со всеми необходимыми зависимостями для вашего проекта Java или Spring?

Опубликовано: 2016-11-16

maven-shade-plugin-how-to-create-javaspring-based-executable-jar-with-all-required-зависимости

Просто создайте один файл Crunchify.jar со всеми зависимостями внутри него.

На прошлой неделе я написал руководство о том, как использовать maven-resources-plugin , maven-dependency-plugin и maven-jar-plugin для создания полного исполняемого проекта Jar. В результате он создает/копирует все необходимые файлы в папку /target/Crunchify .

Before: использование плагинов maven-resource, maven-dependency, maven-jar:

maven-resources-maven-зависимость-maven-jar-plugin-to-build-java-проект

After: Использование плагина maven-shade:

создать-только-1-исполняемый-jar-со-всеми-необходимыми-зависимостями-свойствами-и-ресурсами-файл-в-этом-для-вашего-java-или-весеннего-проекта

Давайте начнем с того, как добиться вышеуказанного результата:

Здесь, как вы видите, мы собрали все из Java Project в just one file и дали имя Crunchify.jar (со всеми файлами внутри).

Несколько дней назад я понятия не имел, как этого добиться, поскольку хотел создать runnable binary distribution of a standalone Java application с помощью Maven. Другими словами:

  1. Как создать исполняемый файл jar на основе spring с помощью maven?
  2. Создание исполняемого двоичного дистрибутива с помощью Maven для Java + Spring + других зависимостей
  3. Как создавать проекты Java + Spring с помощью Maven?

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

С помощью maven -shade- plugin мне удалось добиться этого . Он предоставляет возможность упаковать артефакт в uber-jar (One major file jar) , включая его зависимости, и затенить — т. е. переименовать — пакеты некоторых зависимостей.

В моем проекте у меня так много других зависимостей, например, Spring Framework, JSON, сторонние инструменты и т. д. Ниже приведен только пример проекта, но мой производственный файл .jar получился ~5.2MB big .

uber-jar — это то, что берет все зависимости, извлекает содержимое зависимостей и помещает его в один JAR с классами/ресурсами самого проекта. Имея такой uber-jar, его easy for execution , потому что вам понадобится только один большой JAR вместо множества маленьких JAR для запуска вашего приложения. Это также облегчает распространение в некоторых случаях.

Для этого вам необходимо обновить файл pom.xml.

Шаг 1

Взгляните на полный файл pom.xml . В основном вас будет интересовать <build> .

Как вы можете видеть здесь, я использую Resource Transformers в файле pom.xml. Объединение classes/resources из нескольких артефактов в один Crunchify JAR является простым, если нет перекрытия. В противном случае требуется какая-то логика для объединения ресурсов из нескольких JAR-файлов. Вот где вступают в действие преобразователи ресурсов.

Шаг 2

Как только вы добавите maven-shade-plugin в свой файл pom.xml , просто используйте команду ниже для создания своего проекта.

И вы должны увидеть один Crunchify.jar (uber-jar), созданный со all dependencies mentioned in pom.xml file внутри.

Шаг 3

Перейдите в целевую папку вашего проекта, и вы увидите созданный файл Crunchify.jar. Просто используйте команду

$bash> java -jar Crunchify.jar для выполнения вашего проекта.

У вас есть что добавить? Добавьте его в раздел комментариев ниже. Наслаждайтесь, удачного дня и счастливого программирования.