通常会有这样的两种情况:1,在项目开发阶段时,我们想优先使用工作空间的项目代替maven库中的jar包.2,项目测试时我们想优先使用maven库中的jar包代替工作空间的项目.下面对如何调整优先级做一点分享(个人实验得来的经验,不够官方,如果更好的方案还请指教).这里我们将用两个项目分别叫biz和dao作为演示.其中biz依赖dao.
原理:
maven项目在查找依赖时会首先查看工作空间是否有满足当前groupid, artifactid, version条件的项目,如果有就会将其引入进来,此时你在maven的依赖里就会看到文件夹形式的依赖,这就是项目依赖.否则你就会看到一个jar包被引入进来.
这两种引用各有好处,当进行项目开发时我们可能需要频繁地更改dao里的代码,此时当你改变或者添加了一些biz编译所必须的代码,这时你的biz包里是不能马上生效,你需要将改变后的dao包装入maven库(本地或者远程)才能在biz层继续.这样就非常麻烦.所以如果此时
你用了项目依赖(即文件夹形式),你就不用将包装入maven库,直到你需要打包biz时你才需要去将dao代码装入maven库.
因为打包时的依赖必需从maven库上取得.
但同时我们可能也有这样的情况,比如我们引入进来的代码是用来看的源码,又或者是我们想测试当前maven库上的包在编译时会不会还有错误等等,此时你可能非常想依赖maven库上的dao包来编译biz包.此时我们就需要用到第二种情况.
解决方案 :
1,在项目开发阶段时,我们想优先使用工作空间的项目代替maven库中的jar包
a,当我们通常情况下,在biz项目里,maven会自动使用dao项目作为依赖,前提是groupid, artifactid, version这三个参数要和biz所依赖的相同.如果没有使用项目依赖,可以手动用maven更新一下biz项目就可以了.
2,项目测试时我们想优先使用maven库中的jar包代替工作空间的项目
a,关闭工作空间中打开的dao项目.此时maven会自动使用maven库中的jar包进行编译.
b,修改groupid, artifactid, version中的一个参数,此时maven由于在工作空间中找不到相对应的项目也会自动使用maven库中的jar包进行编译.建议修改version参数.