Spec-Zone.ru › Spring Boot

Плагины инструментария сборки

Spring Boot предоставляет плагины инструментария сборки для Maven и Gradle. Плагины предлагают множество функций, включая создание исполняемых JAR-архивов. Этот раздел содержит подробную информацию о каждом из плагинов, а также помощь в расширении неподдерживаемой системы сборки. Если вы только начинаете, возможно, стоит сначала прочитать раздел «using.html» в разделе «using.html».

1. Плагин Spring Boot для Maven

Плагин Spring Boot для Maven предоставляет поддержку Spring Boot в Maven, позволяя создавать исполняемые JAR- или WAR-архивы и запускать приложение «на месте». Для его использования необходимо использовать Maven 3.6.3 или более позднюю версию.

Подробнее ознакомьтесь с документацией плагина:

  • Справочник (HTML и PDF)

  • API

2. Плагин Spring Boot Gradle

Плагин Spring Boot Gradle предоставляет поддержку Spring Boot в Gradle, позволяя упаковывать исполняемые jar или war архивы, запускать приложения Spring Boot и использовать управление зависимостями, предоставляемое spring-boot-dependencies. Требуется Gradle 7.x (7.5 или новее) или 8.x. Подробнее ознакомьтесь с документацией плагина:

  • Справочник (HTML и PDF)

  • API

3. Модуль Spring Boot AntLib

Модуль Spring Boot AntLib предоставляет базовые средства поддержки Spring Boot для Apache Ant. Вы можете использовать модуль для создания исполняемых jar. Для использования модуля необходимо объявить дополнительный spring-boot namespace в вашем build.xml, как показано в следующем примере:

<project xmlns:ivy="antlib:org.apache.ivy.ant"
    xmlns:spring-boot="antlib:org.springframework.boot.ant"
    name="myapp" default="build">
    ...
</project>

Не забудьте запустить Ant с опцией -lib, как показано в следующем примере:

$ ant -lib <directory containing spring-boot-antlib-3.1.3.jar>
Раздел «Использование Spring Boot» включает более подробный пример использования Apache Ant с spring-boot-antlib.

3.1. Задачи Spring Boot Ant

После объявления spring-boot-antlib namespace доступны следующие дополнительные задачи:

  • Использование задачи «exejar»

  • Использование задачи «findmainclass»

3.1.1. Использование задачи «exejar»

Вы можете использовать задачу exejar для создания исполняемого jar Spring Boot. Задача поддерживает следующие атрибуты:

Атрибут Описание Обязательно

destfile

Файл jar назначения

Да

classes

Корневая директория файлов Java-классов

Да

start-class

Основной класс приложения для запуска

Нет (по умолчанию — первый найденный класс, объявляющий метод main)

Следующие вложенные элементы могут быть использованы с задачей:

Элемент Описание

resources

Один или несколько Коллекций ресурсов, описывающих набор ресурсов, которые должны быть добавлены в содержимое создаваемого файла jar.

lib

Один или несколько Коллекций ресурсов, которые должны быть добавлены в набор библиотек jar, составляющих runtime-зависимость classpath приложения.

3.1.2. Примеры

Этот раздел демонстрирует два примера задач Ant.

Указать класс запуска
<spring-boot:exejar destfile="target/my-application.jar"
        classes="target/classes" start-class="com.example.MyApplication">
    <resources>
        <fileset dir="src/main/resources" />
    </resources>
    <lib>
        <fileset dir="lib" />
    </lib>
</spring-boot:exejar>
Обнаружение класса запуска
<exejar destfile="target/my-application.jar" classes="target/classes">
    <lib>
        <fileset dir="lib" />
    </lib>
</exejar>

3.2. Использование задачи «findmainclass»

Задача findmainclass используется внутри exejar для поиска класса, объявляющего main. При необходимости вы также можете использовать эту задачу напрямую в вашем билде. Поддерживаются следующие атрибуты:

Атрибут Описание Обязательно

classesroot

Корневая директория файлов Java-классов

Да (если не указан mainclass)

mainclass

Может быть использован для прерывания поиска класса main

Нет

property

Свойство Ant, которое должно быть установлено результатом

Нет (результат будет выведен в лог, если не указано)

3.2.1. Примеры

Этот раздел содержит три примера использования findmainclass.

