1. Обзор
В этом руководстве мы увидим, как использовать приложение Spring Boot в качестве зависимости от другого проекта.
2. Упаковка Spring Boot
Плагины Spring Boot Maven и Gradle упаковывают наше приложение в виде исполняемых JAR-файлов — такой файл нельзя использовать в другом проекте, поскольку файлы классов помещаются в BOOT-INF/classes
. Это не баг, а фича.
Чтобы использовать классы совместно с другим проектом, лучше всего создать отдельный jar-файл, содержащий общие классы , а затем сделать его зависимым для всех модулей, которые на них полагаются.
Но если это невозможно, мы можем настроить плагин для создания отдельного jar-файла, который можно использовать в качестве зависимости.
2.1. Конфигурация Maven
Давайте настроим плагин с помощью классификатора:
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
Однако конфигурация для Spring Boot 1.x будет немного другой:
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>
Это создаст два jar-файла, один с суффиксом exec
как исполняемый jar-файл, а другой — более типичный jar-файл, который мы можем включить в другие проекты .
3. Упаковка с помощью плагина сборки Maven
Мы также можем использовать maven-assembly-plugin
для создания зависимой банки:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Если мы используем этот плагин вместе с классификатором exec в
spring-boot-maven-plugin,
он сгенерирует три jar-файла. Первые два будут такими же, как мы видели ранее.
Третий будет иметь тот суффикс, который мы указали в теге <descriptorRef>
, и будет содержать все транзитивные зависимости проекта. Если мы включим его в другой проект, нам не нужно будет отдельно включать зависимости Spring.
4. Вывод
В этой статье мы показали несколько подходов к упаковке приложения Spring Boot для использования в качестве зависимости в других проектах Maven.
Как всегда, код, поддерживающий статью, доступен на GitHub .