2012-02-08 119 views
2

我们有三个神器:Maven的WAR覆盖问题,同时使用哈德森+ Artifactory的

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。

在本地构建项目,将工件安装到本地回购,完美地工作。

  1. 构建所有项目的依赖顺序:试图让哈德森建立工作与依照以下顺序

    问题开始。

  2. 修改common.jar(例如,添加一个新的类方法)
  3. 修改internal.war类,使得它们在编译时依赖于步骤2中完成的更改。
  4. 提交这两个更改,触发Hudson构建。因为它无法找到在步骤2中

不知怎的,构建步骤5中添加的符号是使用旧版本的common.jar的,因为它没有

  • Internal.war构建失败。

    common.jar版本号不会改变,假设它是1.0.0-SNAPSHOT用于本示例。

    如果我改变了common.jar的版本号,这个版本就可以工作。 (据推测,因为发布版本号只有一个版本)。

    现在,什么可能会导致这种使用哈德逊旧工件的构建?

    我们正在运行的Maven建立在哈德森命令“清包-e -X -U”

    “部署文物,Maven仓库”已被选中。

  • +0

    只是为了确定,你的意思是詹金斯还是哈德森? – noamt 2012-02-08 13:38:21

    回答

    2

    很难明确回答这个问题得不到真正的劲歌,但这里是我会做什么:

    1)确保你是在本地机器

    哈德森是使用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文件。特别是您需要验证分发管理,服务器和存储库节中的所有内容。检查这个的另一个好方法是去你的internal.war项目并运行mvn help:effective-settings,看看那里有什么与你本地机器上的内容相匹配。

    有些东西是错误的,它不会花费很长时间才能找到正确的分析。