Создание многомодульного проекта SpringBoot в Idea

Java

What

Проект SpringBoot, содержащий один или несколько модулей maven, называется многомодульным проектом SpringBoot.

Why

  1. простота обслуживания Разделение одного большого проекта на несколько подмодулей способствует обслуживанию между модулями, Удаление или перемещение одного модуля меньше влияет на другие модули. Один модуль также можно использовать повторно

  2. общие зависимости Вам нужно только определить общие зависимости в родительском классе, а модули подкласса будут совместно использовать зависимости родительского класса. Делает код более простым и кратким в больших проектах.

How

1. Родительский модуль

Создать родительский проект (SpringBoot)

在这里插入图片描述

удалить ненужные каталоги

Удалить файл src .mvn mvnw mvnw.cmd

在这里插入图片描述

pom

  1. упаковочная этикетка Метод упаковки изменен на "pom", что указывает на то, что этот модульМодуль агрегацииМодули подкласса "Агрегат" Используя упаковку maven, вы можете начать с этого модуля, и порядок упаковки будет рассчитан автоматически.
<packaging>pom</packaging>
  1. зависимости и теги 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>
  1. тег модулей Этот тег управляет агрегированными модулями При создании нового подмодуля модули автоматически добавляют один тег модуля.

стартовый класс

Стартовый класс родительского модуля — это стартовый класс всего модуля. Все запросы идут на порт родительского модуля Для того, чтобы служба подмодуля могла запускаться, необходимо добавить аннотации в класс запуска родительского модуля

@ComponentScan(basePackages = {"com.ybj.*",})

2. Подмодули

1. Создайте подмодуль

Выберите модуль

在这里插入图片描述

выберите проект maven

在这里插入图片描述
Введите конкретную информацию
在这里插入图片描述

2.pom

  1. упаковочная этикетка Здесь вы можете выбрать банку или войну Укажите способ упаковки
  2. родитель Родитель в подклассе pom автоматически указывает на GAV родительского класса. Подклассы автоматически вводятся в родительский класс pom.dependenciesЗависимости в
<!--    父类:自动选择了父类-->
    <parent>
        <artifactId>my-app</artifactId>
        <groupId>com.ybj</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
  1. межмодульные зависимости Вам нужно зависеть от модуля, который может быть объявлен в pom Зависимости здесь загружаются из локального репозитория, а не из удаленного репозитория.

  2. Вспомогательный плагин Maven Установите вспомогательный плагин maven в идее Щелкните файл pom и выберите Анализатор зависимостей.

    在这里插入图片描述

для просмотра и поиска зависимостей, что полезно для разрешения конфликтов зависимостей

在这里插入图片描述

4. Упаковка

Способ 1: Модуль агрегации упаковывается напрямую

Упакованный в модуль агрегации, порядок зависимостей будет автоматически рассчитан и упакован в свою очередь

在这里插入图片描述
Выполнить очистку и установку последовательно maven автоматически вычисляет порядок сборки
在这里插入图片描述

Способ 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 для устранения конфликтов.