10

我是 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

通过阅读这篇文章:如何处理 Maven 缺少工件错误?,听起来我需要手动下载这些jar并将它们添加到我的本地maven存储库中。我的问题是如何找到这些罐子?我试着用谷歌搜索它们,我可以找到名称相似的罐子,但不完全像这些,所以我不确定它们是否是正确的罐子。

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

谢谢!

4

9 回答 9

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 找到它至关重要。

于 2012-04-06T17:15:18.253 回答
2

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

于 2012-04-06T11:29:24.603 回答
1

使用maven 搜索mvnrepository.com。如果在其他公共存储库中找不到使用 google 查找 jar,例如 stax:

maven stax-ri pom

我的第一个结果是:

http://maven.nuxeo.org/nexus/content/groups/public/stax/stax-ri/1.0/

其他公共存储库:

http://download.java.net/maven/2

http://download.java.net/maven/1

http://repository.codehaus.org

http://repository.jboss.org/nexus/content/groups/public-jboss

http://maven.springframework.org/release

于 2012-04-06T09:51:16.723 回答
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>
于 2015-04-15T10:14:55.823 回答
1

您的 POM 定义更有可能对 log4j 不正确。与 log4j 相关的所有内容都应该在 maven 中很容易获得。

此外,如果您知道捆绑包的名称(例如 log4j),您几乎总是可以在前几次点击中进行快速 google 搜索“[捆绑包名称] 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>

最后,当您绝对找不到已经为您准备好的工件时(这通常适用于您无法包含在项目中的专有 jar 和/或驱动程序),您可以让用户通过命令行手动安装该项目

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>

最后,您可以在各自的网站上找到 jars(或他们的 maven 信息)(请注意,我只是将这些链接基于 jar 名称,这些可能不是实际的网站,没有我知道是正确的 log4j )

斯塔克斯

三叶草

日志4j

于 2012-04-05T22:53:47.673 回答
1

几天后,这个愚蠢的错误困扰了我,我找到了以下文章

作者描述有一个工作空间存储库,它可能已经过时了。就我而言,它有助于再次导入正确的插件。工作区存储库已更新,一切正常。

于 2015-12-04T14:35:45.730 回答
0

您的问题可能与MNG-4142有关。这个错误意味着如果在 artifactlocalCopy中设置为maven 将不会下载新的快照。truemaven-metadata-local.xml

请注意,这个错误的标题有点误导,所以它是阅读评论的工作。

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

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

于 2013-02-22T12:18:06.817 回答
0

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

于 2013-06-10T18:45:19.453 回答
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>
于 2013-06-28T03:08:28.403 回答