Maven поддерживает многомодульные приложения, так как дочерние модули указывают на родительский модуль, но Spring Boot хочет, чтобы его родительский был
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Согласно Spring docs Я могупродолжайте делать это (используйте отношения родитель-потомок maven), если я добавлю управление зависимостями, например, так:
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
вместо родителя Spring Boot.
Я сделал это, но теперь мои модульные тесты не запускаются, когда я запускаю mvn из командной строки. Модульные тесты все еще работают от Intellij, но что-то в новом parent-child / changes приводит в замешательство mvn и не позволяет запускать тесты.
Вот pom.xml из модуля, который больше не запускает свои тесты:
<project xmlns=...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>abcd</groupId>
<artifactId>abcd.parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>entities</artifactId>
<name>entities</name>
<description>Entities and Repositories</description>
<properties>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Этот модуль является библиотечным модулем, который не содержит @SpringBootApplication
, но тесты выполнялись до преобразования в структуру maven parent-child.
Редактировать:
Этот проект имеет как junit 4, так и junit-jupiter-api 5.5.2 в своих зависимостях. При использовании org.junit.jupiter.api.Test (5.5.2) тесты не запускаются. При использовании org.junit.Test (4.12) тест выполняется, но репозиторий Autowired не вводится (ноль). (Репозиторий Autowired находится в другом модуле.)
Spring неправильно обрабатывает зависимости при использовании обычной дочерней-родительской структуры maven.