虽然 运行 作为 jar 应用程序,但无法在 spring boot 中访问静态文件
While running as a jar application, Not able to access static files in springboot
我有一个具有以下文件夹结构的基本 springboot 应用程序。在 webapps 里面我有一些图片和 css.
如果我 运行 使用我的 Intellij IDE,我可以访问图像和 css
在 localhost:8080/images/test.png
但是如果我创建一个 fat jar 并 运行 它使用 java -jar demo.jar
然后我无法访问这些图像或 css 文件夹
这就是我使用 Maven 插件构建 jar 的方式
<build>
<resources>
<resource>
<directory>src/main/webapp</directory>
<includes>
<include>css/default.css</include>
<include>images/*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
如何确保这些图像和 css 文件在运行作为 jar 文件
时可用
问题是在JAR-file的情况下,src/main/webapp
没有特殊意义。不建议按照the documentation使用:
Do not use the src/main/webapp
directory if your application is packaged as a jar. Although this directory is a common standard, it works only with war packaging, and it is silently ignored by most build tools if you generate a jar.
完成这项工作的方法是将 src/main/webapp
视为普通的 类路径目录 。您通过添加 <resources>
标签做到了这一点。
但是,Spring 引导仅提供来自某些文件夹(/public
、/static
或 /META-INF/resources
)的静态内容。由于您没有将文件放在这样的文件夹中,因此 Spring boot 不会为它们提供服务。
要解决这个问题,您需要将文件放在 src/main/resources/public(推荐)或 src/main/webapp/public[=31= 中].如果移动文件不是一个选项,您还可以更改 Maven 以将其放入该目录中:
<resources>
<resource>
<directory>src/main/webapp</directory>
<targetPath>public/</targetPath> <!-- Add this -->
<includes>
<include>css/default.css</include>
<include>images/*</include>
</includes>
</resource>
</resources>
我有一个具有以下文件夹结构的基本 springboot 应用程序。在 webapps 里面我有一些图片和 css.
如果我 运行 使用我的 Intellij IDE,我可以访问图像和 css
在 localhost:8080/images/test.png
但是如果我创建一个 fat jar 并 运行 它使用 java -jar demo.jar
然后我无法访问这些图像或 css 文件夹
这就是我使用 Maven 插件构建 jar 的方式
<build>
<resources>
<resource>
<directory>src/main/webapp</directory>
<includes>
<include>css/default.css</include>
<include>images/*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
如何确保这些图像和 css 文件在运行作为 jar 文件
时可用问题是在JAR-file的情况下,src/main/webapp
没有特殊意义。不建议按照the documentation使用:
Do not use the
src/main/webapp
directory if your application is packaged as a jar. Although this directory is a common standard, it works only with war packaging, and it is silently ignored by most build tools if you generate a jar.
完成这项工作的方法是将 src/main/webapp
视为普通的 类路径目录 。您通过添加 <resources>
标签做到了这一点。
但是,Spring 引导仅提供来自某些文件夹(/public
、/static
或 /META-INF/resources
)的静态内容。由于您没有将文件放在这样的文件夹中,因此 Spring boot 不会为它们提供服务。
要解决这个问题,您需要将文件放在 src/main/resources/public(推荐)或 src/main/webapp/public[=31= 中].如果移动文件不是一个选项,您还可以更改 Maven 以将其放入该目录中:
<resources>
<resource>
<directory>src/main/webapp</directory>
<targetPath>public/</targetPath> <!-- Add this -->
<includes>
<include>css/default.css</include>
<include>images/*</include>
</includes>
</resource>
</resources>