• Maven--排除依赖


     传递性依赖会给项目隐式地引入很多依赖,这极大地简化了项目依赖的管理,但是有些时候这种特性也会带来问题。

    例如,当前项目有一个第三方依赖,而这个第三方的依赖由于某些原因依赖了另外一个类库的 SNAPSHOT 版本,那么这个 SNAPSHOT 就会成为当前项目的传递性依赖,而 SNAPSHOT 的不稳定性会直接影响到当前的项目。这时就需要排除掉该 SNAPSHOT,并且在当前项目中声明该类库的某个正式发布的版本。

    还有一些情况,你可能也想要替换某个传递性依赖,比如 Sun JTA API,Hibernate 依赖于这个 JAR,但是由于版权的因素,该类库不再中央仓库中,而 Apache Geronimo 项目有一个对应的实现。这时你就可以排除 Sun JTA API,再声明 Geronimo 的 JTA API 实现。

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4 
     5     <groupId>com.juvenxu.mvnbook</groupId>
     6     <artifactId>project-a</artifactId>
     7     <version>1.0.0</version>
     8 
     9     <dependencies>
    10         <dependency>
    11             <groupId>com.juvenxu.mvnbook</groupId>
    12             <artifactId>project-b</artifactId>
    13             <version>1.0.0</version>
    14             <exclusions>
    15                 <exclusion>
    16                     <groupId>com.juvenxu.mvnbook</groupId>
    17                     <artifactId>project-c</artifactId>
    18                 </exclusion>
    19             </exclusions>
    20         </dependency>
    21         <dependency>
    22             <groupId>com.juvenxu.mvnbook</groupId>
    23             <artifactId>project-c</artifactId>
    24             <version>1.0.0</version>
    25         </dependency>
    26     </dependencies>
    27 
    28 </project>

    上述代码中,项目 A 依赖于项目 B,但是由于一些原因,不想引入传递性依赖 C,而是自己显示地声明对于项目 C 1.0.0 版本的依赖。代码中使用  <exclusions> 元素声明排除依赖, <exclusions> 可以包含一个或者多个  <exclusion> 子元素,因此可以排除一个或者多个传递性依赖。

    需要注意的是,声明  <exclusion> 的时候只需要 groupId 和 artifactId,而不需要 version 元素,这是因为只需要 groupId 和 artifactId 就能唯一定位依赖图中的某个依赖。

  • 相关阅读:
    执行makemigrations后错误集锦
    Django+xadmin的安装与配置
    MyEclipse Web项目部署失败:Deployment failure on Tomcat 7.x.Could not copy all resources to XXX.
    用户场景描述
    <packaging>pom</packaging>
    Tomcat的3种部署方式
    camelCase骆驼拼写法
    What does ‘composer dump-autoload’ do in Laravel?
    empty方法
    php页面meta头设置
  • 原文地址:https://www.cnblogs.com/microcat/p/7229326.html
Copyright © 2020-2023  润新知