【问题标题】:Intellij Run Configuration Spring Boot vs Maven IssuesIntellij 运行配置 Spring Boot 与 Maven 问题
【发布时间】:2017-12-01 08:26:47
【问题描述】:

我正在尝试使用 Intellij IDEA 运行我的 Spring Boot 项目。 这个项目是 Spring MVC 类型的,意味着它在路径 main/webapp/WEB-INF/jsp 中有 JSP 文件。

我的application.properties 有这些设置:

spring.view.prefix=/WEB-INF/jsp/
spring.view.suffix=.jsp

当我在 Intellij 中将项目作为“Spring Boot 运行配置”运行时,服务器无法识别 JSP 文件的路径。这是我收到的消息:

z

如果我使用命令spring-boot:run 使用“Maven 运行配置”运行项目,一切正常。

我不知道为什么会这样。项目的代码和设置与每个运行配置相同。

你可以试试这个项目(不是我的项目)来理解我的意思https://github.com/mariuszs/spring-boot-web-jsp-example

我的项目也是如此。 我应该注意,当项目使用 Spring Boot Run Configuration 运行时,我确实在控制台中看到控制器映射正确。

2017-06-28 08:29:13.906  INFO 10308 --- [           main] o.s.w.s.h.SimpleUrlHandlerMapping        : Mapped URL path [/login] onto handler of type [class org.springframework.web.servlet.mvc.ParameterizableViewController]

2017-06-28 08:29:13.835  INFO 10308 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/login],methods=[GET]}" onto public java.lang.String com.intuit.mintbills.controllers.generic.LoginController.getLoginPage()

【问题讨论】:

标签: java maven jsp intellij-idea spring-boot


【解决方案1】:

我通过在运行配置中将工作目录设置为 $MODULE_DIR$ 解决了这个问题。

【讨论】:

  • 是的!问题是 IntelliJ 不会自动将 JSP 文件等包含到类路径中
  • 或 $MODULE_DIR$ 也适用于我,如果不是 $MODULE_DIR$
  • @John - 你能改正错字吗?我看不出变量名有什么不同。
  • @Muzammil 对不起我的错。我的意思是说 $ContentRoot$。
【解决方案2】:

这是 IntelliJ 和 Spring boot 的问题。您应该检查以下事项:

网络方面

确保您已启用 Web 方面。示例项目没有web.xml 文件,因此,IntelliJ 不会选择src/main/webapp。您可以将虚拟web.xml 文件添加到src/main/webapp/WEB-INF 并重新导入项目,或者您可以手动添加web facet 并正确配置它。如果 web facet 配置正确,您应该会在 webapp 文件夹中看到一个蓝色圆圈。

一个虚拟web.xml文件的例子:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
</web-app>

这是src/main/webapp文件夹中的“蓝点”:

提供的依赖项

IntelliJ 的另一个问题是提供的依赖项没有正确获取。您通常可以通过打开 Project Structure...、打开 Modules 并选择 Dependencies 选项卡来解决此问题。在这里,您可以覆盖依赖项的范围,因此在您的情况下,我建议将 tomcat-embed-jasperecj 都配置为 Compile

我最近没有这样做,但是每次您更改 pom.xml 时,这可能会被覆盖。在这种情况下,我建议您覆盖 &lt;scope&gt; pom.xml

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

如果您计划在 Web 容器(例如外部 Tomcat)上部署应用程序,您可能希望使用配置文件,否则这可能会导致冲突,因为这些依赖项是由 Web 容器提供的。

JSP 限制

还建议您将打包更改为 WAR,因为有一些 known limitations 通过将 JSP 与 JAR 文件一起使用。引用文档:

在运行使用嵌入式 servlet 容器(并打包为可执行存档)的 Spring Boot 应用程序时,JSP 支持存在一些限制。

  • 对于 Tomcat,如果您使用 war 打包,它应该可以工作,即可执行的 war 可以工作,并且还可以部署到标准容器(不限于,但包括 Tomcat)。由于 Tomcat 中的硬编码文件模式,可执行 jar 将无法工作。
  • 对于 Jetty,如果您使用 war 打包,它应该可以工作,即可执行的 war 可以工作,并且还可以部署到任何标准容器。
  • Undertow 不支持 JSP。
  • 创建自定义 error.jsp 页面不会覆盖错误处理的默认视图,应改为使用自定义错误页面。

【讨论】:

  • 这在我在问题中提到的示例项目中有效,但由于某种原因在我自己的项目中它不起作用......我不知道为什么。在我的项目中,我试图在特定模块而不是整个项目中运行配置。
  • 您说要使用蓝点图标制作 webapp,但从 intellij 文档来看,这意味着该文件夹是一个包,但它是吗?当我配置 Web Facets 时,我会看到一个带有地球仪的文件夹图标。我有 2015 版的 Intellij。
  • @OmriYaHoo 可能是由于版本不同。一个包确实也有一个点,但我注意到这个点比 webapp 文件夹上的点小,包现在有一个黑点,所以我猜这是 IntelliJ 2015 和 IntelliJ 2017 之间的变化。
  • 已尝试使用 2017 版。我们现在在 webapp 文件夹上有了蓝点,一切似乎都已正确配置。遗憾的是,在将项目作为 Spring Boot 运行配置运行时,我仍然无法映射 JSP。 Maven 运行配置运行良好,不知道出了什么问题。
  • 好吧,那么您遇到的问题与您提到的示例代码不同。无能为力,因为我无法复制它。创建一个minimal reproducible example
猜你喜欢
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 2019-12-15
  • 2016-09-16
  • 2020-01-05
  • 1970-01-01
  • 2019-01-04
相关资源
最近更新 更多