美文网首页
aar依赖引用关系解析

aar依赖引用关系解析

作者: 德罗德 | 来源:发表于2019-06-03 16:45 被阅读0次

    概述

    1.使用aar
    2.使用仓库(也可以通过参数@aar只引用aar)

    路径构成:http://*/{group}/{artifactId}/{version}

    预设:库test依赖了rxjava2

    上传到仓库

    上传配置文件build.gradle

    apply plugin: 'maven'
    
    group = 'com.sparkrico'
    
    artifacts {
        archives file('test.aar')
    }
    
    uploadArchives {
      repositories {
        mavenDeployer {
            repository(url: "http://*/repositories/releases/") {
                authentication(userName: "username", password: "password")
            }
            pom.version  = '1'
            pom.artifactId = 'test'
        }
      }
    }
    

    http://*/com/sparkrico/test/1/
    仓库目录详情

    image.png

    http://*/com/sparkrico/test/1/test-1.pom,可以看到依赖配置信息

    <project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sparkrico</groupId>
    <artifactId>test</artifactId>
    <version>1</version>
    <packaging>aar</packaging>
    <dependencies>
    <dependency>
    <groupId>io.reactivex.rxjava2</groupId>
    <artifactId>rxjava</artifactId>
    <version>2.2.3</version>
    <scope>compile</scope>
    </dependency>
    <dependency>
    <groupId>com.android.support</groupId>
    <artifactId>appcompat-v7</artifactId>
    <version>26.1.0</version>
    <scope>compile</scope>
    </dependency>
    </dependencies>
    </project>
    

    结论:使用仓库引用包含了依赖关系,使用aar不包含依赖关系。

    image.png

    冲突处理,参数应用及验证

    指定maven库 build.gradle

    allprojects {
      repositories {
        mavenCentral()
        jcenter()
        maven { url "http://*/repositories/releases/"}
      }
    }
    
    
    implementation "com.sparkrico:test:1"
    

    引入aar的同时引入依赖RxJava

    implementation "com.sparkrico:test:1@aar"
    

    只引入aar不引入依赖RxJava

    implementation("com.sparkrico:test:1@aar"){
        transitive = true
    }
    

    引入aar的同时引入依赖RxJava

    implementation("com.sparkrico:test:1"){
        exclude module: 'rxjava'
    }
    

    排除指定依赖(引入库的同时不引入依赖RxJava)

    依赖库有版本冲突时,默认使用高版本中的依赖(注意:是引用库的高版本中的依赖),如果项目中指定版本高于依赖中,优先用项目中指定的版本
    如果想指定使用引入库中版本,使用force参数

    a = 引用库依赖(高)>引用库依赖(低)
    force = true 使用指定
    引用> a 使用引用,否则使用a

    implementation("com.sparkrico:test:1.0"){
        force = true
    }
    implementation("com.sparkrico:test:1.1"){
    }
    

    全局强制使用指定版本库

    configurations.all {
       resolutionStrategy {
       force 'org.hamcrest:hamcrest-core:1.3'
     }
    }
    dependencies {
      ……
    }
    

    DependenceDemo in Github

    参考:
    Android导出aar时嵌套引用的那些坑
    Gradle DSL文档

    相关文章

      网友评论

          本文标题:aar依赖引用关系解析

          本文链接:https://www.haomeiwen.com/subject/vuztqqtx.html