Плагины инструментария сборки
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 или более позднюю версию.
Подробнее ознакомьтесь с документацией плагина:
2. Плагин Spring Boot Gradle
Плагин Spring Boot Gradle предоставляет поддержку Spring Boot в Gradle, позволяя упаковывать исполняемые jar или war архивы, запускать приложения Spring Boot и использовать управление зависимостями, предоставляемое spring-boot-dependencies. Требуется Gradle 7.x (7.5 или новее) или 8.x. Подробнее ознакомьтесь с документацией плагина:
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 доступны следующие дополнительные задачи:
3.1.1. Использование задачи «exejar»
Вы можете использовать задачу exejar для создания исполняемого jar Spring Boot. Задача поддерживает следующие атрибуты:
| Атрибут | Описание | Обязательно |
|---|---|---|
| Файл jar назначения | Да |
| Корневая директория файлов Java-классов | Да |
| Основной класс приложения для запуска | Нет (по умолчанию — первый найденный класс, объявляющий метод |
Следующие вложенные элементы могут быть использованы с задачей:
| Элемент | Описание |
|---|---|
| Один или несколько Коллекций ресурсов, описывающих набор ресурсов, которые должны быть добавлены в содержимое создаваемого файла jar. |
| Один или несколько Коллекций ресурсов, которые должны быть добавлены в набор библиотек 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. При необходимости вы также можете использовать эту задачу напрямую в вашем билде. Поддерживаются следующие атрибуты:
| Атрибут | Описание | Обязательно |
|---|---|---|
| Корневая директория файлов Java-классов | Да (если не указан |
| Может быть использован для прерывания поиска класса | Нет |
| Свойство 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. Пример реализации переупаковки
Следующий пример демонстрирует типичную реализацию переупаковки:
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 ...
}
}
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