以下の問題に約1週間苦労しましたが、同じ問題を抱えている人を見つけることができません。
以下に示すように、いくつかのサブモジュールで構築された Maven プロジェクトがあります。
parent-module
child A (common library)
child B (spring boot application - no static content)
child C (spring boot application - static content and JSP
B と C の統合テストでは、統合テストの前に WAR を実行し、統合テストの後に停止する spring-boot-maven-plugin を使用しています。
子モジュールに移動して「mvn verify」を実行しても問題ありません。ただし、親モジュールで「mvn verify」を実行すると、子 A と B は合格しますが、静的コンテンツと JSP ページが見つからないため、子 C は失敗します。
Maven が子モジュールからではなく親モジュールからアプリケーションを実行するため、リソースと WEB-INF フォルダーが何らかの理由で tomcat によって見つからないという事実による問題だと思います。
たとえば、親プロジェクトで次のコマンドを実行します。
parent> mvn -pl ../childC spring-boot:run
子 C を開始しますが、アプリケーションは静的リソースを見つけられません。ただし、子 C モジュールからの次のコマンドは正常に機能します。
childC> mvn spring-boot:run
また、自分のプロジェクトの依存関係で怪しいことをしていないことを確認するために、Spring Boot Tomcat JSP の例をダウンロードし、次のような親 POM を作成しました。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<version>0.0.1-SNAPSHOT</version>
<artifactId>my-parent</artifactId>
<packaging>pom</packaging>
<name>my-parent</name>
<groupId>com.test</groupId>
<modules>
<module>../jspsample</module>
</modules>
</project>
そして、Spring Boot サンプル pom の親を以下のように変更しました。
...
<parent>
<groupId>com.test</groupId>
<artifactId>my-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../myparent</relativePath>
</parent>
...
親モジュールから以下を実行すると
myparent> mvn -pl ../jspsample spring-boot:run
そして、ブラウザでhttp://localhost:8080を開きます。
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sun Sep 18 20:38:23 CEST 2016
There was an unexpected error (type=Not Found, status=404).
/WEB-INF/jsp/welcome.jsp
そのため、親モジュールから spring-boot:run が機能しないようです。この問題の回避策はありますか。WAR/JAR を開始する前に、子モジュールに移動するように Maven またはスプリング ブート プラグインに指示することは可能ですか?
最近、「標準」のSpring MVCプロジェクトをSpring Bootに移植したことに注意してください。スプリング ブートの前に、スプリング ブート プラグインの代わりに tomcat maven プラグインを使用しましたが、完全に正常に動作していました。