Maven项目导入Eclipse报错:Failed to read artifact descriptor求解
我之前帮朋友处理过类似的老IncQuery项目问题,你的情况其实是老快照版本的依赖已经找不到了,给你用大白话讲清楚怎么解决:
为啥会出这个问题?
你项目里依赖的org.eclipse.incquery:runtime:0.8.0-SNAPSHOT是个非常早期的「快照版本」——这种版本是开发者正在开发时临时用的,不会长期保存在远程仓库里。现在Eclipse那个旧的IncQuery快照仓库早就不维护这些老版本了,所以Maven既拉不到,本地删了再建也没用;你手动下的jar只有pom文件,是因为那个快照版本本身就没上传完整的代码jar包。
一步步解决(全程在Eclipse里操作)
1. 把依赖换成稳定版
打开项目里的pom.xml文件,找到里面写着<dependencies>的部分,找所有带有org.eclipse.incquery的依赖项,把版本号从0.8.0-SNAPSHOT改成0.8.0(去掉后面的-SNAPSHOT)。
举个例子,原来的代码可能是这样:
<dependency> <groupId>org.eclipse.incquery</groupId> <artifactId>runtime</artifactId> <version>0.8.0-SNAPSHOT</version> </dependency>
改成:
<dependency> <groupId>org.eclipse.incquery</groupId> <artifactId>runtime</artifactId> <version>0.8.0</version> </dependency>
所有IncQuery相关的依赖都这么改,别漏了。
2. 确保仓库能拉到稳定版
如果改完版本还是拉不到,就得检查pom里的仓库配置。在pom.xml里找<repositories>部分,如果没有下面这段,就把它加进去(放在<project>标签里,和<dependencies>是同级的):
<repository> <id>incquery-releases</id> <url>https://repo.eclipse.org/content/repositories/emf-incquery-releases/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository>
这段是告诉Maven去IncQuery的稳定版仓库里找依赖。
3. 让Maven重新拉依赖
做完上面两步,右键你的项目 → 选Maven → Update Project...,在弹出来的窗口里勾选Force Update of Snapshots/Releases(强制更新,不管本地缓存),然后点OK。等个几分钟,Maven就会自动下载所有需要的jar包了。
4. 要是稳定版也不行?
如果0.8.0稳定版还是有问题,可以试试升级到IncQuery的最后几个版本(比如1.1.0),或者直接换成它的继任者VIATRA的版本(IncQuery后来改名叫VIATRA,版本从2.0开始)。不过升级版本可能需要改代码里的导入路径(比如把org.eclipse.incquery开头的包换成org.eclipse.viatra),但至少能保证依赖能正常拉到。
给新手的小提醒
- 以后尽量别用带
-SNAPSHOT的依赖,除非是你自己正在开发的项目,这种版本不稳定,说没就没。 - 别手动下载jar包加进项目,Maven就是用来自动管依赖的,手动加容易搞出版本不匹配的问题,让Maven自己拉才是正道。
内容的提问来源于stack exchange,提问作者McRaven

