我正在使用Spring Boot开发一个Web应用程序,并希望生成war而不是jar。
使用从jar转换为war的转换非常正常:http://spring.io/guides/gs/convert-jar-to-war/
但我想从战争中排除application.properties,因为我使用@PropertySource(value = "file:${OPENSHIFT_DATA_DIR}/application.properties")
来获取生产环境中的文件路径。
此方法在生成我的战争时有效,但在eclipse中我无法运行我的应用程序,因为application.properties根本没有复制到目标/类:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application.properties</exclude>
</excludes>
</resource>
</resources>
</build>
这个方法根本不起作用,我认为spring-boot-maven-plugin不支持packagingExcludes:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<packagingExcludes>WEB-INF/classes/application.properties</packagingExcludes>
</configuration>
</plugin>
</plugins>
</build>
你有其他建议吗?
由于
答案 0 :(得分:6)
尝试使用以下解决方案。这将有效:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如果您使用上述解决方案,则在Eclipse IDE中运行项目时可能会收到找不到属性文件的错误。要摆脱这种情况,您需要在运行配置中添加资源文件夹。(运行配置... - &gt;类路径 - &gt;用户条目 - &gt;高级... - &gt;添加文件夹)
答案 1 :(得分:2)
我添加的解决方案是解压缩我的打包战争,删除文件application.properties并使用maven-antrun-plugin创建一个名为ROOT.war的新战争并运行一些ant任务。
这是我在pom.xml中添加到插件中的内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>package</id>
<phase>package</phase>
<configuration>
<target>
<unzip src="target/${artifactId}-${version}.${packaging}" dest="target/ROOT/" />
<delete file="target/ROOT/WEB-INF/classes/application.properties"/>
<zip destfile="target/ROOT.war" basedir="target/ROOT" encoding="UTF-8"/>
<delete dir="target/ROOT"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
我将目标战争命名为ROOT.war因为我在openshift PaaS上使用tomcat,所以我只需复制我的ROOT.war并推送到我的openshift repo。那是
答案 2 :(得分:2)
我从您的问题中了解到,您希望将application.properties用于开发。但你不想用它来制作。
我建议使用 Spring个人资料来实现这一目标。 在您的属性文件中
我使用YML做了类似的事情。我确信必须有一种方法可以使用.properties
文件执行相同的操作。
spring:
profiles.active: development
--
spring:
profiles: development
something:
location: USA
unit1: Test1
unit2: Test2
您可以使用
在运行时更改配置文件-Dspring.profiles.active=production
答案 3 :(得分:1)
在Eclipse中运行时,在运行配置中,您需要指定Spring Boot的属性路径:
--spring.config.location=${workspace_loc:/YOURPROYECTNAME}/src/main/resources/
答案 4 :(得分:0)
尝试使用此解决方案:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.version}</version>
<configuration>
<addResources>false</addResources>
</configuration>
</plugin>
&lt; addResources&gt; false&lt; / addResources&gt; 会在运行mvn spring-boot时保留属性:run
答案 5 :(得分:0)
即使使用application.properites
<addResources>false</addResources>