Я не думаю, что можно выполнить интеграционные тесты с другим модулем, используя spring-boot-maven-plugin
, потому что цель start
, похоже, не дает вам средства для разрешения приложения из локального репозитория или реактора Maven,что, вероятно, то, что вы хотите.Свойство конфигурации project
, которое вы пробовали, не предназначено для переопределения таким образом.Выполнения плагина должны быть настроены с использованием только свойств, перечисленных в цели плагина документы .
Вместо этого я думаю, что у вас есть как минимум два возможных подхода:
- Используйте другой плагин для управления сервером;или
- Запустите сервер непосредственно из тестов в коде.
Опция 1
Для этого, я думаю, вам нужен подход, который копирует нужный артефакт сервераработать вместе с чем-то более общим для запуска и остановки, например cargo-maven2-plugin или process-exec-maven-plugin .
Justнастроить цель repackage
в сборке артефакта сервера:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludeDevtools>true</excludeDevtools>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
Затем из модуля интеграционных тестов вы можете сделать что-то вроде:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-server-artifact</id>
<goals>
<goal>copy</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${project.groupId}</groupId>
<artifactId>SpringBoot2App</artifactId>
<version>${project.version}</version>
<classifier>jar</classifier>
<outputDirectory>${project.build.directory}</outputDirectory>
<destFileName>app.jar</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.bazaarvoice.maven.plugins</groupId>
<artifactId>process-exec-maven-plugin</artifactId>
<version>0.7</version>
<executions>
<execution>
<id>start-server</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<name>run-server</name>
<waitForInterrupt>false</waitForInterrupt>
<healthcheckUrl>http://localhost:8080</healthcheckUrl>
<arguments>
<argument>java</argument>
<argument>-jar</argument>
<argument>${project.build.directory}/app.jar</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>stop-server</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop-all</goal>
</goals>
</execution>
</executions>
</plugin>
Опция 2
Просто объявите нормальную зависимость Maven от артефакта сервера от тестового артефакта и запустите @SpringBootApplication
класс сервера в JUnit перед хуком или что у вас есть, например
private static ConfigurableApplicationContext context;
@BeforeClass
public static void setUp() {
context = new SpringApplicationBuilder(SimpleServiceApplication.class).run();
}
@AfterClass
public static void tearDown() {
if (context != null) {
context.close();
}
}
Это может быть достаточно для вашегонеобходимо.