Workspace resolution失效时,如何让Eclipse使用Maven项目?
我之前也碰到过一模一样的情况!明明把A和A-test这两个多模块项目都导入同一Eclipse工作区了,按说启用Workspace Resolution应该直接用工作区里A项目的最新修改,不用每次都跑mvn install更新本地仓库,但偏偏就是不管用。折腾了好久,终于找到几个可能的原因和解决办法,分享给你:
模块依赖版本配置错误
先检查A-test的pom.xml里对A项目的依赖写法:如果是硬写了固定版本号(比如1.0.0),而不是用${project.version}这种继承父pom的动态版本,Eclipse大概率会优先从本地仓库拉取依赖,而不是关联工作区的项目。另外要确认主pom.xml里的<modules>标签是否完整包含了A和A-test的所有子模块,漏写的话也会导致关联失效。Maven项目依赖未刷新
有时候导入项目后,Workspace Resolution的配置并没有真正生效。试试右键A-test项目 → Maven → Update Project...,勾选「Force Update of Snapshots/Releases」选项后点击OK。这个操作会强制Eclipse重新解析pom.xml,关联工作区内的依赖项目。依赖项目存在编译错误
如果A项目的某个子模块有编译失败(比如代码红叉、资源缺失),Eclipse会自动 fallback 到本地仓库的jar包作为替代。先确保A项目的所有子模块都能正常Build通过,没有报错,再尝试运行A-test。Maven插件版本不兼容
老版本的m2e(Maven Integration for Eclipse)插件存在Workspace Resolution的已知bug。你可以检查插件版本:点击Help → About Eclipse IDE → Installation Details,找到「Maven Integration for Eclipse」查看版本,如果版本较旧,去Eclipse Marketplace更新到最新稳定版。单个项目的Workspace Resolution开关未开启
别只看全局设置,一定要检查单个项目的配置:右键A-test项目 → Properties → Maven,确认「Resolve dependencies from workspace projects」选项是勾选状态。有时候全局设置开了,但单个项目的配置被意外取消了。
我当时的问题是A-test里某个子模块依赖A的子模块时用了固定版本,改成继承父pom的动态版本后,再刷新Maven项目,Workspace Resolution就正常工作了——修改A里的代码,直接跑A-test就能看到效果,再也不用每次执行mvn install了!
内容的提问来源于stack exchange,提问作者hectorpal

