我开发了一个应用程序,在开发模式下,它的最后一战还可以,但它包含一些配置文件,我需要将其外部化以用于生产。我可以手动更改战争并从中删除这些文件,但我想自动化这个过程。我想保留战争中的配置文件,以供开发模式使用。
我读了几个关于SO的问题,但它们没有附带条件。这同样适用于maven war插件,其中include/exclude在某些条件下无法工作(根据他们的示例)。使用过滤器不起作用,因为我不想更改复制文件的内容,而是跳过它们。
来源:
src
main
resources
some.properties
server-keystore.jks
signature.properties
MyRequests.xsd
发展战争:
WEB-INF
classes
some.properties
server-keystore.jks
signature.properties
MyRequests.xsd
生产战争:
WEB-INF
classes
signature.properties
MyRequests.xsd
达到这种效果的正确方法是什么?感谢
我最终得到了以下解决方案。它不使用一些人认为是反模式的概要文件:blackbuild和Henrik Larne。该解决方案是用分类器和maven战争资源排除构建的。它将产生两个不同内容和文件名的战争。
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<classifier>dev</classifier>
<webappDirectory>${project.build.directory}/${project.build.finalName}-dev</webappDirectory>
</configuration>
<executions>
<execution>
<id>package-prod</id>
<phase>package</phase>
<configuration>
<classifier>prod</classifier>
<webappDirectory>${project.build.directory}/${project.build.finalName}-prod</webappDirectory>
<packagingExcludes>WEB-INF/classes/*.jks,WEB-INF/classes/some.properties</packagingExcludes>
</configuration>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
</plugin>
谢谢大家。
请不要为此使用配置文件。配置文件的问题在于,生成的工件不包含用于构建它的配置文件的信息
基本规则:配置文件不得更改生成的结果。
或者反过来:如果构建相同的源代码修订版,则无论配置文件或参数如何,结果都必须相同。
(有关更多信息,请参阅如何真正使用Maven配置文件(而不危及您的因果报应)
因此,更好的方法是创建两个战争模块,比如my-project
和my-project-dev.war
。
如果my-project-dev.war
对my-project.war
有战争依赖,它将使用您的生产战争作为覆盖,从而产生使用您的产品和开发时间资源的组合战争文件。
增加了额外的功能:在你的开发战争中,你可以覆盖你的生产战争的条目(比如,日志配置)。