У нас есть проект на основе Spring, который создает библиотеку как банка. Эта библиотека включает в себя все обычные уровни контроллера/сервиса/jpa (репозиториев), которые вы могли ожидать, но не имеет загрузочного приложения, которое могло бы все это запустить.
Идея заключается в том, что различные проекты в нашей организации могут импортировать jar и мгновенно добавить общий (HTTP) API.
Модульные тесты работают нормально.
*Тесты IT.java — другое дело.Запускаются изолированно IDE от иерархии test/java/, они работают нормально и проходят успешно.
Однако при запуске через maven как часть сборки они терпят неудачу.
[ОШИБКА] ControllerIT » IllegalState Невозможно найти @SpringBootConfiguration...
У нас есть конфигурация загрузки в иерархии тестов, которую ИТ-специалисты должны использовать при запуске через IDE, но при запуске сборка maven, кажется, не может быть найдена для запуска приложения (по понятным причинам, поскольку она находится в дереве тестовых пакетов).
Имеющийся у нас загрузочный файл предназначен для не более чем тестового пакета для запуска библиотека для запуска ИТ.
У нас есть h2 в области тестирования Maven, но он не нужен в окончательной библиотеке (это зависит от хост-приложения, предоставляющего источник данных /connection и т. д.).
Требование:
[*]Запустите библиотеку API в приложение для тестирования
[*]Запускайте тесты как часть сборки Maven
[*]H2 не должен попасть в окончательный jar-файл
< /ul>
Симптомы при запуске установки mvn
[ОШИБКА] ControllerIT » IllegalState Невозможно найти @SpringBootConfiguration...
Предположительно, где-то в pom нужна какая-то конфигурация? Уже использую package.Boot в конфигурации плагина Springboot maven.
Может быть, просто нужно выяснить волшебную конфигурацию, чтобы указать ее на src/test/... Boot.class, а не на src/main/...Boot .class
Вопрос(ы):
Есть ли у Spring «правильный» способ достичь того, чего мы хотим ( Я бы выбрал MicroServices, но это не вариант, потому что... причины)?
Как нам следует реализовать ИТ-технологии для приложения SpringBoot, управляемого H2, если мы не хотим включать загрузочный класс (или библиотека H2) в jar продукта?
Должны ли мы создать отдельный модуль Maven только для ИТ-специалистов (с зависимостью от библиотечного модуля)?Сокращенное название Maven:
Код: Выделить всё
2.1.13.RELEASE
org.springframework.boot
spring-boot-dependencies
${version.spring-boot}
pom
import
org.springframework.boot
spring-boot-starter-data-rest
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
junit
junit
com.h2database
h2
test
org.mockito
mockito-core
2.28.2
test
org.mockito
mockito-junit-jupiter
2.28.2
test
org.junit.jupiter
junit-jupiter
5.4.0
pom
test
org.junit.jupiter
junit-jupiter-api
test
org.junit.jupiter
junit-jupiter-engine
test
org.springframework.boot
spring-boot-maven-plugin
${version.spring-boot}
org.my.packages.test.Boot
org.apache.maven.plugins
maven-surefire-plugin
3.0.0-M5
true
org.apache.maven.plugins
maven-failsafe-plugin
3.0.0-M5
true
integration-test
verify
Код: Выделить всё
@SpringBootApplication()
public class Boot extends SpringBootServletInitializer
{
public static void main(String[] args)
{
SpringApplication.run(Boot.class, args);
}
}
Код: Выделить всё
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ControllerIT
{
@Autowired
private TestRestTemplate restTemplate;
...
}
В итоге я получил...
Код: Выделить всё
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = ITConfig.class)
Код: Выделить всё
@SpringBootApplication()
public class ITConfig extends SpringBootServletInitializer
{
public static void main(String[] args)
{
SpringApplication.run(org.lhasalimited.libraries.ITConfig.class, args);
}
}
Подробнее здесь: https://stackoverflow.com/questions/649 ... at-isnt-an