00:01
哎,我们看看。呃,什么叫做版本仲裁。当我们某一个工程。它呢,依赖另外两个工程。啊,另外这两个工程呢,他们所依赖的某一个架包呀。按说呢,也算是同一个假包,可是版本不一样。诶,那么这两个版本不一样的啊,这个artifact ID一样的。按说也算同一个家包啊,不同版本的同一个家包,那它这个时候按照我们依赖的传递性,传递到我们这个啊汇总的这个工程这的时候,你看这个时候这一帧和这一帧不就汇总到他这儿了吗?诶汇总到他这儿的时候,那么是采取这两个里边的哪一个版本。哎,因为传递过来的时候呢,妹妹觉得呢,我这儿不能给你传递过来两个呀,我要是能帮你去决定,哎确定的选用一个,这不就是挺好的吗?啊,这也是他觉得这样的方式一定程度上能够减少加班的冲突。
01:05
这时候呢,就是有这么两条原则啊呃,一个是路径最短优先,就好比说呢,你看我们这个架包到这儿需要几步呢,123。这个夹包到这儿呢,需要几步呢?一二哎,它是三,它是二,所以这个时候呢,路径短的啊,反而胜出了。这个可能会比较违背我们的直觉哈,我们可能会认为说呃哪个版本高用哪个,但是呢,这个微问哈,呃,它其实有它自己的识别版本高低的这个办法,但是呢,我们大部分绝大部分加班呢,没有遵守它的这个规定。啊,因为那个他微问定义的那个规则呢,我们平常也用不上哈,我们也没有人遵守,所以说咱也就不给大家去介绍了。哎,所以说这时候呢,这个在ma文看来,他并不觉得你这个版本比这个版本高啊,他也他也呃没有办法把ma文自己的这个标准往往别的版本上面套啊,因为你们别的别的这个也并没有按ma文的这个要求的这个格式那么去写。
02:11
所以说呢,妹妹其实呢,他这个时候它没有办法识别到哪一个版本高,哪一个版本低啊,这个时候你别觉得我们现在举的这个例子很容易分辨哈,这17不就比12要要要要大吗。啊,但是这个东西你没法说啊,你看这个一点呃,幺零和1.2。你说这两个版本哪个高?你这个怎么衡量。是吧,你要是按照这个字符去排序的话,那这个幺零就会排到这个二的这个呃前面它它应该是哎,它在前他在后,可是呢,我这个如果我把它理解成是十,它是二的话,十呢,又是版本又是比二要高的。哎。啊,我的意思是说你要是按降序啊,按数值字符去排序的话。
03:00
可能这个会认为二是一个更高的版本啊,但是你如果认为10比2大,哎,那这时候就十是更更高的版本,就看你是这样比还是哎整个这样比啊,所以这个东西还还不好说啊,确实没有办法说精确的去有一个体系呢,去帮我们识别到哪个版本高,哪个版本低,所以说呢,这个第一个原则就是路径最短优先。我们先说一下啊,说完了以后咱们再来这个去验证,那么如果碰巧他们路径长短一样的话怎么办。哎,你看他这儿到这儿哈,这两个这个路径都是二啊,这个时候的话路径一样的话又怎么办呢?哎,那就看哪一个先声明,哎,呃,我这个工程里边依赖了他和他对吧,那么就看对他的依赖和对他的依赖,哪个在前边,哪个在前边哪个就生效。啊是这么一个原则,下边呢,咱们来这个试一下啊。
04:00
哎,我们也创建这个abcd这四个,让它分别依赖log街的,哎这个不同版本。PRO06。呃,Model a。呃,还需要BCD。诶。PRO07MODEL b。PRO08MODEL c。呃,再来一个D。
05:04
哎,这样的这几个model我们都都建好了,然后呢,让A来依赖B,按照这个图啊,A依赖BB,依赖C。诶,全都关掉。A、依赖B。Depend dependency。他的group ID是他。Artifact底。零七。Model。好嘞,啊,然后这是A依赖BB呢,要依赖C。C呢是零八。
06:09
好嘞,C呢,让他一来log。嗯,这哈,我记得是,我看我记得对不对哈。嗯。不行,想不起来了。这个我们得去搜一下哈。哎,Log for log for。哎,老。
07:02
C呢,依赖的是看我们这里边儿啊。1.2.17。就是这个。然后呢,下边这个D啊,依赖幺二,我们让A呢去依赖这个D。哎,这不就分支了吗?它既依赖B,也依赖D。看有没有提示。好嘞,然后让这个D依赖这个幺儿。把C这边这个给它复制过来。你看这个这个C和D如果依赖的是一样的话,就没有啥可说的了,现在呢,他俩依赖的不一样。是吧,哎,然后呢,现在因为D依赖的幺二路径短,所以说A这里边儿呢,应该拿到的是这个幺二。
08:06
这个怎么看哈。嗯。这样。咱们呢,还是还是使用这个。咱们之前曾经用过的啊,这个依赖的列表。Open in terminal。哎,这个呢,就是来一个MVN的底喷nc list。等一下啊,哎呦报错。嗯,他说啊,不能够解析对这个这些我们这些东西啊。他没有安装,我们去执行一下安装哈。呃。妹子可隐道,就。
09:00
好嘞,然后呢,我们再重新来啊,重新回到这儿。重新执行这个,让他列出来我们这个依赖的列表。我们看一下啊,哎,你看。对A来说,哎,他现在导进来的。这个log for真的依赖是这个幺二的这个啊,因为这个路径短,哎,这个路径短。呃,颠倒一下,如果如果让这个C呢,依赖的是幺二。比如说它是幺三吧。下载下载下。然后呢,让这个地呢,依赖一个幺四。嗯。这样我先不改,我先重新去执行一遍这个。你看他会不会改变?你看也没有变啊,你看这个C依赖的那个,它路径长的那个变了它也不受影响,我这儿改一下,这儿改成这个四。
10:13
有。这个为啥这儿这儿没改了哈,这是因为我们得看来这个是因为我们没有重新去安装。呃,这个重新去安装一下才能够生小孩。这么说来的话,我们这个前面把C那个地方改的那个应该也不算数哈。哎,这个我们测试的过程中,这个。测试的方式存在一定的问题。CD0。这个A呢是六哈。我们现在呢,才来重新运行一下。这时候你看这改成四了啊,这改成四了。
11:00
然后呢,我把这个A这个呢,就是C依赖的这个地方啊。这重新改一下。再改一个,他改成200。然后呢,重新安装。重新安装以后再重新运行depends。这不就。这不就没得说了是吧?CD06。我们看的还是A的依赖列表啊,我们看的是底下的这个依赖传递到A,这对A的影响啊,你看这还是这个要死啊,还是这个D依赖的这个要死啊,你C这个怎么改,对对这个D对这个传递到A这儿来说是没有影响的,这个呢,就是说我们看到这个是最短路径优先。如果他们路径是相同的话。我们再来见一下这个XYZ。
12:02
嗯。幺零。Model X。幺幺。Model。Model。我让X依赖Y,也依赖Z。Depend dependency。哎,这com点艾特。硅谷。呃,依赖外。哎,然后呢,也依赖Z。
13:10
好嘞,然后呢,Y和Z分别依赖两个不同的log for。这种现象呢,我们说哈,在这个实际开发当中,确实是非常的普遍哈。呃,后边呢,我们会谈到这个如何去解决这个依赖的冲突啊,就是这个准确说是加班的冲突,这个时候呢,我们说啊,Mayman的这个版本仲裁机制啊,能起那么一点作用,但是但是呢,也有限啊,有的时候冲突的假包呢,妹们并没有说把它们识别为同一个假包,这个版本仲裁呢,它其实呃生效的前提啊,它生效的前提是能够妹们能够把它识别为同一个价包才行,妹们如果不能把识别为同一个假包的话。那这个时候他就管不了了啊,他能够起的作用其实非常有限。
14:03
啊,就是他俩这时候这个意思,它俩都指向是log for,然我们给这个XY和Z呢,给它版本变一下。你看这是幺二。啊,这也是幺二,那比如说我们把这个Z呢版本变成幺三。哎,这个时候呢,就区分开了啊,哎,这俩就这这这看的不是很清楚哈,也不知道哪个是哪个。我们还是来列一下这个依赖的列表,当然了,整体上先MV隐私到一下。好嘞,啊,然后呢,CD010。MVN的dependency。历史上。
15:00
哎,这时候呢,倒过来的是幺二,为什么是幺二呢?我们看一下啊,对X来说呢,先依赖的是Y。哎,那么Y里边的幺二就生效了,Z里边的幺三呢,就没有生效,我们把X里边对Y和Z的这个依赖的顺序给它,给它这个去颠倒一下。然后呢,重新去执行安装。然后CD1不是110。M vn dependency list。哎,这会就变成幺三了,哎,这个时候它路径相同的时候,哪一个先声明的就以哪一个为准啊,这个就是妹妹的这个版本仲裁机制,但这个东西吧,就说这个多少有那么点用,但是呢,只靠它还是没有办法完全解决我们的这个价班冲突的问题的。
我来说两句