假设我们有一个使用 JSP 模板的基于 Spring Boot 的 Web 应用程序。甚至可以像下面的例子一样简单(来自官方 Spring Projects repository )
项目结构:
|-src/main/java/
| |-sample.tomcat.jsp
| |-SampleTomcatJspApplication.java
| |-WelcomeController.java
|-src/main/resources/
| |-application.properties
|-src/test/java/
| |-...
|-src/main/webapp/
| |-WEB-INF
| |-jsp
| |-welcome.jsp
|-pom.xml
属性文件包含 View 前缀 /WEB-INF/jsp/
和后缀 .jsp
并且在请求 /
时我们看到正确呈现的内容欢迎.jsp
。
变化
现在让我们进行以下更改
将
WelcomeController.java
复制为WelcomeController2.java
并更改位请求映射、模型属性和返回的 View 名称,例如:@RequestMapping("/2") public String welcome2(Map<String, Object> model) { model.put("message", "Hi from Welcome2"); return "welcome2"; }
将
welcome.jsp
复制为welcome2.jsp
以便src/main/webapp
如下所示:|-src/main/java/ | |-sample.tomcat.jsp | |-SampleTomcatJspApplication.java | |-WelcomeController.java | |-WelcomeController2.java ... |-src/main/webapp/ | |-WEB-INF | |-jsp | |-welcome.jsp | |-welcome2.jsp
然后在请求 /2
时,我们可以看到正确呈现的 welcome2.jsp
内容。
问题
如何将此类项目拆分为两个 maven 项目,以便 WelcomeController2.java
和 welcome2.jsp
都可以移动到其他项目(maven 依赖项)并在请求 /2
URL 时仍能成功解析?
请注意,在 Spring Boot 中,web-fragment.xml
(可以放在依赖项的 META-INF
目录中)将被忽略。
最佳答案
不幸的是,我不知道有什么简单的方法可以做到这一点,但我使用的一种方法是创建一个 Maven 构件,就像主项目的正常构件一样,在您的情况下可能是一个 WAR 构件。该项目需要依赖于您的第二个项目。那么您的第二个项目将由两个部分组成:
- 包含已编译类文件的标准 Maven JAR 工件。
- A Maven assembly ZIP 由 JSP 文件组成,这些文件也需要包含在 WAR 存档中。这将在
package
阶段从第二个项目生成,但需要使用zip
分类器作为对主项目的单独依赖项。
构建第一个项目时,您需要 unpack the assembly dependency作为 WAR 归档文件打包过程的一部分。如果您希望它在 IDE 中工作,您可能需要在相当早的阶段将其解压缩,例如 process-resources
或 generate-sources
。
关于java - 带有来自其他 Maven 模块的部分 JSP 文件的 Spring Boot 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32082674/