What
Проект SpringBoot, содержащий один или несколько модулей maven, называется многомодульным проектом SpringBoot.
Why
-
простота обслуживания Разделение одного большого проекта на несколько подмодулей способствует обслуживанию между модулями, Удаление или перемещение одного модуля меньше влияет на другие модули. Один модуль также можно использовать повторно
-
общие зависимости Вам нужно только определить общие зависимости в родительском классе, а модули подкласса будут совместно использовать зависимости родительского класса. Делает код более простым и кратким в больших проектах.
How
1. Родительский модуль
Создать родительский проект (SpringBoot)
удалить ненужные каталоги
Удалить файл src .mvn mvnw mvnw.cmd
pom
- упаковочная этикетка Метод упаковки изменен на "pom", что указывает на то, что этот модульМодуль агрегацииМодули подкласса "Агрегат" Используя упаковку maven, вы можете начать с этого модуля, и порядок упаковки будет рассчитан автоматически.
<packaging>pom</packaging>
- зависимости и теги dependencyManagement
1. dependenciesпоместите зависимости в теги Подмодули будут автоматически импортировать зависимости родительского класса
2. dependencyManagementпоместите зависимости в теги подмодульНе будуАвтоматически импортировать зависимости родительского класса Вам также необходимо объявить зависимость один раз в подклассе в ГАВненужныйОбъявите тег версии, версия такая же, как в родительском классе
Демонстрация pom-файла родительского класса
<!-- 父类: springboot自带的启动类父类-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 创建时填写的基本信息-->
<groupId>com.ybj</groupId>
<artifactId>my-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>my-app</name>
<description>springboot多项目</description>
<!-- 父类的packing只能是pom-->
<packaging>pom</packaging>
<!-- 子类直接继承-->
<dependencies>
<!-- 子类需要在pom中 手动加入依赖(version不用写)-->
<dependencyManagement>
- тег модулей Этот тег управляет агрегированными модулями При создании нового подмодуля модули автоматически добавляют один тег модуля.
стартовый класс
Стартовый класс родительского модуля — это стартовый класс всего модуля. Все запросы идут на порт родительского модуля Для того, чтобы служба подмодуля могла запускаться, необходимо добавить аннотации в класс запуска родительского модуля
@ComponentScan(basePackages = {"com.ybj.*",})
2. Подмодули
1. Создайте подмодуль
Выберите модуль
выберите проект maven
2.pom
- упаковочная этикетка Здесь вы можете выбрать банку или войну Укажите способ упаковки
- родитель Родитель в подклассе pom автоматически указывает на GAV родительского класса. Подклассы автоматически вводятся в родительский класс pom.dependenciesЗависимости в
<!-- 父类:自动选择了父类-->
<parent>
<artifactId>my-app</artifactId>
<groupId>com.ybj</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
-
межмодульные зависимости Вам нужно зависеть от модуля, который может быть объявлен в pom Зависимости здесь загружаются из локального репозитория, а не из удаленного репозитория.
-
Вспомогательный плагин Maven Установите вспомогательный плагин maven в идее Щелкните файл pom и выберите Анализатор зависимостей.
для просмотра и поиска зависимостей, что полезно для разрешения конфликтов зависимостей
4. Упаковка
Способ 1: Модуль агрегации упаковывается напрямую
Упакованный в модуль агрегации, порядок зависимостей будет автоматически рассчитан и упакован в свою очередь
Способ 2: Используйте плагин
Проблема с методом 1 в том, что он занимает много времени, потому что он весь запакован, Итак, вам нужно реализовать единую модульную упаковку Здесь вам нужно использовать плагин spring-boot-maven-plugin
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.0.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
5. Часто задаваемые вопросы
конфликт зависимостей
Поскольку подклассы наследуют зависимости от родительских классов, это может привести к конфликтам зависимостей, препятствующим запуску проекта. Здесь вы можете использовать вспомогательный плагин maven для устранения конфликтов.