zoukankan      html  css  js  c++  java
  • maven

    Maven中dependencyManagement的作用

    1.在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。

    2.pom.xml文件中,jar的版本判断的三种途径

    1:如果dependencies里的dependency自己没有声明version元素,那么maven就先根据parent以来的版本确定,也没有再去dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果

    没有就会报错,告诉你必须为dependency声明一个version

    如下

    复制代码
    pom.xml  
    //只是对版本进行管理,不会实际引入jar  
    <dependencyManagement>  
          <dependencies>  
                <dependency>  
                    <groupId>org.springframework</groupId>  
                    <artifactId>spring-core</artifactId>  
                    <version>3.2.7</version>  
                </dependency>  
        </dependencies>  
    </dependencyManagement>  
      
    //会实际下载jar包  
    <dependencies>  
           <dependency>  
                    <groupId>org.springframework</groupId>  
                    <artifactId>spring-core</artifactId>  
           </dependency>  
    </dependencies>  

     

    dependency中scope的作用

    https://blog.csdn.net/pengpengzhou/article/details/81743567

    https://blog.csdn.net/xiao__gui/article/details/47341385

    https://www.jianshu.com/p/d44f713b1ec9

    官方

    http://maven.apache.org/plugins/maven-jar-plugin/examples/manifest-customization.html

    http://maven.apache.org/shared/maven-archiver/index.html

    maven常用的scope有compile,provided,runtime,test。

    1. complie是默认值,表示在build,test,runtime阶段的classpath下都有依赖关系。
    2. test表示只在test阶段有依赖关系,例如junit,如果是封装SDK,日志的具体实现需要由调用者指定,但是又想要在自动化测试中输出日志,就可以将日志的依赖包的scope设为test,但是slf4j-api的scope还是要设置成compile,否则会编译失败。
    3. provided表示在build,test阶段都有依赖,在runtime时并不输出依赖关系而是由容器提供,例如web war包都不包括servlet-api.jar,而是由tomcat等容器来提供
    4. runtime表示在构建编译阶段不需要,只在test和runtime需要。这种主要是指代码里并没有直接引用而是根据配置在运行时动态加载并实例化的情况。虽然用runtime的地方改成compile也不会出大问题,但是runtime的好处是可以避免在程序里意外地直接引用到原本应该动态加载的包。例如JDBC连接池,具体的log包,因为编译时使用的是slf4j的接口,并没有直接调用日志实现类。

    maven依赖jar包时版本冲突的解决

    https://blog.csdn.net/sinat_39789638/article/details/78005945

    共有四种解决方式:
    1、第一声明优先原则:
    在pom.xml配置文件中,如果有两个名称相同版本不同的依赖声明,那么先写的会生效。
    所以,先声明自己要用的版本的jar包即可。
    2、路径近者优先:
    直接依赖优先于传递依赖,如果传递依赖的jar包版本冲突了,那么可以自己声明一个指定版本的依赖jar,即可解决冲突。
    3、排出原则:
    传递依赖冲突时,可以在不需要的jar的传递依赖中声明排除,从而解决冲突。
    例子:

    <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.3.24</version>
            <exclusions>
              <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
              </exclusion>
            </exclusions>
        </dependency>

    4、版本锁定原则(最常使用)
    在配置文件pom.xml中先声明要使用哪个版本的相应jar包,声明后其他版本的jar包一律不依赖。解决了依赖冲突。
    例子:

    <properties>
            <spring.version>4.2.4.RELEASE</spring.version>
            <hibernate.version>5.0.7.Final</hibernate.version>
            <struts.version>2.3.24</struts.version>
        </properties>
        <!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>${spring.version}</version>
                </dependency>
    </dependencies>
    </dependencyManagement>
  • 相关阅读:
    Mybatis源码中最重要的几个类
    学习爬虫-运营商积分
    IntelliJ IDEA 最新版 2019.2.4 激活 (持续更新)(含windows和Mac)
    归并排序之求小和
    归并排序
    理解递归
    插入排序
    对数器
    冒泡排序
    mysql 数据库名称,中间带有中划线问题
  • 原文地址:https://www.cnblogs.com/suntp/p/9211785.html
Copyright © 2011-2022 走看看