Создание исполняемого JAR-файла с зависимостями с использованием Maven

Создание исполняемого JAR-файла с зависимостями с использованием Maven
Создание исполняемого JAR-файла с зависимостями с использованием Maven

Упаковка проектов Maven в один исполняемый JAR-файл

При работе с проектами Java часто необходимо упаковать приложение в один исполняемый файл JAR для удобства распространения. Maven, мощный инструмент автоматизации сборки, позволяет разработчикам включать все необходимые зависимости в один выходной JAR-файл.

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

Команда Описание
<plugin> Определяет плагин Maven, который будет использоваться в процессе сборки. Плагины могут выполнять определенные задачи, такие как компиляция кода или упаковка проекта.
<groupId> Указывает идентификатор группы для проекта Maven, обычно это обратное доменное имя.
<artifactId> Определяет идентификатор артефакта, который является именем проекта.
<version> Указывает текущую версию проекта.
<build> Содержит конфигурацию сборки проекта, включая плагины и ресурсы.
<descriptorRef> Ссылается на предопределенный дескриптор, который будет использовать подключаемый модуль сборки Maven, например "jar-with-dependents".
<mainClass> Указывает основной класс, который будет выполняться при запуске файла JAR.
<execution> Определяет блок выполнения внутри плагина, определяя задачи, которые необходимо выполнить на разных этапах сборки.
mvn clean package Команда для очистки проекта и упаковки его в файл JAR, включая все зависимости.
java -jar target/...jar Команда для запуска созданного файла JAR, указав путь к JAR.

Создание и запуск исполняемого JAR-файла с помощью Maven

Приведенные выше сценарии демонстрируют, как настроить проект Maven для упаковки всех его зависимостей в один исполняемый файл JAR. Первый скрипт — Maven pom.xml файл, содержащий конфигурацию проекта. Внутри этого файла <plugin> Тег используется для определения плагина сборки Maven. Этот плагин имеет решающее значение для создания исполняемого JAR-файла, включающего все зависимости. <descriptorRefs> тег в конфигурации плагина указывает использование jar-with-dependencies дескриптор, который гарантирует, что все зависимости проекта будут упакованы в окончательный файл JAR. <mainClass> тег внутри <manifest> Этот раздел важен, поскольку он сообщает Maven, какой класс содержит основной метод для запуска при выполнении JAR.

<execution> блок внутри конфигурации плагина, где происходит действие. Он указывает, что цель плагина single должно быть выполнено во время package Этап жизненного цикла сборки. Это то, что запускает создание файла JAR с зависимостями. Второй скрипт представляет собой простую инструкцию командной строки: mvn clean package. Эта команда очищает проект (удаляя артефакты предыдущей сборки), компилирует исходный код, запускает тесты и упаковывает проект в файл JAR. Окончательный файл JAR будет расположен в папке target каталог проекта и назван в соответствии с artifactId и version указано в pom.xml.

Создание исполняемого файла JAR с зависимостями с использованием Maven

Скрипт конфигурации Maven

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.example.MainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Запуск команды Maven для упаковки JAR

Инструкции командной строки

mvn clean package
# This command will compile the code, run the tests, and create the JAR file
# The JAR file will include all dependencies specified in the pom.xml
# It will be located in the target directory of the project
# The final JAR file will be named my-app-1.0-SNAPSHOT-jar-with-dependencies.jar

# To run the JAR file, use the following command:
java -jar target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
# Ensure that the mainClass specified in the pom.xml is correct
# This will start your application with all dependencies included

Расширенные методы Maven для зависимостей упаковки

Помимо базовой конфигурации для создания исполняемого JAR-файла с помощью Maven, существуют дополнительные методы, которые могут улучшить процесс сборки. Один из таких методов предполагает использование shade плагин вместо assembly плагин. Плагин Maven Shade предлагает более продвинутые функции для создания uber-JAR (JAR с включенными зависимостями). Это позволяет переименовывать пакеты, чтобы избежать конфликтов путей к классам, и обеспечивает лучшую обработку дубликатов классов и ресурсов. Кроме того, он предлагает детальный контроль над тем, какие зависимости включаются в окончательный JAR.

Еще одним важным аспектом является управление размером вашего JAR-файла. Большие файлы JAR могут быть громоздкими и медленными при передаче или загрузке. maven-shade-plugin может помочь в этом, позволяя исключить ненужные файлы и классы, тем самым уменьшая размер конечного JAR. Вы также можете настроить плагин так, чтобы минимизировать JAR, удалив несущественную информацию, такую ​​как неиспользуемые классы или избыточные ресурсы. Эти расширенные конфигурации могут быть особенно полезны при работе над большими проектами с многочисленными зависимостями.

Общие вопросы и решения для исполняемых файлов JAR Maven

  1. Как указать основной класс в моем JAR?
  2. Вы можете указать основной класс, используя <mainClass> тег внутри <manifest> раздел конфигурации плагина Maven.
  3. Как я могу исключить определенные зависимости из окончательного JAR?
  4. Использовать excludes в конфигурации плагина, чтобы указать зависимости, которые не следует включать в окончательный JAR.
  5. Что такое убер-JAR?
  6. uber-JAR — это файл JAR, который содержит не только скомпилированный код, но и все его зависимости.
  7. Как я могу избежать конфликтов путей к классам в моем JAR?
  8. maven-shade-plugin позволяет переименовывать пакет с зависимостями во избежание конфликтов.
  9. Как обрабатывать повторяющиеся классы в зависимостях?
  10. Настройте maven-shade-plugin для управления повторяющимися классами и ресурсами, указав, как следует обрабатывать дубликаты в окончательном JAR-файле.
  11. Могу ли я включить только определенные файлы из зависимости?
  12. Да, вы можете настроить maven-assembly-plugin или maven-shade-plugin чтобы включить только определенные файлы из зависимости.
  13. Как запустить упакованный JAR?
  14. Использовать java -jar команда, за которой следует путь к вашему JAR-файлу.
  15. Как я могу проверить содержимое моего файла JAR?
  16. Вы можете использовать jar -tf команда для вывода содержимого файла JAR.
  17. Что делать, если мой JAR-файл слишком велик?
  18. Использовать maven-shade-plugin чтобы исключить ненужные файлы и минимизировать размер JAR.

Заключительные мысли об исполняемых JAR-файлах Maven

Создание исполняемого файла JAR с зависимостями с помощью Maven упрощает процесс развертывания приложений Java. Путем правильной настройки pom.xml файл и используя плагины, такие как плагин сборки Maven или плагин Maven Shade, разработчики могут упаковать все необходимые зависимости в один файл JAR. Такой подход гарантирует бесперебойную работу приложения в различных средах, что упрощает распространение и выполнение. Выполнение этих шагов поможет вам эффективно управлять зависимостями вашего проекта и создавать надежные исполняемые файлы JAR.