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

时间:2012-02-08 12:52:41

标签: maven hudson war

我们有三件工件:

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。

在本地构建项目,将工件安装到本地存储库,效果非常好。

当尝试使用以下序列来运行Hudson构建时,问题就开始了:

  1. 按依赖顺序构建所有项目。
  2. 修改common.jar(例如,添加新的类方法)
  3. 修改internal.war类,使其编译时依赖于2. step中所做的更改。
  4. 提交两个更改,触发Hudson构建。
  5. Internal.war构建失败,因为它找不到在步骤2中添加的符号。
  6. 不知何故,第5步中的构建使用了旧版本的common.jar,并因此而失败。

    common.jar版本号不会改变,让我们说这个例子的目的是1.0.0-SNAPSHOT。

    如果我更改common.jar版本号,则构建工作正常。 (据说因为版本号只有一个版本)。

    现在,什么可能导致在Hudson构建中使用旧工件?

    我们正在使用命令“clean package -e -X -U”

    在Hudson上运行maven构建

    已经检查了“将工件部署到maven存储库”。

1 个答案:

答案 0 :(得分:2)

如果不能访问真正的poms,很难明确地回答这个问题,但这就是我要做的事情:

1)确保Hudson使用与您本地计算机完全相同的Maven版本

2)通过mvn help:effective-pom检查终端中Hudson机器上internal.war的有效pom.xml,确保运行与Hudson作业相同的mvn可执行文件。您需要在internal.war的有效pom.xml中验证common.jar的版本。由于配置文件或settings.xml的不同,它可能与您的预期不同。

3)检查您的Hudson安装Maven的settings.xml文件。特别是,您需要验证您的distributionManagement,服务器和存储库节中的所有内容。检查此问题的另一个好方法是转到internal.war项目并运行mvn help:effective-settings,看看它与本地计算机上的内容是否匹配。

有些事情是错误的,通过正确的分析找到它不会花费很长时间。