我已经在下面的问题上挣扎了大约一个星期,我找不到有同样问题的人 .

我有一个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的集成测试中,我使用的是spring-boot-maven-plugin,它在集成测试之前运行WAR,在集成测试之后停止 .

我没有问题导航到任何子模块并执行“mvn verify” . 但是,如果我在父模块中并执行“mvn verify”,则子A和B将通过,但子C将失败,因为无法找到静态内容和JSP页面 .

我认为问题是由于Maven将从父模块而不是从子模块运行应用程序,因此tomcat无法找到资源和WEB-INF文件夹的某些原因 .

例如,在父项目中执行以下命令:

parent> mvn -pl ../childC spring-boot:run

将启动子C,但应用程序将找不到静态资源 . 但是来自子C模块的以下命令将正常工作:

childC> mvn spring-boot:run

另外,为了检查我在自己的项目依赖项中没有做过任何可疑的事情,我下载了spring boot tomcat jsp example并创建了一个像这样的父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 启动示例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引导插件导航到子模块?

需要注意的是,我最近将我的“标准” spring MVC项目移植到 spring 启动 . 在 Spring 季启动之前,我使用了tomcat maven插件而不是spring boot插件,那个工作得非常好 .