问题 Spring Boot类路径


在里面 Spring Boot的文档在这里关于提供静态内容,它说:

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

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

src/main/resources

将被复制到里面 类路径,所以我可以将我的静态内容放入:

src/main/resources/static

一切都会好起来,我很开心,因为我可以把我的静态内容放在 src 目录。

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

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

3359
2017-12-08 16:01


起源



答案:


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

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

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


12
2017-12-08 16:42



谢谢,这是我想要了解的。 - Andrea
知道目录有点难过 /src/main/resources 它与Spring Boot没有严格的关系,因为现在我必须记住,如果我用另一个构建工具而不是Maven(也许是Gradle?)启动Spring Boot项目,如果我将静态内容放入 /src/main/resources..:/ - Andrea
@Andrea这是一个相当广泛采用的惯例。 Gradle也支持它。 - Sotirios Delimanolis


答案:


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

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

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


12
2017-12-08 16:42



谢谢,这是我想要了解的。 - Andrea
知道目录有点难过 /src/main/resources 它与Spring Boot没有严格的关系,因为现在我必须记住,如果我用另一个构建工具而不是Maven(也许是Gradle?)启动Spring Boot项目,如果我将静态内容放入 /src/main/resources..:/ - Andrea
@Andrea这是一个相当广泛采用的惯例。 Gradle也支持它。 - Sotirios Delimanolis


类路径还包含其他库(JAR),它们也可以具有 static 文件夹,然后将其包含在服务静态资源中。因此,如果文档只会说明该文件夹 src/main/resources/static,这将是不完整的。

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

广告3:也许从官方的Oracle文档开始: https://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html。提示:当然,它不仅是资源文件夹的内容,它们在类路径中,当然也包括所有已编译的类,因此它的名称。


3
2017-12-08 16:22



感谢你的回答。在我的第3点,我的意思是“官方文档 通过Spring Boot“:有些doc在Spring Boot应用程序中解释了内容来自 src/main/resources 被复制在类路径或类似的东西中。谢谢 - Andrea
这与Spring Boot无关,所以你在Spring Boot文档中找不到任何相关内容。它是默认的Maven(或Gradle,如果你使用它)功能,它可以在每个Maven / Gradle项目中使用,而不仅仅是Spring Boot应用程序。 - dunni
谢谢,我不知道 /src/main/resources 是一个构建工具的约定,我认为是更多的Spring Boot相关。 - Andrea