У меня есть приложение Maven Мультиконтроллера который использует Spring загрузку:Spring тестового приложение загрузки многомодульной Maven
- spring boot parent
- myproject parent (both parent and module pom)
- module1
- module2
- module-it (integration tests)
В моем модуле-он, добавить другие модули в своих зависимости и настроить Maven-failsafe- плагин следующим образом:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Когда я строю свой проект с Maven, я получаю "строить успеха":
mvn clean install
Пока все хорошо.
Однако я хотел бы, чтобы каждый из моих модулей был исполняемым банком в конце сборки. С приведенными выше настройками манифест не определен, и банка не является исполняемой. Чтобы устранить эту проблему, я добавил следующий в моих Module1 и module2 п файлов:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
С этой установкой, мой файл банка является исполняемым, но я не могу построить больше. Классы, которые я использую в своем модуле, не найдены.
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project module-it: Compilation failure: Compilation failure:
[ERROR] /home/user/<path-to-project>/testing/module-it/src/test/java/com/mycompany/testing/greeting/GreetingControllerIT.java:[20,17] cannot find symbol
[ERROR] symbol: class GreetingController
[ERROR] location: class com.mycompany.testing.greeting.GreetingControllerIT
[ERROR] /home/user/<path-to-project>/testing/module-it/src/test/java/com/mycompany/testing/hello/HelloControllerIT.java:[20,17] cannot find symbol
[ERROR] symbol: class HelloController
[ERROR] location: class com.mycompany.testing.hello.HelloControllerIT
[ERROR] /home/user/<path-to-project>/testing/module-it/src/test/java/com/mycompany/testing/greeting/GreetingControllerIT.java:[16,27] cannot find symbol
[ERROR] symbol: class GreetingController
[ERROR] /home/user/<path-to-project>/testing/module-it/src/test/java/com/mycompany/testing/hello/HelloControllerIT.java:[16,27] cannot find symbol
[ERROR] symbol: class HelloController
Мои тесты имеют следующий вид (Мет для HelloControllerIT.java):
@RunWith(SpringRunner.class)
@SpringBootTest(classes = GreetingController.class)
public class GreetingControllerIT {
@Autowired
private GreetingController greetingController;
@Test
public void getIT_OK() throws Exception {
Assert.assertEquals("My greetings", greetingController.getStr());
}
}
И контроллеры имеют эту форму (метод getStr() только здесь, чтобы проверить конфигурацию):
@RestController
public class GreetingController {
public String getStr() {
return "My greetings";
}
@RequestMapping(value = "/greeting", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public String get() {
return "greeting";
}
}
Не могли бы вы помочь мне понять, почему Spring-boot-maven-plugin заставляет мою сборку терпеть неудачу и как я могу решить проблему?
Я знаю:
- мои тесты не являются интеграционными тестами на данный момент. Это всего лишь пример;
- Согласно ответам, которые я нашел в stackoverflow, я мог бы добавить файл, такой как тот, который приведен ниже, а затем использовать @ContextConfiguration, но я попытался и не изменил вывод сборки Maven.
@Configuration
@ComponentScan(basePackages = "com.mycompany.testing")
public class AppConfig {
}
Заранее спасибо за вашу помощь.