00:00
好,我们接下来呢,看一下依赖的传递。什么叫依赖的传递呢?这个事儿其实还比较好理解,哎,当我们A。依赖B。B、依赖C的时候。啊,这个ABC呢,可以是第三方的价包,也可以是我们开发的这个我们自己定义的妹妹工程都可以哈,A依赖BB依赖C,那么对A来说呢,他肯定可以用B啊,他都依赖了,他肯定可以用B,也肯定可以用C,是吧,这都没问题,这些呢都叫直接的依赖。那么当我们把它们串成这一串的时候,形成一个链条A能不能用C呢?哎,如果A能够用C说明这个C呢,就能够传递到A这。对吧。那么我想呢,我们肯定是希望A能够用C的,因为A如果不能用C的话啊,这个传递不过来,那么A想要用C的话,他就得自己去依赖一下C。
01:04
是吧,哎,如果能传递的话,我们就可以少写一个依赖。对吧,我们肯定是这样的一个意思,可是那么到底能不能传过来呢?啊,这个时候其实我们说呢,有一点限制啊,我们来说一下,这个咱们就直接呢,先把结论告诉大家,然后下边咱们再有针对性的去测试。A依赖BB,依赖C,那么C呢,能不能够去传递到这个A这儿啊,这个呢要看什么呢?看这个B啊,B对C的依赖,看这个地方啊是什么,是哪一种范围。如果是compare范围的就没问题,Compare范围的能传递过去,Test和provided的呢,这两种范围的就传递不过去啊,别的范围的我们暂时也用不上,先不管它啊,就说这三个范围里头,Compel能传递,Taste和provided的范围不能传递。就这么个事儿,这就是结论,接下来呢,咱们就哎。
02:01
呃,具体针对这个啊,针对这个现象,咱们来这个具体来验证一下。那我们具体要进行测试的话。就不能说哎用ABC这样的呃代称,我们得找一个具体的夹包,那么我们使用的呢,咱们来看一下,我们用spring扣来进行这样一个测试。哎,Spring扣,我们通过呃,Comp的范围呢,来依赖一下spring。这里边哈,因为我们前面说大家学过Java web就可以来学咱们这门课啊,那这个时候呢,可能啊,估计啊,很多同学还没有学过这样的框架啊,Spring这些,不过没关系,你不用管spring是干嘛的啊,就就就就是个架包啊,就是个架包,你别管它里边的这个细节啊,咱也涉及不到,涉及不到它里边的细节。那么我们做这个测试呢,就需要把这个呀。依赖信息呢,给它复制过来。放到我们这个第一个Java工程啊,第一个Java工程它的泡沫文件里边。
03:01
然后呢?放到这,哎给它往后呢,去缩进一下。这个呀,是我们spring依赖依赖啊就是。1COMMA pale范围导入spring。依赖测试依赖的传递性。这个时候呢,我们最方便的就是用最直观的啊,就是用dependency tree。来进行一个分析和展示。哎,我们命令行也进入到,哎PRO01JAVA这个工程这。然后呢,咱们运行一下这个妹问。Depend。好嘞,那么啊,这个我刚才运行了一下啊,呃,如果是呃没有运行过啊,Spring没有下载过,那这个时候过程中会有一个下载的过程啊,我刚才已经运行过了,哎,所以说这个地方这个就没有显示那个下载的过程,第三方架包呢,往我们本地仓库里边下载,就下载一次就行了,是吧,以后呢,就是用这个下载好的,它不需要每次都下载。
04:18
好,那么它这个树形结构分析的结果呢,就是这一段啊,这时候咱们来看一下我们这部分呢,就是对我们spring扣的一个依赖。然后呢,我们发现啊,Spring呢,它又依赖了我们common slogan。对吧,哎。又依赖我们。那么这个common slogan呢?它能不能够传递到我们当前这工程呢?当前工程就是它。所以这个你看啊。我们我们这个工程就相当于是a spring呢,就是我们刚才说的b common slogan就是我们刚才说的C啊,这个时候它能不能够传递过来,我们可以用这个depend list来看一下。
05:04
这里边你看啊,这但凡是这儿列出来的啊,但凡是这里边它列出来的就都是我们当前这工程可以使用的夹包啊,或者说可使用的依赖,那么这个common slogan呢,这能列出来,能够放在这儿说明呢,它就是可以用的。那么这个时候我们去看一下我们spring扣啊,它对common slogan的这个依赖。啊,是这个一个什么范围,这个怎么去找呢?你看呀,其实我们这部分呢,相当于哈,相当于就是我们的一个swimming命扣这个加包的一个坐标啊,你看这儿有一个二,所以我们到本地仓库里边呢,先找这个,诶先找这个二。下一步呢,找spring framework。哎哎,再接下来你看找spring扣,这都是能够对应的上的。
06:00
哎,在接下来呢,是这个价到倒没有哈,价没有,这说的是它的打包方式,接下来找的是它的这个版本号啊,版本号四点零点零点release。诶,然后再接下来这个就不用了哈,就到这儿已经能看到这个夹包了,它的点po沫文件,就是它原始的POM展示毛,我们把它呢,用文本编辑器给打开。这里边呢,我们就看到有dependence啊,这不就是common slogan吗?他对common slogan的依赖呢,这不就是吗?哎,所以说comp范围这个是可以传递过来的。然后呢,这儿还有一个隐身去看一下啊。A依赖着B。B依赖CB对C呢,是compare范围依赖的,那么A对B当然也是compare范围依赖的,现在呢说如果我还有一个D。依赖了A这个C能不能继续传递到D这儿呢?诶,这个我们也可以实际的来验证一下,比如说我们现在这个A呢,就是我们PRO01,我们这个Java工程。
07:05
那我们D呢,依赖我们一号Java工程的这个,就是我们二号的这个外部工程,所以我们到外部工程这儿呢,咱们也看一下依赖的分析就行了。诶,这个很容易看啊CD02。然后在这呢,我们运行一下main dependency直接咱们就去吧,啊数运结果来看一下。哎。呃。在这哈,诶我们看到这个就是0JAVA。诶让他呢,我们对这个工程的依赖哈,我们对它的依赖是恐怕范围的,可是呢。我们没见着它下边有这个spring扣啊。诶,这个是怎么回事呢?我明明依赖了spring呀。你看。
08:00
明明是依赖了,他这怎么没显示呢,按说应该显示。这大家觉得这是不是一个问题?哎,这确实呢,不应该是这样去显示的,和我们这儿做的这个配置呢不一致,那么事出反常怎么样必有妖。那就得想这这个是哪个环节出了问题啊呃。我们想哈,我们这个二号这个外部工程啊,他凭啥能够找到我们这个一号的这个炸药工程。你可能说了,这还不简单吗?对web工程来说,Java工程就在他隔壁啊。啊,就在他隔壁啊,他这个这么近,他就挨他旁边,他咋能找不着呢。啊,你比如说我出去外边溜达的时候啊,一个小伙旁边要做一个大美女,他肯定能看着啊,哎,这个呢,你说的是人的感官,对于程序来说哈,你想对于外部工程来说啊,它的核心是这个po沫文件,如果说呢,你通过po沫文件找到Java工程的po文件,它是不是得从当前外部工程的。
09:07
这个当前目录出来,呃,然后进这个目录去找他,可是呢,我们在这个对web工程的依赖里边,并没有按照路径这样去指定,我们是怎么指定的呀,我们是按照这个依赖的信息啊,按照坐标去指定的。而根据坐标,我们到哪儿去找夹包啊?Come。艾特硅谷maven pro01ma Java,我们是不是来这个仓库里边找啊,仓库里边你看这个。我们是不是仓库里边depends,就这一段,它只是依赖了unit,它并没有依赖sprinkle。这说明一个什么问题啊,这说明呢?我们没问,仓库里边安装的还是那个旧的。哎,你改了,你改的是你本地的这个,哎,你就是你新改了,只是你本地改了没在仓库里边没有改,所以说呢,这边它没有生效,哎,所以说我们这边想要去看到,诶,我们想从web这啊进行依赖分析,看到一号的Java工程依赖了spring扣,进而看到spring扣依赖的common slogan,这个时候你必须得把这个一号的Java工程干嘛呀,重新去安装一下。
10:21
啊,让你本地的做的这个新的修改,把它放到存入到妹的本地仓库啊,让本地仓库是你最新的这个代码才行。所以说我们就在这儿哈,它分析这些呢,是基于我们微问仓库啊,基于本地仓库来分析的。所以说呢,我们回到我们的PRO01啊,我们去重新的去分析一下。哎,不是叫重新安装一下啊,Clean install,哎清理以后这个重新去安装。好嘞,然后呢,我们这个时候啊,这不是我们一号的Java工程吗?点右键啊,或者说对这儿它这个我们这个叫notepad加加,它自动的会检测到啊,你这个呃,它打开的这个文件它有更新,所以我们这点是。
11:11
哎,你看下边这个东西就做出来了啊,这回重新安装了以后,妹妹的本地仓库也更新了,才能够看到最新的结果,我们再回来,回到我们二号的web工程,然后呢,没dependency。这回我们就看到我们二号的外B工程,它所依赖的一号的Java工程,哎,一号Java工程依赖了我们spring扣,Spring扣呢,又依赖了我们common。这一串都能够传递过来,如果说呢,我们二号的外部工程是A,哎,一号的Java工程是b spring Co是C啊,Common slogan,如果是D的话,那就是abcd啊,这一串它们全是comp范围的,这个就都能传递过来啊,都能传递过来。
12:04
那么说呢,这时候大家也看到我们在这个spring,呃,这个一号的Java工程里边。其实他也依赖的只有你的。是吧,它也依赖了这有,但是呢,你从这儿哎一号Java下边只看到有supreme扣,没有看到你依赖的这个这个这unit,哎就证明呢,确实是这个测试的范围呢,是传递不过去的,所以说不能传递的呢,你看啊,我A依赖了B啊。B里边依赖的只有你。哎,可是因为B依赖指由ne是测试的范围传递不过去,所以A呢,想用指由ne,它也得自己去依赖一下。啊,这个依赖信息呢,就是说你就不能省略了啊,不能省略,因为你享受不到这个传递的这个功能。哎,所以说你看我们在这个外部工程这儿,他得自己去配这个只有你的,包括我们这个。
13:03
一天也是啊。我们把它呢,也拿到我们的这个Java工程啊,一号Java工程这儿,哎,还是肯定要重新安装一下才能够生效。即使你重新安装啊,然后呢,到外部工程这儿,咱们重新去进行一个分析。你还是只能看到一号工程呢,它只是传递过来spring的,哎,它的这个,呃,对一号工程,一号Java工程来说啊,它case的范围依赖的只unit和provided范围依赖的API都没有传递过来,只有comp范围的spring啊传递过来了。
14:02
那你说这你没写这compel呀,哎,你别忘了scope它默认就是compel啊,所以说这个不写不写就是compel,哎,这就是我们依赖的传递啊,哎,这就是我们依赖的传递,再说一遍我们这个结论啊,哎,当A依赖BB依赖C的时候,那么如果B对C呢是compare范围依赖的,那么C呢,能够传递到A这。而且还能继续往上面去传递啊,这一串只要都是compare范围的都可以往上传,如果是test或者provided范围的啊,B对C的依赖,如果是taste或provide范围的就不能传递,哎,这就是我们依赖的传递性。这个依赖的传递性哈,就解释了我们前边给大家去演示过的这么一个事儿啊,为啥为啥说我们这个用spring boot这些功能哈,Spring cloud这些功能,我们只需要导三个依赖。然后呢,这个妹妹就能够给我们导进来这106个,这就是因为说他们有依赖的传递性啊,包括我们下边的说这个图啊,这个图。
15:07
哎。呃,我们把这个图咱们再放大一下来看啊。第六个我记得是。大家看啊。这三个依赖呢,我们可以对号入座哈。呃,这个不是,这是我们自己开发的另外一个模块。哎,然后,哎。你。然后呢?它下边的这个塞利夫。就是我们这儿依赖的,哎,这个Sam lef,你看这个能对应上啊,接下来呢,这儿有一个spring cloud start,阿里巴巴NAS discovery。就是我们这儿说的这个。诶。然后呢,再往下你看这有一个spring start web。
16:01
啊,就是就是这个,所以说你看我们依赖的这仨啊,就是我们这儿看到的这是一个。哎,这是一个第二个,第三个,这是我们自己开发的,这个不算。哟,他咋成这样了啊?哎,然后呢,其他的都是由这几个价包他们给依赖的,别的价包给传递过来的,你看这个箭头从他们这儿指出去好多,哎,就是以这样一种形式呢,给我们传递过来的。啊,呃,Springboard spring cloud就是利用了我们依赖的传递性啊,他们把很多很多的这个价包呢,都汇总到这些个,哎,总的价包里边,哎,这里边儿你看有一个词叫starter,哎,这个呢,在spring boot里边呢,叫启动器啊,哎,就都汇总到这里边了,哎,我们只需要引入个别的很少的几个starter。这个start就借助我们微问的依赖的传递性,把这么多的家暴都给我们传递过来。而且是人家spring boot经过严格的这个测试的,哎,所以说就是哎,虽然说我们现在这个大家还没有学SM哈,我们提前剧透了这个了啊,哎,就相当于是给大家去提前去种草吧啊哎。
17:14
所以说spring提供这个start哈,给我们去,呃,就是就就是借助我们main的依赖的传递性啊,就进一步去帮我们去简化我们对依赖的这个管理。
我来说两句