2

我已经为以下问题苦苦挣扎了大约一周,但我找不到任何有同样问题的人。

我有一个 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 示例并创建了一个父 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 boot 插件导航到子模块?

需要注意的是,我最近将我的“标准”spring MVC 项目移植到了 spring boot。在 spring boot 之前,我使用了 tomcat maven 插件而不是 spring boot 插件,并且那个插件工作得很好。

4

0 回答 0