美文网首页
maven初识

maven初识

作者: Elliott_077d | 来源:发表于2020-10-18 23:11 被阅读0次

    maven是java里面最常见的包管理器,在包管理方面前端与之类似的是JS的npm。相对于java,js的包管理起步无疑要晚很多,相对的也就很多借鉴的地方,下面就用类比的方式来谈一下maven的一些基本知识。

    与package.json相对应的是pom.xml,也就是一个项目的描述,通过groupId,artifactId和version三个属性可以决定该引用的唯一性,与此同时,该项目相关依赖都在dependencies标签下面。

    与js的dev- dependencies相对的是pom里面的包可以配置对应的scope,在不同的场景下使用。

    对应的,一个项目的依赖也是一个树形的结构。

    IMG_5F08E1C35883-1.jpeg

    出于离线开发的考虑,在npm i或者刷新maven的时候,相关的依赖包就会被下载到本地包。如果偷懒,大可以就按照每个依赖一直往深处下载,直到最后一层。但这样是很不明智且浪费空间的做法。(早期的npm就不够智能)例如上图,B和D都依赖C,没有必要下载两次C。

    现在的npm是会比较版本,相同版本的包只会下载一次,不同的再采用不同的包。但是java的包系统和js不同的地方在于java引入外部包的时候是会把外部包的路径加到环境变量中去寻找,这样包名具有唯一性,所以在两个依赖的包版本不一样的时候就会出现所谓的包冲突。

    maven的包管理出现两个冲突时遵循两个原则:

    1. 深度不一样的情况选择路径短的
    2. 路径深度相同的情况选择先出现的
      两种情况优先选择的情况在上图都用红色标记出来了,换言之可以理解为一个从上到下的广度优先遍历。
    IMG_B2F6404F8424-1.jpeg

    关于maven包管理的基本信息目前只了解到这里,maven与npm不同的是自带了很完善的生命周期,而前端要做一些操作只能自己去写npm script,后续更多关于maven的使用了解之后再细说。

    相关文章

      网友评论

          本文标题:maven初识

          本文链接:https://www.haomeiwen.com/subject/rgyhmktx.html