In the Spring Boot’s docs here, about serving static content, it says:
By default Spring Boot will serve static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpath.
I found that all the content in the directory:
src/main/resources
will be copied inside the classpath, so I can put my static content in:
src/main/resources/static
and all will work fine and I’m happy since I can have my static content under the src
directory.
But, I have some questions about this:
- Why the documentation doesn’t say to put static content in
src/main/resources/static
instead of speaking about the classpath (I think this is a bit confusing)? - Is it good to assume that the content in
src/main/resources/
will be always copied in the classpath? - Is there some Spring Boot official documentation explaining what I’m supposed to find in the classpath other than Java classes and packages (up to now I only know I can found all the content from
src/main/resources/
)?
Advertisement
Answer
/src/main/resources
is a Maven project structure convention. It’s a path inside your project where you place resources. During the build step, Maven will take files in there and place them in the appropriate place for you to use them in your runtime classpath, eg in an executable .jar
, some physical file system location used in the classpath (with java
‘s -cp
option), etc.
I could choose to build my application myself or with a different build tool. In such a case, /src/main/resources
would not exist. However, the intention is for the classpath to be the same, ie. to contain the same resources and .class
files.
The Spring boot documentation talks about the classpath because it shouldn’t make assumptions about how your project is set up.