resources in a Spring Boot application are missing from jar file when using Spring Boot Maven Plugin
Solution 1
As described in the documentation mvn spring-boot:run
adds src/main/resources
in front of your classpath to support hot reload by default. You can turn this off easily
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.2.7.RELEASE</version>
<configuration>
<addResources>false</addResources>
</configuration>
</plugin>
...
</plugins>
...
</build>
Solution 2
Try just this :
<resources>
<resource>
<directory>src/main/resources/config</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
Related videos on Youtube
Jane Wayne
Updated on July 05, 2022Comments
-
Jane Wayne almost 2 years
I am using Spring-Boot v1.3.0.M5 with Maven v3.3.3. I used to be able to run my Spring Boot (boot) application from the console with this command.
mvn clean package spring-boot:run
However, I've had to revise my
pom.xml
to account for different environment builds. In particular, I am using Maven profiles to modify the properties files of boot application. Now when I run the previously mentioned command, the boot application fails to run and complains with the following exception.Caused by: java.lang.NumberFormatException: For input string: "${MULTIPART.MAXREQUESTSIZE}"
I have a properties file located at
src/main/resources/config/application.properties
. And this properties file has a bunch of key-value pairs which looks like the following.multipart.maxFileSize=${multipart.maxFileSize} multipart.maxRequestSize=${multipart.maxRequestSize}
Then in my
pom.xml
, my build is defined as follows.<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/*.properties</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <excludes> <exclude>**/*.properties</exclude> </excludes> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <profiles> <!-- development --> <profile> <id>env-dev</id> <activation> <activeByDefault>true</activeByDefault> <property> <name>env</name> <value>dev</value> </property> </activation> <properties> <multipart.maxFileSize>250MB</multipart.maxFileSize> <multipart.maxRequestSize>250MB</multipart.maxRequestSize> </properties> </profile> <!-- staging --> <profile> <id>env-stg</id> <activation> <activeByDefault>false</activeByDefault> <property> <name>env</name> <value>stg</value> </property> </activation> <properties> <multipart.maxFileSize>500MB</multipart.maxFileSize> <multipart.maxRequestSize>500MB</multipart.maxRequestSize> </properties> </profile> <profiles>
I noticed that if I type in
mvn clean package
and look inside thejar
file, theapplication.properties
file is inside the jar.However, if I type in
mvn clean package spring-boot:run
, then theapplications.properties
file is not inside the jar. In fact, nothing undersrc/main/resources
makes it into the jar file.This problem is a little annoying for me because if I want to run my boot application from the command line, I have to do two steps now.
mvn clean package
java -jar ./target/app-0.0.1-SNAPSHOT.jar
Any ideas on what I am doing wrong?
-
Jane Wayne over 8 yearsThat was the first try I made, and it didn't work. With that I get this exception:
FileNotFoundException: class path resource [config/custom-application.properties] cannot be opened because it does not exist
. Please note that in addition to the Spring Bootapplication.properties
file, I have one more additional filecustom-application.properties
also in thesrc/main/resources/config
directory (I am actually loading this properties file up manually). Thanks, but that doesn't work or help. Again, nothing insrc/main/resources
is being copied into the jar or thetarget/classes
dir. -
Jane Wayne over 8 yearsI tried to upgrade my spring-boot version to 1.3.2.RELEASE, and now the solution you proposed breaks. The properties files are being copied over but the Maven build is not replacing the properties values. The documentation you referred me to even says
Note that a side effect of using this feature is that filtering of resources at build time will not work.
Any ideas? I didn't want to post a new question. -
Stephane Nicoll over 8 yearsRead the release notes? I don't think this has anything to do with your problem. That's only controlling what happens when you run the app using the Maven plugin.
-
Chevalier about 8 yearsi find the same question with you and how do you fix that?
-
Fernando over 6 yearsThis solution worked for me. I had some .jrxml files that I wanted to include.
-
rogerdpack over 5 yearsBe careful if you have an override resoureces/resource/directory sometimes it disables the default one, so you have to manually add that back in there too...see also stackoverflow.com/questions/35417086/…