Spring Boot 类路径
Posted
技术标签:
【中文标题】Spring Boot 类路径【英文标题】:Spring Boot classpath 【发布时间】:2016-03-13 15:22:25 【问题描述】:在Spring Boot's docs here,关于提供静态内容,它说:
默认情况下,Spring Boot 将提供目录中的静态内容 在中称为 /static(或 /public 或 /resources 或 /META-INF/resources) 类路径。
我发现目录中的所有内容:
src/main/resources
将被复制到 classpath 中,因此我可以将我的静态内容放入:
src/main/resources/static
一切都会正常工作,我很高兴,因为我可以在src
目录下拥有我的静态内容。
但是,我对此有一些疑问:
-
为什么文档没有说将静态内容放在
src/main/resources/static
中而不是谈论类路径(我认为这有点令人困惑)?
是否可以假设src/main/resources/
中的内容将始终复制到类路径中?
是否有一些 Spring Boot 官方文档解释了我应该在类路径中找到除 Java 类和包之外的内容(到目前为止,我只知道我可以找到来自 src/main/resources/
的所有内容)?
【问题讨论】:
【参考方案1】:类路径还包含其他库 (JAR),其中也可以有一个 static
文件夹,然后将包含该文件夹以提供静态资源。因此,如果文档只说明文件夹src/main/resources/static
,那将是不完整的。
广告 2:只要您不弄乱默认的 Maven 配置,就可以安全地假设这一点。
广告 3:可能从 Oracle 官方文档开始:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html。提示:当然,不仅是类路径中的资源文件夹的内容,当然还有所有已编译的类,因此得名。
【讨论】:
感谢您的回答。在我的第三点中,我的意思是“official docs by Spring Boot”:一些文档解释了在 Spring Boot 应用程序中,src/main/resources
的内容被复制到类路径或类似的东西中。谢谢
这与 Spring Boot 无关,因此您不会在 Spring Boot 文档中找到任何相关内容。它是默认的 Maven(或 Gradle,如果你使用它)功能,它在每个 Maven/Gradle 项目中都可用,而不仅仅是 Spring Boot 应用程序。
谢谢,我不知道/src/main/resources
是一个构建工具的约定,我以为更多的是与Spring Boot 相关的。【参考方案2】:
/src/main/resources
是Maven 项目结构约定。这是您放置资源的项目内部的路径。在构建步骤期间,Maven 将把文件放入那里并将它们放置在适当的位置,以便您在运行时类路径中使用它们,例如在可执行文件.jar
中,类路径中使用的一些物理文件系统位置(java
的-cp
选项)等。
我可以选择自己构建应用程序或使用其他构建工具。在这种情况下,/src/main/resources
将不存在。但是,目的是使类路径相同,即。包含相同的资源和.class
文件。
Spring 引导文档讨论了类路径,因为它不应该假设您的项目是如何设置的。
【讨论】:
知道/src/main/resources
目录与 Spring Boot 没有严格的关系有点难过,因为现在我必须记住,如果我用另一个构建工具而不是Maven(也许是 Gradle?)如果我将静态内容放在 /src/main/resources
.. 中,该项目将无法运行:/
@Andrea 这是一个相当广泛采用的约定。 Gradle supports it, too.以上是关于Spring Boot 类路径的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 类路径配置文件覆盖外部 application.properties
Spring Boot Test MalformedURLException:未知协议:类路径
Spring boot graphql 在类路径中找不到 graphql 模式文件