Spring Boot类路径

And*_*rea 17 java spring-mvc classpath spring-boot

Spring Boot的文档中,关于提供静态内容,它说:

默认情况下,Spring Boot将从类路径中名为/ static(或/ public或/ resources或/ META-INF/resources)的目录中提供静态内容.

我发现目录中的所有内容:

src/main/resources
Run Code Online (Sandbox Code Playgroud)

将被复制到类路径中,因此我可以将我的静态内容放入:

src/main/resources/static
Run Code Online (Sandbox Code Playgroud)

一切都会好起来,我很高兴,因为我可以在src目录下有我的静态内容.

但是,我对此有一些疑问:

  1. 为什么文档没有说静态内容src/main/resources/static而不是说类路径(我觉得这有点令人困惑)?
  2. 假设内容src/main/resources/将始终复制到类路径中,这样做是否合适?
  3. 是否有一些Spring Boot官方文档解释了我应该在除Java类和包之外的类路径中找到的内容(到目前为止我只知道我可以找到所有内容src/main/resources/)?

Sot*_*lis 23

/src/main/resources是一个Maven项目结构惯例.这是您放置资源的项目内部的路径.在构建步骤中,Maven将在其中获取文件并将它们放在适当的位置,以便在运行时类路径中使用它们,例如在可执行文件中.jar,在类路径中使用的某些物理文件系统位置(使用java's -cp选项)等.

我可以选择自己构建我的应用程序或使用不同的构建工具.在这种情况下,/src/main/resources就不存在了.但是,目的是使类路径相同,即.包含相同的资源和.class文件.

Spring启动文档讨论了类路径,因为它不应该假设您的项目是如何设置的.

  • @Andrea 这是一个非常广泛采用的约定。[Gradle 也支持它。](https://docs.gradle.org/current/userguide/java_plugin.html) (2认同)

dun*_*nni 6

类路径还包含额外的库 (JAR),它也可以有一个static文件夹,然后将包含该文件夹以提供静态资源。因此,如果文档仅说明文件夹src/main/resources/static,则它是不完整的。

广告 2:只要您不弄乱默认的 Maven 配置,就可以安全地假设这一点。

广告 3:也许从官方 Oracle 文档开始:https : //docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html。提示:当然,不仅是classpath中的resources文件夹的内容,当然还有所有编译好的类,因此得名。