找到丢失的Maven工件

时间:2012-04-05 22:37:57

标签: eclipse maven dependencies

我是Maven的新手,并且在添加依赖项方面苦苦挣扎。我正在尝试将现有项目转换为Maven,并在为我引用的库中的所有jar添加依赖项后,我收到有关缺失工件的错误消息:

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存储库中。我的问题是如何找到这些罐子?我试着谷歌搜索它们,我可以找到名称相似的罐子,但不完全像这些,所以我不确定它们是不是正确的罐子。

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

谢谢!

9 个答案:

答案 0 :(得分: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,不正确的文件对于maven找到它是至关重要的。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您的POM定义更可能不适用于log4j。与log4j相关的所有内容都应该在maven中随时可用。

另外,如果您知道捆绑包的名称(例如log4j),您几乎总能在其中进行快速谷歌搜索 “[捆绑名称] maven pom” 在前几次点击中,您应该获得包含如何包含它的快速片段的maven repo,或者捆绑的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>

最后,当您完全找不到已经为您准备好的工件时(通常情况下,对于您不能在项目中包含的专有jar和/或驱动程序),您可以让用户通过命令行手动安装该项目< / p>

  

mvn install:install-file -DgroupId = [group-id] -DartifactId = [artifact-id] -Dversion = [version] -Dfile = / path / to / the / file -Dpackaging = [type]

然后,您可以使用上述信息在您的maven文件中引用它

例如我有一个salesforce.com项目的自定义参考

  

mvn install:install-file -DgroupId = com.salesforce -DartifactId = wsc -Dversion = 22 -Dfile = \ tsclient \ H \ development \ java \ wsc-22.jar -Dpackaging = jar

要在maven中访问它:

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

最后,你可以在他们各自的网站上找到罐子(或者他们的maven信息)(请注意我只是将这些链接基于罐子名称,这些可能不是真正的网站,我所知道的log4j是不错的是正确的)

Stax

Clover

Log4j

答案 3 :(得分:1)

答案 4 :(得分: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>

答案 5 :(得分:1)

几天后,这个愚蠢的错误让我感到烦恼,我找到了以下article

作者描述了一个工作空间存储库,它可能已过时。在我的情况下,它只是再次导入正确的插件。工作区存储库已更新,一切正常。

答案 6 :(得分:0)

您的问题可能与MNG-4142有关。此错误意味着如果工件localCopytrue设置为maven-metadata-local.xml,maven将无法下载新快照。

请注意,此错误的标题略有误导性,因此阅读评论的工作正在进行中。

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

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

答案 7 :(得分:0)

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

答案 8 :(得分: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>