栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

maven中dependency中的参数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

maven中dependency中的参数

com.baomidou

mybatis-plus-annotation

3.5.0

compile

        大家都会用maven,了解dependency是处理依赖包的,有时候在运行springBoot项目时,会报错,提示XXXXnot fund,这种情况有时候就是依赖包为找到导致的,有时候又会有疑问:“明明包已经依赖了,为什么还会提示找不到呢?”,说明了解的不充分,充分了解dependency,对处理问题也有很大的帮助。

    先了解dependency中的参数:部分源码如下

3.0.0+

3.0.0+

The project group that produced the dependency, e.g.

org.apache.maven;.

这是部分源码,

dependency中包含:

  •       : 创建项目的组织或团队的唯一Id,可视为公司名

                                    eg:org.apache.maven

  •    :  项目中的唯一Id,可视为项目名

                                    eg: maven-artifact

  •       :   产品的版本号  

                                     eg: 4.0.0

  •         : 指jar包作用范围  包含:test ,compile peovided ,runtime,system 

                                eg: test   

                                      test:指测试范围有效,在编译和打包的时候都不会使用这个依赖

                                      compile :编译范围有效,在编译和打包的时候,会将依赖存储进去

                                     provided:在编译和测试 有效,最后生成war包时不会加入,如: servlet-api。(war包是tomcat打包,因为tomcat有servlet-api,再打包会出现冲突)。

                                  runntime:指被依赖项目无需参与项目编译的,不过后期的测试和云习惯周期需要其参与。和compile相比,跳过编译而已,区别并不大。一般的scope为runntime 。通常runntime搭配optional使用,optional为true。

                              system  :和provided相同,不过被依赖项不会从仓库抓,而是从本地文件系统拿,一定需要配合systempath属性使用,eg:system

                            ${basedir}/web/core-1.3.jar

  • : 依赖排除,有时候依赖jar包冲突,可以使用此注解,将依赖排除掉,不引用该jar ;

               举例说明:projectA依赖jar-B(版本为1.1),projectC也依赖jar-B(版本为1.2),假如现在有一个项目同时依赖项目A和项目B,那么他就会导入两个版本的B(1.1和1.2),由于B的两个版本不同,这里就会导致包冲突,这个时候就需要exclusions来解决冲突,不过maven也有一个机制会避免两个都加载进去,

下面先介绍maven的依赖调节原则:

1,第一原则:路径近者优先原则

                       A→B→C→X(1.1)

                       D→E→X(1.2)

                       使用X(1.2),因为其路径更近

2,第二原则:第一声明者优先原则

                       A→B→X(1.1)

                       C→D→X(1.2)

                      使用X(1.1),因为其先声明

maven会先根据第一原则判断,若路径相等,再根据第二原则判断

但是我们还是使用exclusions来配置更加合理,

我们使用spring bean 和 struts2 spring plugin来举个例子说明这个问题并使用exclusions来解决这个问题

(spring bean 和 struts2 spring plugin都依赖spring-core但是版本不一样)我们在运行是会出现冲突报错,此时就需要用到exclusions注释,去除冲突。

                               eg:   

                                     test

                                      test

                                           1.0.2-SNAPSHOT

                                    

                                            

                                                  org.springframework

                                                     spring

                                                  

                                           

                                  slf4j-log4j12

                    org.slf4j

                

            

        

  • : 当 projectA 依赖projectB ,projectB 依赖projectD时 标记依赖是否可以传递,默认值:false

                          如果需要传递则定义true;

                       optional 可以减少项目之间的包冲突

  •     :依赖的类型,jar 或war (默认jar)

  • :通常用于从同一个pom架构中拥有不同内容的构件,可选属性,如,依赖jar -1.0-jdk1,jar-1.0-jdk2,jar-1,2-jdk3,如果不加classifier,则maven找不到包,需要加上,明确想要的版本.

                    1.0

                     1.0

总结:以上maven 中的dependency依赖并不是全部都要写,其中groupId ,artfactId,version 这三个是基本的依赖,不可缺少。其他的根据自己需求写。

注:自己在使用依赖包的时候,学会根据提示信息,判断包冲突问题,多数是依赖版本的冲突导致。

  

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/894067.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号