Найти и вывести в лог
<findmainclass classesroot="target/classes" />
Найти и установить
<findmainclass classesroot="target/classes" property="main-class" />
Переопределить и установить
<findmainclass mainclass="com.example.MainClass" property="main-class" />

4. Поддержка других систем сборки

Если вы хотите использовать инструмент сборки, отличный от Maven, Gradle или Ant, вам, вероятно, нужно разработать свой собственный плагин. Исполняемые JAR-файлы должны соответствовать определенному формату, а некоторые записи должны быть записаны в нескомпрессированном виде (см. раздел «формат исполняемого JAR-файла» в приложении для получения подробностей).

Плагины Spring Boot Maven и Gradle оба используют spring-boot-loader-tools для фактического создания JAR-файлов. Если необходимо, вы можете использовать эту библиотеку напрямую.

4.1. Переупаковка архивов

Для переупаковки существующего архива в автономный исполняемый архив используйте org.springframework.boot.loader.tools.Repackager. Класс Repackager принимает единственный аргумент конструктора, который ссылается на существующий JAR- или WAR-архив. Используйте один из двух доступных методов repackage() для замены исходного файла или записи в новое место назначения. Различные параметры также могут быть настроены в переупаковщике перед его запуском.

4.2. Вложенные библиотеки

При переупаковке архива вы можете включать ссылки на файлы зависимостей, используя интерфейс org.springframework.boot.loader.tools.Libraries. Мы не предоставляем никаких конкретных реализаций Libraries, поскольку они обычно специфичны для системы сборки.

Если ваш архив уже содержит библиотеки, вы можете использовать Libraries.NONE.

4.3. Поиск главного класса

Если вы не используете Repackager.setMainClass() для указания главного класса, переупаковщик использует ASM для чтения файлов классов и пытается найти подходящий класс с методом public static void main(String[] args). Если будет найдено более одного кандидата, будет выброшено исключение.

4.4. Пример реализации переупаковки

Следующий пример демонстрирует типичную реализацию переупаковки:

Java
import java.io.File;
import java.io.IOException;
import java.util.List;

import org.springframework.boot.loader.tools.Library;
import org.springframework.boot.loader.tools.LibraryCallback;
import org.springframework.boot.loader.tools.LibraryScope;
import org.springframework.boot.loader.tools.Repackager;

public class MyBuildTool {

    public void build() throws IOException {
        File sourceJarFile = ...
        Repackager repackager = new Repackager(sourceJarFile);
        repackager.setBackupSource(false);
        repackager.repackage(this::getLibraries);
    }

    private void getLibraries(LibraryCallback callback) throws IOException {
        // Build system specific implementation, callback for each dependency
        for (File nestedJar : getCompileScopeJars()) {
            callback.library(new Library(nestedJar, LibraryScope.COMPILE));
        }
        // ...
    }

    private List<File> getCompileScopeJars() {
        return ...
    }

}
Kotlin
import org.springframework.boot.loader.tools.Library
import org.springframework.boot.loader.tools.LibraryCallback
import org.springframework.boot.loader.tools.LibraryScope
import org.springframework.boot.loader.tools.Repackager
import java.io.File
import java.io.IOException

class MyBuildTool {

    @Throws(IOException::class)
    fun build() {
        val sourceJarFile: File? =  ...
        val repackager = Repackager(sourceJarFile)
        repackager.setBackupSource(false)
        repackager.repackage { callback: LibraryCallback -> getLibraries(callback) }
    }

    @Throws(IOException::class)
    private fun getLibraries(callback: LibraryCallback) {
        // Build system specific implementation, callback for each dependency
        for (nestedJar in getCompileScopeJars()!!) {
            callback.library(Library(nestedJar, LibraryScope.COMPILE))
        }
        // ...
    }

    private fun getCompileScopeJars(): List<File?>? {
        return  ...
    }

}

5. Что читать дальше

Если вас интересует, как работают плагины для инструментов сборки, вы можете обратиться к модулю spring-boot-tools на GitHub. Более подробные технические сведения о формате исполняемого JAR-файла приведены в приложении.

Если у вас есть конкретные вопросы, связанные со сборкой, см. руководства «как сделать».

Copyright © 2012-2023 VMware, Inc.
Licensed under the Apache License, Version 2.0.
https://docs.spring.io/spring-boot/docs/3.1.3/reference/html/build-tool-plugins.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API