使用 Hudson + Artifactory 时,Maven WAR 覆盖问题

标签 maven hudson war

我们有三个 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 构建按以下顺序工作时出现问题:

  1. 按依赖顺序构建所有项目。
  2. 修改 common.jar(例如,添加新的类方法)
  3. 修改internal.war类,使其在编译时依赖于第2步中完成的更改。
  4. 提交这两项更改,触发 Hudson 构建。
  5. 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/

相关文章:

maven - 将 Artifact 安装到特定的远程 Maven 存储库

java - Storm 示例甚至可以在没有 Zookeeper、Nimbus 和 Supervisor 进程的情况下运行

maven buildnumber 插件不适用于 mercurial

grails - 如何在Hudson中响应控制台输出

java - Spark Web 框架的静态文件放在哪里?

svn - 让 hudson 将源 checkout 到特定目录

continuous-integration - 无法使用 Hudson 的 MSBuild 插件获得正确的 msbuild.exe 路径

java: Websphere Singleton 存在于多个 EAR 的 WAR 中?

java - Bluemix 构建和部署管道不适用于 Maven

java - Docker tomcat 编辑扩展的 war 文件