在使用spring引导和spring-boot-maven-plugin生成war时排除application.properties
我使用的是使用spring引导开发web应用程序,并且想要生成war而不是jar。 http://spring.io/guides/gs/convert-jar-to-war/在使用spring引导和spring-boot-maven-plugin生成war时排除application.properties
但我想从战争中排除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>
-
这种方法不工作的时候,我觉得春天启动了Maven插件不支持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>
你有另外一个建议吗?
Thnks
我添加的解决方案是我的解压打包战争,删除文件application.properties并创建一个使用maven-antrun-插件名为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回购。就是这样
恕我直言,正确的答案。我需要它稍微扭曲:我想包括'application.properties',但没有我的个人资料'应用程序 - *。属性'。而且由于我的ANT时代早已过去,我花了一段时间才弄清楚正确的语法,因此发布在这里: '
我从你的问题中了解到,你想为你的开发使用application.properties。但是你不想用它来制作。
我会建议使用弹簧配置文件来实现这一点。 在您的属性文件中
- 创建一个用于开发的配置文件。把你所有的开发属性放在它下面。
- 不要在属性文件中为生产创建配置文件。
- 当您正在开发时,将活动配置文件设置为开发,以便从您的application.properties文件加载属性。
- 在生产中运行它时,将活动配置文件设置为生产。尽管application.properties将被加载到您的WAR中,但由于没有用于生产的配置文件,因此不会加载任何属性。
我使用YML做了类似的事情。我相信也一定有办法使用.properties
文件做同样的事情。
spring:
profiles.active: development
--
spring:
profiles: development
something:
location: USA
unit1: Test1
unit2: Test2
你可以使用
-Dspring.profiles.active=production
是和否。如果将这些配置文件属性文件存储在src/main/resources中,则不能从父类加载器加载它们(如将它们放入$ TCHOME/lib中),因为它们已经捆绑在WAR本身中 – 2015-10-21 16:52:57
改变运行时配置文件尝试使用此解决方案:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.version}</version>
<configuration>
<addResources>false</addResources>
</configuration>
</plugin>
<addResources>假</addResources >将继续属性时你运行mvn spring-boot:运行
请尝试使用下面的解决方案。这将工作:
<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中运行该项目,你可能会得到错误的属性文件未找到。为了摆脱这个,你需要添加资源文件夹作为配置运行(运行配置... - >类路径 - >用户条目 - >高级... - >添加文件夹)
在Eclipse中运行时,在你的运行配置,你需要指定到春季启动化子性质的路径:
--spring.config.location=${workspace_loc:/YOURPROYECTNAME}/src/main/resources/
它即使生成jar包,即使<addResources>false</addResources>
我对这个问题的办法是刚过保持资源
application.properites
使用'spring.config.location'参数覆盖打包配置。例如,我将它设置在Tomcat的上下文文件中,以指向我在生产环境中使用的配置文件。你有没有尝试过这样做,或者这种解决方案不适合你吗? 或者你可以通过使用不同的Maven构建配置文件进行开发和生产,或许可以实现你正在尝试做的事情?我的意思是,只有当您使用生产Maven配置文件打包您的应用时,才会排除application.properties ... – 2014-11-04 20:25:05我只想在使用maven打包我的战争时排除application.properties,其他一切正常。我不想在生成战争后删除application.properties。 – amgohan 2014-11-05 00:09:12