有条不紊地将maven的一些资源排除在战争之外

我开发了一些应用程序,它的最终战争在开发模式下还可以,但是它包含一些我需要外部化生产的配置文件。 我能够手动更改war并从中删除这些文件,但我想自动执行此过程。 我想将配置文件保留在开发模式的战争中。

我读了几个关于SO的问题,但他们错过了条件性。 这同样适用于maven-war-plugin ,其中include / exclude在某些条件下不能工作(根据他们的样本)。 filter不是因为我不想改变复制文件的内容而是跳过它们。

资料来源:

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战争资源排除 。 它会产生两个与内容和文件名不同的战争。

  maven-war-plugin  dev ${project.build.directory}/${project.build.finalName}-dev    package-prod package  prod ${project.build.directory}/${project.build.finalName}-prod WEB-INF/classes/*.jks,WEB-INF/classes/some.properties   war     

谢谢大家。

请不要使用配置文件。 配置文件的问题在于,生成的工件不包含有关用于构建它的配置文件的信息。

基本规则:配置文件不得更改构建的结果。

或者反过来说:如果构建相同的源代码修订版,则结果必须相同,无论配置文件或参数如何。

(有关更多信息,请参阅如何真正使用Maven配置文件(不会危及您的业力) )

因此,更好的方法是创建两个war模块,比如my-projectmy-project-dev.war

如果my-project-dev.warmy-project.war具有war依赖性,它将使用你的生产战争作为叠加,从而产生使用你的生产和开发时间资源的组合war文件。

添加了奖励function:在您的开发战中,您可以覆盖生产战争的条目(例如,logging-config)。