2015-10-15 48 views
0

我们使用maven 2.2.1来构建项目。主POM列出了构建的模块(一些WAR项目和一些“普通”JAR)。Maven从WAR中删除了一个罐子

最近我们增加了一个新的依赖到WAR项目之一:

<dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>4.2.6</version> 
     <exclusions> 
      <exclusion> 
       <artifactId>commons-logging</artifactId> 
       <groupId>commons-logging</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>commons-codec</artifactId> 
       <groupId>commons-codec</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

当从一个开发人员的计算机上的命令行(MVN清洁套装)当地建造,它工作正常。但是,当构建在自动构建系统上(由Hudson构建)时,JAR(它是依赖于httpclient)并未打包到最终的WAR中。没有错误报告,只是JAR丢失。

的行家的settings.xml文件是相同的(除了回购路径 - 唯一明显的非默认选项是离线=真)。什么可能是错的?

+1

那听起来不可能......你可以在机器上运行'mvn package' Hudson运行并查看是否会出现相同的效果?如果是这样,是否'mvn依赖:树'不同于本地? – Deltharis

+0

我只是在构建系统上运行maven,并且发生了相同的效果:生成的WAR中缺少httpcore jar。我完成了对源文件的全新检出。 –

+0

请在出现问题的计算机上运行'mvn dependency:tree -Dverbose',然后检查是否有任何不同。 – Deltharis

回答

2

我想到的唯一的事情是,您的构建机器有一个在m2回购中的模块之一的旧版本。 清除整个$HOME/.m2/repository(或您保留回购的地方)并重试。

+0

这是一个很好的一般性建议,并且会暴露模块不能重建的问题应该。 – Deltharis

0

发现问题。 (并解决了)

简而言之:回购中的httpclient.jar没有其.pom文件。 (所以行家根本不知道它有依赖)

长:

这是一种离线存储库中,所以丢失的文物必须手动固定。问题是我第一次复制文件到错误的文件夹和maven没有“看到”他们。然后“盲目”遵循其建议:

Missing: 
---------- 
1) org.apache.httpcomponents:httpclient:jar:4.2.6 

    Try downloading the file manually from the project website. 

    Then, install it using the command: 
     mvn install:install-file -DgroupId=org.apache.httpcomponents -DartifactId= 
httpclient -Dversion=4.2.6 -Dpackaging=jar -Dfile=/path/to/file 

这将只是将jar文件复制到repo,没有pom。

因此,我只是将httpclient的完整文件夹复制到回购库(及其母公司和其他相关文件,然后maven然后抱怨)。

这是一种用户错误,我想。

+0

嗯,它复制了jar,但它为你生成了一个POM(因为你没有指定一个)。问题是生成的POM没有指定任何依赖关系。这个命令有一个'-DpomFile'标志,可以为你解决它。 – Daniel