我有一个Maven2项目,同一级别有一个pom.xml和一个profiles.xml文件。 项目配置由Maven配置文件属性提供:
dbhost=${dbhost}
dbport=${dbport}
// etc.
在本地,每个开发人员都在“profiles.xml”中自定义他的构建。效果很好。
对于持续集成,ci“profiles.xml”已放在我们的SCM服务器上(与pom.xml处于同一级别)。
问题是Hudson在Maven构建期间只是忽略了这个文件,而“-P hudsonprofile”被正确设置了。
如果直接在“pom.xml”或全局“settings.xml”中移动相同的配置文件,则构建工作正常。所以我们已经有了解决方案。
我也知道不推荐使用“profiles.xml”文件,但我想了解为什么Hudson build和我的本地构建之间的comportement不同......
注意:Hudson和我的本地版本使用相同版本的Maven(2.2.1)。
答案 0 :(得分:1)
我认为最好的解决方案是直接在pom.xml文件中为两个CI定义配置文件,然后一般用于本地构建。然后,开发人员可以覆盖他们自己的个人settings.xml文件中的任何配置文件设置以进行本地构建。这样做的另一个好处就是不必签入profiles.xml文件,该文件对开发人员不起作用,强制他们修改这个版本化文件并记住不检查他们的更改。这也有助于使您的构建不依赖于Maven的弃用功能。毕竟,我不会首先依赖于已弃用功能的行为。希望这是一个优雅的解决方案,它使用您已知的工作中的想法。
答案 1 :(得分:1)
对我来说听起来像是一个类路径问题。为什么Hudson不会注意到profiles.xml?我能想到的唯一原因是Hudson使用了与你期望的不同的类路径。
最佳实践(至少在我的经验中)是尝试从CI服务器上的命令行构建项目(Hudson运行的地方)。如果这样可行,那么哈德森也应该工作。除非你在哈德森奇怪地配置了Maven。
另外,调整Maven的settings.xml也不错。至少,如果你不希望它改变太多。即便如此,它也很快得到修复。