2016-09-21 53 views
2

我有一個spring-boot項目,其中所有的集成測試都在單獨的模塊中,在integration-test階段使用spring-boot-maven-plugin啓動應用程序模塊,並針對它執行套件。 這個構造工作正常,直到它升級到1.4.0.RELEASE。現在我得到一個ClassNotFoundExceptionspring-boot-maven-plugin> = 1.4.0 jar結構變化

當我檢查了「1.4.0」jar結構後,我發現它與「1.3.6」不同,所有軟件包都不在頂層,而是在BOOT-INF等文件夾中(請參閱屏幕下面的圖片),類加載器不能再找到在「mainClass」中定義的包。

有人有解決它的想法,如果這種解決方案是可能的新版本?

在此先感謝!

jar structure < 1.4.0

jar structure >= 1.4.0

ITEST模塊:

<!-- dependency to the app module --> 
<dependency> 
    <groupId>com.company.app</groupId> 
    <artifactId>app-module</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
</dependency> 
... 
<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <version>${spring.boot.version}</version> 
    <configuration> 
     <mainClass>com.company.app.RunServer</mainClass> 
    </configuration> 
    <executions> 
     <execution> 
      <id>pre-integration-test</id> 
      <goals> 
       <goal>start</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>post-integration-test</id> 
      <goals> 
       <goal>stop</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

應用模塊:

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <goals> 
       <goal>repackage</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

回答

2

一種如何使用Spring的啓動應用程序作爲一個依賴的解決方案,可以發現here

從本質上講,在你的Maven構建,補充一點:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <configuration> 
      <classifier>exec</classifier> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 

這將導致您的主jar神器(這將是建立在一個標準的Maven構建的一個),以正常的結構,所以你可以依靠並且spring-boot-maven-plugin將使用exec分類器將jar重新打包爲第二個工件,這是一個可執行文件。