相信大家都碰见过 maven 配置的依赖或者是 jar 包或者是工程,在开发的过程当中,我们当然需要引入的是工程,这样查看 maven 依赖的文件的时候,就能直接查看到源码。
一、本地工程依赖
举个例子,其架构如下所示(以下均使用 eclipse 中 m2eclipse 插件进行演示)——
此时,这里依赖的 "dependency-to-hello" 指代的是 eclipse 工作空间中的工程,这样,我们直接源码依赖的便是工作空间 里的源码,这样很方便,也是我们需要的。会注意到,所依赖的 "dependency-to-hello" 工程,并没有显示其路径,也就是默认的工作空间的 地址。
那么,什么时候 maven 依赖的是仓库 (本地仓库或远程仓库) 中的 jar 包呢?
二、(本地 / 远程)仓库 jar 包依赖
很简单的方法之一,直接把 "dependency-to-hello" 工程关闭掉 (close project),这样,就得到这样一个视图——
会看到,此时 maven 依赖的正是对应 "dependency-to-hello" 工程的 jar 文件,并且,后面的路径显示是从 maven 仓库里面取的。
三、工程依赖及仓库依赖的转换
OK,我们现在还原之,我们将工程 "dependency-to-hello" 打开,会看到对应的 maven 依赖又变回原来的工程依赖了。
需要说的是,当重新打开工程 "dependency-to-hello" 的时候,hello 工程并没有出现红色感叹号,也就是无须做 "update dependencies" 等的更新 maven 依赖等操作。
从这里,我们就能够看出来——m2eclipse 首先查看是否能够从本地工程库中得到对应的 maven 依赖,如何存在,则将本地工程依赖进来;如何不存在,则从本地仓库 / 远程仓库中加载解析对应的 jar 包依赖。
四、版本号变更
在这儿,我假装模拟一下版本号变更,来看一下,会发生什么情况?
现在 "dependency-to-hello" 工程是 "快照" 版本,当我们将之换为正式版本的时候,发现 "hello" 工程的 maven 依赖重新变回了 jar 依赖,如下——
"dependency-to-hello" 工程的 maven 坐标配置——
com.juvenxu.mvnbook dependency-to-hello < version>0.0.1 </ version> < packaging>jar
"hello" 工程的依赖配置——
com.juvenxu.mvnbook dependency-to-hello 0.0.1-SNAPSHOT
其文件架构会显示如下——
会发现其依赖是原有的仓库中的 "快照" 版本的 "dependency-to-hello" 的 jar 包。我们将仓库中的 "快照" 版本删除掉。刷新工程,发现 hello 工程上显示红色感叹号。如下——
也就是说,其依赖是空依赖,本地及仓库中均不存在。
当然这个 "陷阱" 是我自己加的,重新更改其版本号正确对应即可,就可以重新得到 maven 本地工程依赖了。
五、总结
在日常多人协作开发过程中,我们常常会遇到 maven 依赖版本变更带来的问题。当我们的工作空间也存在对应的依赖工程(对应上述例子中的 "dependency-to-hello" 工程)的时候,我们可以通过判断依赖的是本地工程还是仓库 jar 包的方式来判断是否出现了版本不一致的问题。 从而,就能够解决 maven 依赖版本变更带来的问题。转: http://www.cnblogs.com/jinguangguo/p/maven.html
来源: http://www.bubuko.com/infodetail-2439782.html