我正在寻找将本地文件注入到项目中的最佳实践,这些文件没有使用源代码控制进行跟踪,因此文件的源代码控制版本对更改无效。
特别是,我有一个包含数据库凭据的上下文文件。我想在源代码管理中保留原始“将您的凭据放在此处”文件,但是我需要使用适当的凭据填写该文件以用于我的开发设置(或生产服务器,或者有什么),而不会推送这些凭据回到源代码管理。显然,我可以在本地编辑文件,而不是重新检入。但是,随着时间的推移,这会变得乏味,小心我每次需要时都不会意外地使用中央代码存储库的凭据检入文件检查更改。另一种方法是检入“-dist”类型文件,每个用户必须重命名和编辑才能完成项目的构建。
我尝试查看Maven Overlays,因为它看起来需要我使用pom.xml和war文件为我的本地凭据构建一个完整的单独项目。对于几个文件来说,这似乎是一个很大的开销。我真正想要的是一种告诉maven的方法“如果文件X(根本不在源代码控制中)存在于本地,请使用它。如果没有,请使用文件Y(源代码控制中确实存在)。”似乎应该有一种相当自动的方式来处理它。
答案 0 :(得分:6)
<强>简单强>
我过去做过这个,非常简单,只有一个文件,例如default.config
被检入版本控制,另一个名为local.default.config
的文件位于{{1}文件。让Maven将svn.ignore
复制到local.default.config
上,如果它存在,或让它复制,您的应用程序会查找default.config
,然后local.default.config
如果第一个不存在。
您甚至可以使用相同的default.config
名称,并让应用程序在多个位置查找,将default.config
作为最高优先级,然后将其他位置放在其他位置。
理想版本会读取某些优先级的所有文件并使用所有文件中的最后找到的属性,然后您可以home.dir
包含所有属性,default.config
仅包含所有文件很少需要为本地配置进行更改。
面向更精致的Maven
Maven有多种方法可以达到你想要的目的:
local.default.config
启用和禁用包含您要使用的文件名的profiles
,并使用maven-resources-plugin复制您在property
中指定的文件。 profile
驱动filter
的Maven中的profile
功能。properties
驱动profile
properties
阶段将其从中删除。 package
非常强大,非常适合在不同环境中配置Maven。我在每个profiles
中都有local
,dev
,qa
和release
个人资料。我默认情况下将pom.xml
个人资料设置为有效,然后选择local
所需的其他个人资料,这将自动停用mvn [goal] -P dev
并使用local
中指定的properties
1}}个人资料。
更加复杂的面向SVN
您可以使用本地dev
功能分支,只在该分支上拥有本地配置,当您将代码更改合并回development
时,排除对配置文件的更改。合并。 这实际上是我如何做到的,因为我们使用Git。在SVN中分支并不是那么痛苦,因此这不是一个选项
我相信还有其他Maven解决方案。无论哪种方式你解决它svn.ignore是你的朋友。 Maven trunk
的用法非常强大。
答案 1 :(得分:2)
Maven replacer plugin是否符合您的需求?
答案 2 :(得分:1)
我们使用jasypt来加密Spring读取的属性文件中的密码。该工具也可以在没有Spring的情况下使用。这使得将属性文件保存在源代码管理中非常简单。
如果您的问题是用户凭据,那么我建议您为自己运行的任何自动化测试使用测试帐户。
答案 3 :(得分:1)
我认为filtering可能符合您的需求。您可以拥有未签入的local.filter和prod.filter。您可以默认使用prod.filter,并根据开发人员需要使用的命令行标志或本地配置文件替换local.filter,但部署者不会。