maven初识

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初识)