2016-10-01 3 views
1

У меня есть приложение 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 { 
} 

Заранее спасибо за вашу помощь.

ответ

4

Чтобы решить эту проблему, мы можем добавить классификатор, как описано в документации custom repackage classifier

плагин становится:

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <goals> 
       <goal>repackage</goal> 
      </goals> 
      <configuration> 
       <classifier>exec</classifier> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
Смежные вопросы