Переименование и сохранение Maven jar с зависимостями

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Да, это можно выполнить без особых сложностей. Чтобы переименовать jar-with-dependencies, в разделе <build> файла pom.xml задайте тег <finalName>. Если вы хотите присвоить файлу уникальное имя, используйте <classifier> в конфигурации maven-assembly-plugin. Вот пример:

xml
Скопировать код
<build>
    <finalName>AppName</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <classifier>bundle</classifier>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

В результате генерируется AppName-bundle.jar, который включает как <finalName>, так и <classifier>. Для более тонкой настройки обратитесь к следующим разделам.

Кинга Идем в IT: пошаговый план для смены профессии

Дополнительная настройка сборки с помощью assembly дескриптора

Чтобы настроить пользовательский assembly дескриптор, создайте файл jar-assembly.xml со следующими инструкциями для сборки:

xml
Скопировать код
<assembly>
    <id>custom-bundle</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <unpack>true</unpack>
        </dependencySet>
    </dependencySets>
</assembly>

Этот файл укажите в конфигурации maven-assembly-plugin, используя тег <descriptor>. Чтобы не добавлять ID сборки к имени jar-файла, установите параметру <appendAssemblyId> значение false.

Установка соответствующего classifier

Для точной идентификации артефакта при установке или развертывании необходимо устанавливать соответствующее значение classifier:

xml
Скопировать код
<configuration>
    <classifier>custom</classifier>
</configuration>

Настройка build и регион-специфических профилей

Управление различными build и регион-специфическими профилями можно осуществлять с помощью параметризации assembly.xml:

xml
Скопировать код
<profiles>
    <profile>
        <id>region-specific</id>
        <properties>
            <assembly.descriptorId>region1</assembly.descriptorId>
        </properties>
    </profile>
</profiles>

Эти и другие настройки предлагают заметную гибкость.

Визуализация

Maven jar-with-dependencies — это своеобразная упаковка (📦), содержащая ваше приложение (🏠) и все его зависимости (🛋️, 🖥️, 🐈):

Markdown
Скопировать код
Оригинальная упаковка:            [🏠 + 🛋️ + 🖥️ + 🐈] = myapp-jar-with-dependencies.jar

При переименовании упаковка получает новый ярлык:

Markdown
Скопировать код
Новый ярлык:         [🏠 + 🛋️ + 🖥️ + 🐈] = EstateInABox.jar

Чтобы изменить наименование в maven-assembly-plugin, используйте:

xml
Скопировать код
<configuration>
  <finalName>EstateInABox</finalName>
  <descriptorRefs>
    <descriptorRef>jar-with-dependencies</descriptorRef>
  </descriptorRefs>
</configuration>

Включение главного класса и манифеста

Чтобы создать полностью исполняемый jar-with-dependencies, необходимо указать основной класс:

xml
Скопировать код
<archive>
    <manifest>
        <mainClass>com.example.MainClass</mainClass>
    </manifest>
</archive>

Выбор подходящих областей зависимостей

Выбор зависимостей, которые будут включены в пакет, контролируется через dependencySet:

xml
Скопировать код
<dependencySet>
    <scope>runtime</scope>
</dependencySet>

Изучение вариантов форматов вывода

С помощью formats и fileSets можно настроить структуру архива, чтобы получить нужную конфигурацию:

xml
Скопировать код
<formats>
    <format>dir</format>
    <format>tar.gz</format>
</formats>
<fileSets>
    <fileSet>
        <directory>${project.basedir}/src/main/resources</directory>
        <outputDirectory>/resources</outputDirectory>
    </fileSet>
</fileSets>

Полезные материалы

  1. Apache Maven Shade Plugin – Введение
  2. java – Как создать исполняемый JAR файл с зависимостями с помощью Maven?
  3. Apache Maven Assembly Plugin – Использование
  4. Apache Maven Archiver – Справочник
  5. Поиск в Maven Central Repository