#spring-boot #maven-plugin
#весенняя загрузка #maven-плагин
Вопрос:
У меня есть проект maven с тестовым классом, расположенным в src/test/java/MyDevClass
котором, который предназначен только для целей разработки / тестирования. Я хотел бы использовать его при запуске spring-boot-maven-plugin с помощью командной строки mvn spring-boot:run
.
Итак, мой pom.xml
содержит:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- TODO: Will create a maven profile and have useTestClasspath only for development/testing -->
<useTestClasspath>true</useTestClasspath>
</configuration>
</plugin>
</plugins>
</build>
Но я получаю следующую ошибку:
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [MyDevClass]
Caused by: java.lang.ClassNotFoundException: MyDevClass
Достаточно интригующе, у меня есть другой проект, использующий tomcat7-maven-plugin, и он работает нормально:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<useTestClasspath>true</useTestClasspath>
</configuration>
</plugin>
Чего мне не хватает?
Комментарии:
1. Я не понимаю. Почему вы хотите, чтобы он был зарегистрирован в производственном контексте, когда это тестовый класс? Не имеет смысла.
2. Не связанные, но не помещайте свое приложение в пакет по умолчанию .
3. Привет @luboskrnac. Правильно, я не хочу, чтобы это было в производстве. Для этого я создам профиль maven.
4. Привет, Стефан Николл, никаких проблем. Я оставил пакет по умолчанию для простоты.
Ответ №1:
Плагин Spring-boot maven не включает тестовые источники (и ресурсы) текущего модуля в classpath, даже если useTestClasspath
для него установлено значение true.
Я запустил разветвленное выполнение с подробным протоколированием ( -X
флаг для Maven), и плагин указал разветвленный путь к классу JVM. Тестовые классы не были включены.
Если вы посмотрите на исходные коды плагина (версия 1.5.3 на момент написания), флаг useTestClasspath
используется только в addDependencies
методе.
Я вижу два варианта в качестве обходных путей
-
Добавьте
target/test-classes
каталог в путь к запускаемому классу:<directories> <directory>${project.build.testOutputDirectory}</directory> </directories>
Для более старой версии плагина используйте:
<folders> <folder>${project.build.testOutputDirectory}</folder> </folders>
Проблема здесь в том, что папка добавляется в начало classpath, в то время как тестовые файлы предпочтительнее в его конце.
-
Создайте другой модуль Maven с тестовыми классами и ресурсами и добавьте его в качестве
<scope>test</scope>
зависимости.
Комментарии:
1. В итоге я делаю что-то похожее на ваше предложение # 2