m2eclipse误报”Missing artifact”

m2eclipse报告"Missing artifact
XXX:XXX",但实际上maven repository里却有这个artifact,这是为什么?

先说下后果:误报也可能意味着maven解析dependency失败,导致eclipse project的build path里丢失很多库,最终结果就是是在eclipse里无法运行main程序或jetty/tomcat.

而如果在eclipse外面通过maven命令来编译打包程序,却不会有问题,这是为什么?

以下两个因素结合起来可能导致这样的问题出现:

   1. maven repository中某些artifact没有pom文件

   2. 你的外部maven程序是maven2

maven2对"某些artifact没有pom文件"这种事比较能忍,所以打包仍能成功;但m2eclipse总是使用maven3来做依赖管理(即使你让它指向了外部的maven2),而maven3不能忍受“没有pom文件”.

当m2eclipse发现有东西让它不能忍时,就会乱报这个丢失那个没有之类的。

一个常见的“没有pom文件”的artifact是opensymphony-quartz, 官方maven repository中就没有这个pom. 临时的解决办法是搞一个pom文件丢到maven repository中,如

引用

I finally found a workaround. It is surely a bug in m2eclipse, however the problem disappeared when I added quartz-1.6.0.pom next to quartz-1.6.0.jar in .m2\repository\opensymphony\quartz\1.6.0\

The pom is not present at http://repo1.maven.org/maven2/opensymphony/quartz/1.6.0/ but you can extract it from quartz-1.6.0-bundle.jar linket at http://jira.opensymphony.com/browse/QUARTZ-482

更多请见:
http://stackoverflow.com/questions/5500534/m2eclipse-says-missing-artifact-but-i-can-build-from-cmdline

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.