2012-04-05 101 views
9

我是Maven的新手,并且在添加依赖关系方面苦苦挣扎。我想现有的项目转换为Maven的,并添加依赖关系在我引用的库中的所有罐子后,我收到关于失踪文物的错误消息:寻找缺失的Maven工件

Missing artifact stax:stax:jar:1.0  
Missing artifact clover:clover:jar:1.3-rc4 
Missing artifact log4j:log4j:bundle:1.2.16 
Missing artifact stax:stax-ri:jar:1.0 

从阅读这篇文章:How to handle Maven missing artifact errors? ,这听起来像我需要手动下载这些罐子并将它们添加到我的本地Maven存储库。我的问题是我如何找到这些罐子?我尝试使用Google搜索,我可以找到具有相似名称的罐子,但不完全像这些,所以我不确定它们是否是正确的罐子。

处理此问题的任何提示? log4j jar是我原始项目中被引用的库中唯一明确列出的,所以我猜其他jar是我需要的其他jar所必需的,我不知道在哪里可以找到它们或者它们的确切名称应该。

谢谢!

+0

如果您使用maven并且必须手动下载工件,那么您正在做出严重错误的事情。发布您的pom.xml或其相关部分。 – j13r 2012-04-05 22:55:59

+0

这就是我的想法......由Eclipse m2e插件创建的POM有几个问题,请参阅下面的问题描述的答案。 – matthewb 2012-04-10 20:35:06

回答

21

感谢大家的回复。问题的实际原因是,对于这3个缺失工件中的每一个,出于某种原因,当Maven将它们下载到我的本地存储库时,.lastUpdated被追加到jar的末尾。例如,stax-1.0.jar.lastUpdated。这就是Maven无法找到stax-1.0.jar的原因。

因此,为了解决这个问题,我不得不手动下载stax-1.0.jar,然后将它安装到本地maven仓库中,与混乱的文件完全相同,以便Maven能够找到它。 (例如,使用命令:

mvn install:install-file -Dfile=<path-to-file>/stax-1.0.jar   
-DgroupId=stax -DartifactId=stax -Dversion=1.0 -Dpackaging=jar 

使用完全相同的groupId和artifactId的为现有的,不正确的文件,以便行家发现它是至关重要的

+1

感谢您分享您的解决方案。我会将它添加到我的本地大脑存储库中,以便它发生在我身上。大声笑。此外,还可以选择删除存储库目录并让maven尝试并重新获取文件。这在过去对我有用! – 2012-04-09 20:20:48

+0

@MikeMcMahon @MikeMcMahon你说失败保险是找到'.m2' repo目录并删除它,* force * Maven重新找到/重新下载libs? – mmcrae 2014-11-10 22:48:08

+0

@ mmcrae yes - 它通常位于'C:\ users \ \ .m2 \ repository'或'文件和设置'为较老的基于Windows的系统(nix应该是'/ home//.m2 /')。从那里可以删除存储库文件夹,并允许Maven从更大的Maven仓库中重新下载所有的依赖关系。从历史上看,但肯定不是那么常见,依赖关系可能会被搞砸或损坏。这将允许maven重新下载并重建存储库。 – 2014-11-11 01:32:27

1

这很可能是您的POM定义对于log4j不正确。与log4j相关的一切都应该在maven中随时可用。

另外,如果你知道包的名称(如log4j的),你几乎总是可以做一个快速谷歌搜索“[包名称] Maven POM文件”前几个点击您应该得到内maven回购,其中包含关于如何包含它的快速片段,或捆绑的jar和maven说明的实际网站。

例如log4j的:

<dependencies> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
    </dependency> 
</dependencies> 

虽然有时你只需要指定库找到该项目(如果它不能在更大的Maven仓库托管)

你可以指定一个像这样的新储存库

<repositories> 
    <repository> 
     <id>Java.Net</id> 
     <url>http://download.java.net/maven/2/</url> 
    </repository> 
</repositories> 

最后,当你绝对找不到该工件时,maven'd u P代表你(这通常是专有罐子和,或者你不能用你的项目包括司机真)则可以让用户通过命令行

MVN安装手动安装项目:安装文件-DgroupId = [组ID] -DartifactId = [神器-ID] -Dversion = [版本] -Dfile = /路径/要/的/文件-Dpackaging =【类型】

然后,您可以参考它在你的Maven文件使用上面描述的信息

例如我有一个salesforce.com pr的自定义参考oject

MVN安装:安装文件-DgroupId = com.salesforce -DartifactId = WSC -Dversion = 22 -Dfile = \软件tsclient \ħ\发展\的java \ WSC-22。罐子-Dpackaging =罐子

要访问它在行家:

<dependency> 
    <groupId>com.salesforce</groupId> 
    <artifactId>wsc</artifactId> 
    <version>22</version> 
</dependency> 

最后,你可以找到在各自网站的罐子(或他们的行家资讯)(请注意,我只是立足这些开瓶盖名称的链接,这些可能不是实际的网站,以及SANS我知道是正确的log4j的)

Stax

Clover

Log4j

+0

是的,我的POM(它是由Eclipse m2e插件自动创建的)对于Log4j(以及其他有问题的构件,请参见下面的答案)不正确。对于Log4j,在“type”属性下,它表示“捆绑”。当我删除它,它的工作。 – matthewb 2012-04-09 19:40:20

2

下可以找到maven.apache.org依赖搜索网站。导航Menü条目常见问题(官方)和图恩到页面的结尾。

+1

或直接通过http://maven.apache.org/general.html#How_to_find_dependencies – 2012-04-06 16:52:40

0

你的问题可能是与。 MNG-4142。此错误意味着,如果localCopy在神器maven-metadata-local.xml设置为true行家不会下载新的快照。

注意,这个bug的标题有些误导故工作阅读注释。

您可能认为使用maven的-U标志可以解决此问题,但显然情况并非如此。

当前的解决方法似乎是搜索maven-metadata-local.xml的所有实例并将localCopy的值更改为false

0

我通过将log4j版本从1.2.15更改为1.2.16来解决此问题。

0

它也可能是由dom4j造成的。使用以下设置时发生同样的错误。

<dependency> 
    <groupId>dom4j</groupId> 
    <artifactId>dom4j</artifactId> 
    <version>20040902.021138</version> 
</dependency> 

更改为以下后,错误消失。

<dependency> 
    <groupId>dom4j</groupId> 
    <artifactId>dom4j</artifactId> 
    <version>1.6.1</version> 
</dependency> 
1

你可以尝试新的存储库添加到您的pom.xml

<repositories> 
    <repository> 
    <id>java.net</id> 
    <url>http://download.java.net/maven/2/</url> 
    </repository> 
     <repository> 
     <id>jboss</id> 
     <url>http://repository.jboss.com/maven2</url> 
</repository> 
</repositories> 
1

几天后,这个愚蠢的错误窃听我,我发现下面article

作者介绍有工作空间存储库,可能会过时。在我的情况下,它只是帮助再次导入正确的插件。工作区存储库已更新,一切正常。