码迷,mamicode.com
首页 > 其他好文 > 详细

Maven初见

时间:2020-03-14 19:54:17      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:结构   工具   这就是我   位置   span   plugins   定义   引用   问题   

Maven 的概念

 ------- 一种标准的方式来构建项目,明确定义项目的组成部分,一种简便的方法来发布项目信息,以及一种在多个项目中共享JAR包的方法。

Maven 的主要目的是为了开发者提供

  1、 一个可复用、可维护、可易理解的工程综合模型与这个模型交互的插件和工具

  2、工程结构和内容在一个xml 文件中定义--pom.xml

 技术图片技术图片

 

 Maven中jar包的位置

  ---把查找jar的工作交给机器,因此每一个jar必须能被唯一标识

 技术图片

 

 Maven对依赖的管理

  技术图片

   scope的主要依赖关系有:

    1.compile: 默认编译依赖范围。被依赖项目在编译、测试、运行都参与。打包的时候需包含进去。

    2.test:被依赖项目仅仅参与测试相关的工作,如测试代码的编译、执行等。

    3.provided: 被依赖项目对运行期无效,打包的时候不用包进去。

    4.runtime:被依赖项目无需参与项目的编译。

 

 jar的依赖传递与冲突

    

 技术图片

 

    以上过程中,项目Mall依赖的fastJson会有三个版本。而我们的JVM只会接受一个版本的jar包。所以一定会有取舍

  maven默认的取舍规则是:

    1、路径最短原则:product和customer里的fastjson引用路径较短,路径为两步 ;pay项目里的fastjson引用路径较长,路径为三步。因此pay中的fastjson被淘汰。

    2、同路径长度下,谁先声明谁优先: product和customer中的fastjson路径相同,那么就看在pom中是先声明product还是先声明customer,谁先用谁的。

 

 maven依赖冲突和解决:

     在上面的依赖传递里,maven根据自己的规则取舍出了一个版本的jar,但是此 jar 版本选择可能会与我们项目预期不符,

      例:我们想用的版本是 fastJosn:1.2.30,但是该版本第一时间就被淘汰掉了,

       在我们项目中如果用到了该版本特性的话,项目运行就会出错---这就是我们常遇到的 jar包冲突问题。

    解决方法一:

      根据依赖树(mvn依赖树命令:mvn dependenty:tree)与给出的依赖库寻找差异,或者用idea自带的maven插件也可以看到差异

        然后再pom.xml中使用exclusion标签排除多余jar包。

    解决方法二:

      使用maven helper插件,该插件可以在从idea的Plugins中下载到。下载重启后可在pom.xml文件内容下,会多出一个dependency analyzer窗口,
        该窗口内会自动列出当前冲突的文件,右键即可查看依赖处源码或是将该库排除。

Maven初见

标签:结构   工具   这就是我   位置   span   plugins   定义   引用   问题   

原文地址:https://www.cnblogs.com/Sea-and-fish/p/12493363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!