我是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是我需要的,我不知道在哪里找到它们或者它们的名字是什么应该是。
谢谢!
答案 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是不错的是正确的)
答案 3 :(得分:1)
使用maven search或mvnrepository.com。如果你找不到使用谷歌在其他公共存储库中寻找jar,例如stax:
我的第一个结果是:
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
答案 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有关。此错误意味着如果工件localCopy
中true
设置为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>