使用Maven和SVN管理本地文件

jri*_*her 3 java svn war maven

我正在寻找将本地文件注入到项目中的最佳实践,这些项目没有使用源代码控制进行跟踪,因此文件的源控制版本对更改视而不见.

特别是,我有一个带有数据库凭据的上下文文件.我想在源代码管理中保留原始"将您的凭据放在此处"文件,但是我需要使用适当的凭据填写该文件以用于我的开发设置(或生产服务器,或者有什么),而不会推送这些凭据回到源代码管理.显然,我可以在本地编辑文件,而不是重新检入.但是,随着时间的推移,这会变得乏味,小心我每次需要时都不会意外地使用中央代码存储库的凭据检入文件检查更改.另一种方法是检入"-dist"类型文件,每个用户必须重命名和编辑才能完成项目的构建.

我尝试查看Maven Overlays,因为它看起来需要我使用pom.xml和war文件为我的本地凭据构建一个完整的单独项目.对于几个文件来说,这似乎是一个很大的开销.我真正想要的是一种告诉maven的方法"如果文件X(根本不在源代码控制中)存在于本地,请使用它.如果没有,请使用文件Y(源代码控制中确实存在)." 似乎应该有一种相当自动的方式来处理它.

小智 6

简单

我在过去做过这个,它很简单,例如有一个文件default.config被检入版本控制,有另一个文件local.default.config在你的svn.ignore文件中.有Maven的复制local.default.configdefault.config,如果它存在,或者它复制两个,你的应用程序的外观的local.default.config,然后default.config如果第一个不存在.

您甚至可以使用相同的default.config名称,让应用程序在多个位置查找,home.dir优先级最高,然后是其他位置.

理想的版本将读取某些优先级的所有文件并使用所有文件中的最后找到的属性,然后您可以拥有default.config所有属性,并且local.default.config只有少数需要为本地配置更改.

更加精致的Maven导向

Maven有多种方法可以达到您想要的目标:

  1. 使用Maven profiles启用和禁用property包含您要使用的文件名的文件名,并使用maven-resources-plugin复制您在中指定的文件profile.
  2. 使用filterMaven中的profile驱动功能properties.
  3. 使用maven-replacer-plugin直接根据profile 驱动操作文件properties
  4. 使用maven-dependency-plugin并将您的文件存储在本地Maven存储库中,并在此package阶段将其从它们中删除.

profiles功能非常强大,非常适合在不同环境中配置Maven.我有一个local,dev,qarelease每个配置文件中pom.xml.我local默认情况下将配置文件设置为活动状态,并根据需要选择其他配置文件,mvn [goal] -P dev这将自动禁用local并使用配置文件中的properties特定dev配置文件.

更复杂的SVN导向

您可以使用本地development功能分支,只在该分支上具有本地配置,并且当您将代码更改合并到trunk排除对合并中的配置文件的更改时.这实际上是我如何做到的,因为我们使用Git.SVN中的分支并不是那么痛苦,因此这不是一种选择

我相信还有其他Maven解决方案.无论哪种方式你解决它svn.ignore是你的朋友.Maven的profile使用非常强大.