«1. Обзор

В этом кратком руководстве мы покажем, как создать многомодульный проект с помощью Spring Boot.

Сначала мы создадим библиотечный jar-файл, который сам по себе не является приложением, а затем мы создадим приложение, использующее нашу библиотеку.

Введение в Spring Boot см. в этой статье.

2. Настройка

Чтобы настроить наш многомодульный проект, давайте создадим простой модуль, используя упаковку pom для объединения нашей библиотеки и модулей приложения в нашей конфигурации Maven:

<groupId>com.baeldung</groupId>
<artifactId>parent-multi-module</artifactId>
<packaging>pom</packaging>

Мы создадим два каталога внутри нашего проекта, который будет отделять модуль приложения от модуля jar библиотеки.

Давайте объявим наши модули в pom.xml:

<modules>
    <module>library</module>
    <module>application</module>
</modules>

3. Библиотека Jar

Для нашего библиотечного модуля мы будем использовать упаковку jar:

<groupId>com.baledung.example</groupId>
<artifactId>library</artifactId>
<packaging>jar</packaging>

Как мы хотим воспользоваться управления зависимостями Spring Boot, мы будем использовать spring-boot-starter-parent в качестве родительского проекта, позаботившись о том, чтобы установить для \u003crelativePath/\u003e пустое значение, чтобы Maven разрешил родительский файл pom.xml из репозиториев: ~ ~~

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version>
    <relativePath/>
</parent>

Обратите внимание, что если у нас есть собственный родительский проект, мы можем вместо этого импортировать управление зависимостями в виде спецификации (BOM) в разделе \u003cdependencyManagement/\u003e файла pom.xml:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <type>pom</type>
            <version>2.4.0</version>
            <scope>import</scope>
        </dependency>
    </dependencies>
<dependencyManagement>

Наконец , начальные зависимости будут довольно простыми:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter</artifactId>
    </dependency>
</dependencies>

В этом модуле плагин Spring Boot не нужен, потому что его основная функция — создать исполняемый über-jar, чего мы не делаем. хочу и не нуждаюсь в библиотеке.

После этого мы готовы разработать сервисный компонент, который будет предоставляться библиотекой:

@Service
public class EvenOddService {

    public String isEvenOrOdd(Integer number) {
        return number % 2 == 0 ? "Even" : "Odd";
    }
}

4. Проект приложения

Как и наш библиотечный модуль, наш модуль приложения будет использовать упаковку jar: ~ ~~

<groupId>com.baeldung.example</groupId>
<artifactId>application</artifactId>
<packaging>jar</packaging>

И мы воспользуемся преимуществами управления зависимостями Spring Boot, как и раньше:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version>
    <relativePath/>
</parent>

В дополнение к начальной зависимости Spring Boot мы включим нашу библиотеку jar, созданную в предыдущем разделе:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.baeldung.example</groupId>
        <artifactId>library</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

Наконец, мы будем использовать плагин Spring Boot:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Есть несколько удобных причин использовать плагин, упомянутый выше в этом месте.

Во-первых, он предоставляет встроенный преобразователь зависимостей, который устанавливает номер версии в соответствии с зависимостями Spring Boot.

Во-вторых, он ищет метод main, чтобы пометить его как исполняемый класс.

Наконец, и, возможно, самое главное, он собирает все jar-файлы в пути к классам и создает единый исполняемый über-jar.

Теперь, когда все готово для написания нашего класса приложения и сразу к делу, давайте реализуем контроллер внутри основного класса приложения:

@SpringBootApplication(scanBasePackages = "com.baeldung")
@RestController
public class EvenOddApplication {

    private EvenOddService evenOddService;

    // constructor

    @GetMapping("/validate/")
    public String isEvenOrOdd(
      @RequestParam("number") Integer number) {
        return evenOddService.isEvenOrOdd(number);
    }

    public static void main(String[] args) {
        SpringApplication.run(EvenOddApplication.class, args);
    }
}

5. Заключение

В этой статье мы изучили, как реализовать и настроить многомодульный проект и создать библиотеку jar самостоятельно с помощью Spring Boot.

Как всегда, образцы кода можно найти на GitHub.