我们有三个 Artifact :
common.jar : with common classes.
public.war : depending on the common.jar, contains only public site resources.
internal.war : depends on both common.jar and public.war, adding authentication
information and security context resource files. Also contains
few administration site classes.
目前,我已经以这种方式构建了这些内容:internal.war overlays本身与 public.war。
在本地构建项目,将 Artifact 安装到本地存储库,效果非常好。
尝试让 Hudson 构建按以下顺序工作时出现问题:
- 按依赖顺序构建所有项目。
- 修改 common.jar(例如,添加新的类方法)
- 修改internal.war类,使其在编译时依赖于第2步中完成的更改。
- 提交这两项更改,触发 Hudson 构建。
- Internal.war 构建失败,因为找不到第 2 步中添加的符号。
不知何故,第 5 步中的构建使用的是旧版本的 common.jar,并因此失败。
common.jar 版本号不会更改,在此示例中假设它是 1.0.0-SNAPSHOT。
如果我确实更改了 common.jar 版本号,则构建可以正常工作。 (据说是因为发布版本号只有一个发布)。
现在,什么可能导致在 Hudson 构建中使用旧 Artifact ?
我们正在 Hudson 上使用命令“clean package -e -X -U”运行 Maven 构建
“将 Artifact 部署到 Maven 存储库”已选中。
最佳答案
如果不访问真实的 poms,很难明确回答这个问题,但我会这样做:
1) 确保 Hudson 使用与本地计算机上完全相同的 Maven 版本
2) 通过 mvn help: effective-pom
在终端中的 Hudson 机器上检查internal.war 的有效 pom.xml,确保您运行的 mvn 可执行文件与 Hudson 作业相同。您需要验证internal.war的有效pom.xml中common.jar的版本。由于配置文件或 settings.xml 的差异,它可能与您的预期不同。
3) 检查 Hudson 安装的 Maven 的 settings.xml 文件。特别是,您需要验证您的发行版管理、服务器和存储库节中的一切是否正常。检查这一点的另一个好方法是转到您的internal.war项目并运行mvn help: effective-settings
并查看其中的内容是否与本地计算机上的内容匹配。
有些地方出了问题,通过正确的分析很快就能找到问题。
关于使用 Hudson + Artifactory 时,Maven WAR 覆盖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9193674/