2016-10-17 3 views
4

У меня есть проект maven с тестовым классом, который находится в src/test/java/MyDevClass, который предназначен только для целей разработки/тестирования. Я хотел бы использовать его, когда начинаю spring-boot-maven-plugin с командной строки mvn spring-boot:run.Spring Boot useTestClasspath бросает CannotLoadBeanClassException и ClassNotFoundException

Итак, мой 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> 

Что мне не хватает?

+0

Я не понимаю. Почему вы хотите, чтобы он был зарегистрирован в производственном контексте, когда это тестовый класс? Не имеет смысла. – luboskrnac

+0

Несвязанный, но [не помещайте приложение в пакет по умолчанию] (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-using-the-default-package). –

+0

Привет @luboskrnac. Правильно, я не хочу этого в производстве. Я создам для этого профиль maven. – Rafa

ответ

1

Плагин для maven плагинов не включает источники (и ресурсы) текущего модуля в класс пути, даже если для useTestClasspath установлено значение true.

Я выполнил раздвоенное исполнение с подробным протоколированием (flag to Maven), а в плагине указан путь к классу JVM с разветвленной цепью. Тестовые классы не были включены.

Если вы посмотрите на плагин sources (версия 1.5.3 на момент написания), флаг useTestClasspath используется только в методе addDependencies.

Я вижу два варианта, как обходные

  1. Использование <folders> в конфигурации плагина

    <folders> 
        <folder>${project.build.testOutputDirectory}</folder> 
    </folders> 
    

    Проблема здесь состоит в том, что папка добавляется в начале пути к классам, в то время как тестовые файлы являются предпочтительными в все кончено.

  2. Создайте еще один модуль Maven с тестовыми классами и ресурсами и добавьте его как зависимость <scope>test</scope>.
+0

В итоге я делаю что-то похожее на ваше предложение # 2 – Rafa

 Смежные вопросы

  • Нет связанных вопросов^_^