2010-09-22 64 views
2

我有一个Maven2项目,在同一级别有一个pom.xml和一个profiles.xml文件。 项目配置由Maven的配置文件属性设置:为什么Hudson会忽略我的profiles.xml文件?

dbhost=${dbhost} 
dbport=${dbport} 
// etc. 

本地,每个developper在“的profiles.xml”自定义他的身材。它运作良好。

对于持续集成,我们的SCM服务器上已经放置了ci“profiles.xml”(与pom.xml相同)。

问题是Hudson在Maven构建过程中简单地忽略了这个文件,而“-P hudsonprofile”被正确设置。

如果直接在“pom.xml”或全局“settings.xml”中移动相同的配置文件,则构建工作。所以我们已经有一个解决方案。

我也知道“的profiles.xml”文件已经过时,但我想明白为什么comportement是哈德森构建和我的本地构建之间的不同...

注:哈德森和我的本地编译使用相同版本的Maven(2.2.1)。

回答

1

听起来像是类路径问题。为什么Hudson没有注意到profiles.xml?我能想到的唯一原因是哈德森使用了不同于你期望的类路径。

最佳实践(至少在我的经验中)是尝试从CI服务器上的命令行(其中运行Hudson)构建项目。如果这有效,那么哈德森也应该工作。除非你在哈德森奇怪地配置了Maven。

另外,调整Maven的settings.xml并不是那么糟糕。至少,如果你不指望它改变太多。即便如此,它很快就被修复了。

1

我认为最好的解决方案是直接在您的pom.xml文件中为两个CI定义配置文件,然后一般用于本地构建。然后,开发人员可以在自己的个人settings.xml文件中覆盖本地构建的任何配置文件设置。这还带来了额外的好处,无需签入profiles.xml文件,这对于开发者来说不起作用,迫使他们修改这个版本化文件并记住不检查他们的变化。这也使得您的构建不依赖于Maven的不推荐使用的功能。毕竟,我不会首先考虑已弃用功能的行为。希望这是一个优雅的解决方案,它使用您已知的工作原理。