【问题标题】:Finding missing Maven artifacts查找丢失的 Maven 工件
【发布时间】:2012-04-19 16:30:26
【问题描述】:

我是 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?,听起来我需要手动下载这些 jar 并将它们添加到我的本地 maven 存储库。我的问题是如何找到这些罐子?我试着用谷歌搜索它们,我可以找到名称相似的罐子,但不完全像这些,所以我不确定它们是否是正确的罐子。

有解决这个问题的技巧吗? log4j jar 是我原始项目的引用库中唯一明确列出的,所以我猜其他的 jar 是我拥有的其他 jar 所需要的,我不知道在哪里可以找到它们或它们的确切名称应该是。

谢谢!

【问题讨论】:

  • 如果您使用 maven 并且必须手动下载工件,那么您正在做一些严重的错误。发布您的 pom.xml 或其相关部分。
  • 我也是这么想的……Eclipse m2e插件创建的POM有几个问题,问题描述见下面我的回答。

标签: eclipse maven dependencies


【解决方案1】:

这个愚蠢的错误困扰了我几天后,我发现了以下article

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

【讨论】:

    【解决方案2】:

    您可以尝试将新的存储库添加到您的 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>
    

    【讨论】:

      【解决方案3】:

      这也可能是由 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>
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

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

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

          【讨论】:

            【解决方案6】:

            感谢大家的回复。问题的实际原因是,对于这 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 找到它至关重要。

            【讨论】:

            • 感谢分享您的解决方案。当它发生在我身上时,我会将它添加到我的本地大脑存储库中。哈哈。此外,还可以选择删除存储库目录并让 maven 尝试并重新获取文件。这在过去对我有用!
            • @MikeMcMahon 你是说故障安全是找到.m2 repo 目录并删除它,以 force Maven 重新查找 /重新下载库?
            • @mmcrae 是的 - 对于旧的基于 Windows 的系统,它通常位于 C:\users\&lt;username&gt;\.m2\repositorydocuments and settings(nix 应该是 /home/&lt;username&gt;/.m2/)。从那里可以删除存储库文件夹并允许 Maven 从更大的 maven 存储库重新下载所有依赖项。从历史上看,但肯定不那么普遍,依赖关系可能会被搞砸或损坏。这将允许 maven 重新下载和重建存储库。
            • 对我来说,一些罐子总是被 .lastUpdated 附加,所以我必须手动删除它。删除目录没有帮助。有谁知道它为什么这样做?
            【解决方案7】:

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

            【讨论】:

              【解决方案8】:
              【解决方案9】:

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

              另外,如果您知道捆绑包的名称(例如 log4j),您几乎可以随时在 Google 上快速搜索 "[bundle name] maven pom"前几次点击您应该获得包含有关如何包含它的快速 sn-p 的 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 和/或驱动程序),您可以让用户通过命令行手动安装该项目

              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是正确的)

              Stax

              Clover

              Log4j

              【讨论】:

              • 是的,我的 POM(由 Eclipse m2e 插件自动创建)对于 Log4j 不正确(以及其他有问题的工件,请参阅下面发布的答案)。对于 Log4j,在“type”属性下,它表示“bundle”。当我删除它时,它起作用了。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-08-31
              • 1970-01-01
              • 2011-08-10
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多