上传依赖至Artifactory

Gradle Plugin

工程根目录 build.gradle

buildscript {
    dependencies {
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.9.8"
    }
}

Apply Plugin

Library Module 的 build.gradle apply plugin

apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'

配置参数

Library Module 的 build.gradle

def packageName = 'com.test.demo'
//def libraryVersion = '1.0.0'
def libraryVersion = '1.0.0-SNAPSHOT'
publishing {
    publications {
        aar(MavenPublication) {
            groupId packageName
            artifactId project.name
            version = libraryVersion
            // Tell maven to prepare the generated "*.aar" file for publishing
            artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")

            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.implementation.allDependencies.withType(ModuleDependency) { ModuleDependency dp ->
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', dp.group)
                    dependencyNode.appendNode('artifactId', dp.name)
                    dependencyNode.appendNode('version', dp.version)

                    // for exclusions
                    if (dp.excludeRules.size() > 0) {
                        def exclusions = dependencyNode.appendNode('exclusions')
                        dp.excludeRules.each { ExcludeRule ex ->
                            def exclusion = exclusions.appendNode('exclusion')
                            exclusion.appendNode('groupId', ex.group)
                            exclusion.appendNode('artifactId', ex.module)
                        }
                    }
                }
            }
        }
    }
}

artifactory {
    contextUrl = 'http://xx.xx.xx.xx:8081/artifactory'
    publish {
        repository {
            // The Artifactory repository key to publish to
            repoKey = libraryVersion.endsWith('SNAPSHOT') ? 'libs-snapshot' : 'libs-release'

            username = artifactory_username
            password = artifactory_password
        }
        defaults {
            // Tell the Artifactory Plugin which artifacts should be published to Artifactory.
            publications('aar')
            publishArtifacts = true

            // Properties to be attached to the published artifacts.
            properties = ['qa.level': 'basic', 'dev.team': 'core']
            // Publish generated POM files to Artifactory (true by default)
            publishPom = true
        }
    }
}

配置账号

根目录 gradle.properties

artifactory_username=admin
artifactory_password=123456

远程依赖丢失的问题

上述配置中有个 pom.withXml 的配置,这个是用来生成远程依赖的 pom 文件。

默认下,打包生成的AAR与pom是不包含 library的远程依赖的。当APP集成此依赖时,还需要手动配置此依赖的远程依赖,对于接入方不是很友好。

使用 pom.withXml 虽然解决远程依赖的问题,但也带来了可能引起依赖冲突的问题,即APP与本library同时依赖一乐一个三方库,但是引用的版本不同,就可能会带来依赖冲突的问题。

所以,根据自己的依赖包的业务场景,选择性的配置 pom.withXml 参数。

仓库地址

当本library中引用的远程三方依赖,需要配置三方仓库时(即:不是几大公共仓库 mavenCenter、jcenter等),接入方APP在使用本依赖时,也要配置此远程依赖的仓库地址。

如本例中,不仅要配置自己的私库地址,还要配置腾讯的仓库地址


allprojects {
    repositories {
        ...
        maven { url "https://dl.bintray.com/tencentqcloudterminal/maven" }
        maven { url "http://ip:8081/artifactory/libs-snapshot/" }
        maven { url "http://ip:8081/artifactory/libs-release/" }
    }
}

snapshot 版本依赖 Android Studio 中更新不及时

我们的一个版本上线前,可能会发出多个 snapshot的版本,用以测试期间使用。由于使用 snapshot 版本 AS 中会进行本地缓存,导致即使我们更新 artifactory 中的snapshot版本,本地使用的仍然是旧的版本。

查阅资料,得知如下方法:

./gradlew build --refresh-dependencies

可以强制刷新本地缓存。

但是实测效果,并未能成功。由于此方案网上大部分都在采纳,怀疑本人使用不当,特此记录下来

故此,只能通过修改版本号,已达到更新缓存的目的。

每次在 snapshot 版本前面加一个数字。如:1.0.0-1-SNAPSHOT

执行任务上传至 artifactory

../gradlew clean assembleRelease artifactoryPublish --stacktrace --info
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 ,Android 构建系统 构建 APK 的过程是个相当复杂的过程,Android 构建系统需要将应用的资源文...
    8ba406212441阅读 1,461评论 0 1
  • 五. 仓库 在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为 构件。Maven在某个统一的位置存...
    wind_sky阅读 1,513评论 0 0
  • 逅弈 转载请注明原创出处,谢谢! 以前的日子 以前我们写代码时,jar包都默认放在一个叫 /lib 的目录下,然后...
    逅弈阅读 2,948评论 3 45
  • 作者简介陈喆,现就职于中科院某研究所担任副研究员,专注于工业云平台、MES系统的设计与研发。 spring-mus...
    Gavin陈阅读 873评论 0 1
  • 肩膀和肩周炎的症状 它是一种“肩关节腹膜炎”,其中肩关节周围组织发生变性,并且发生的炎症引起疼痛。通常被称为肩部存...
    健康中医阅读 325评论 0 3