我在Maven v3.3.3中使用Spring-Boot v1.3.0.M5。我曾经能够使用此命令从控制台运行我的Spring Boot(启动)应用程序。
mvn clean package spring-boot:run
但是,我不得不修改我的pom.xml
以考虑不同的环境构建。特别是,我使用Maven配置文件来修改启动应用程序的属性文件。现在,当我运行前面提到的命令时,启动应用程序无法运行并抱怨以下异常。
引起:java.lang.NumberFormatException:对于输入字符串:“$ {MULTIPART.MAXREQUESTSIZE}”
我有一个位于src/main/resources/config/application.properties
的属性文件。这个属性文件有一堆键值对,如下所示。
multipart.maxFileSize=${multipart.maxFileSize}
multipart.maxRequestSize=${multipart.maxRequestSize}
然后在我的pom.xml
中,我的构建定义如下。
<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>
我注意到如果我输入mvn clean package
并查看jar
文件,application.properties
文件就在jar中。
但是,如果我输入mvn clean package spring-boot:run
,那么jar中的applications.properties
文件不是。实际上,src/main/resources
下的任何内容都不会进入jar文件。
这个问题对我来说有点烦人,因为如果我想从命令行运行我的启动应用程序,我现在必须做两个步骤。
mvn clean package
java -jar ./target/app-0.0.1-SNAPSHOT.jar
关于我做错的任何想法?
答案 0 :(得分:10)
described in the documentation mvn spring-boot:run
在您的类路径前添加src/main/resources
以默认支持热重新加载。你可以轻松关闭它
<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>
答案 1 :(得分:1)
试试这个:
<resources>
<resource>
<directory>src/main/resources/config</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
答案 2 :(得分:0)
自Spring Boot 1.3起,为了按预期方式过滤资源,我们必须使用新的@@
格式:
some.key = @value@
代替经典:
some.key = ${value}
相关的春季启动问题:https://github.com/spring-projects/spring-boot/issues/980