当前位置: 首页 > 知识库问答 >
问题:

带有静态内容的Spring Boot项目在运行jar时生成404

东方高洁
2023-03-14

Spring最近关于在Spring Boot项目中使用静态web内容的博客文章(https://Spring.io/blog/2013/12/19/serving-statige-web-content-with-spring-boot)指出,可能会使用几个资源目录:

  • /META-INF/资源/
  • /资源/
  • /静态/
  • /public/

这要感谢WebMvcAutoConfiguration类,它自动将这些目录添加到类路径中。在使用spring-boot-maven-plugin spring-boot:run goal时,所有静态内容都在工作(例如:/index.html)。

当您打包Spring Boot项目并允许spring-boot-maven-plugin创建增强的JAR,然后尝试使用java-jar my-spring-boot-project.JAR运行项目时,您发现静态内容现在返回一个404错误。

共有1个答案

张翰音
2023-03-14

事实证明,虽然Spring Boot很聪明地将各种资源目录添加到类路径中,但Maven并非如此,这部分由您来处理。默认情况下,您的JAR中将只包含src/main/resources。如果您在项目的根目录中创建了一个名为/statice的文件夹(正如博客文章所暗示的),那么在使用spring-boot:run Maven goal时,它将会很好地工作,但在创建了一个jar之后就不行了。

最简单的解决方案是在/src/main/resources中创建/statice文件夹,然后Maven将其包含在JAR中。另外,您还可以向Maven项目添加其他资源位置:

<resources>
    <resource>
        <directory>src/main/resources</directory>
    </resource>
    <resource>
        <directory>static</directory>
        <targetPath>static</targetPath>
    </resource>
</resources>

我希望这对某些人有用,当你退一步来看看Maven是如何工作的时,这是很明显的,但它可能会让一些使用Spring Boot的人望而却步,因为它被设计成几乎不需要配置。

 类似资料:
  • 因此,我正在IntelliJ开发一个spring boot应用程序。使用Gradle,我创建了sprint引导jar文件。 我很难确定将JSP和静态内容(如。js文件)放在哪里,这样运行jar和从IntelliJ内部运行都能正常工作!

  • 我无法访问静态内容(angular app),甚至无法访问简单的索引。来自spring boot的html文件。我一直收到404错误。Spring没有为我提供这些静态文件。自从升级到Spring Boot 2.2.4后,我就遇到了这个问题。我必须升级以应对Zip64问题。 我的application.properties里有这样一句话: 我也有自己的staticResourceConfigurat

  • 我做了一个简单的项目,其中包含一些测试,我希望能够在其他计算机上启动测试。我使用runas构建了这个项目- 错误:在com类中找不到Main方法。实例TestPurchase,请将main方法定义为:publicstaticvoidmain(String[]args)或JavaFX应用程序类必须扩展JavaFX。应用应用 据我所知,TestNG不需要任何主方法,因为有注释。这就引出了一些问题: 我

  • 默认添加的栏目为静态浏览,是不生成静态的需要在栏目中配置是否生成静态

  • 我使用spring boot并将静态内容(html、css等)存储为。我理解不建议这样做,因为它不会存储在jar文件中(应该存储在、、、)。但我的问题不是关于在jar中存储静态内容。 这是项目结构: 如何从目标文件夹运行并让Spring Boot查找静态内容?它与类路径有关吗?我试图用选项指定类路径,但它不起作用。

  • 问题内容: 我只是想到了一种不那么直截了当的方法: 我可以以某种方式将JAR资源列表转换为内部JAR URL列表,然后可以使用openConnection()打开它。 问题答案: 您使用JarFile打开一个Jar文件。有了它,您可以使用’getEntry(String name)’或’entires’来获取ZipEntry或JarEntry(它们可以看作同一东西)。收到条目后,可以通过调用’ J