上传依赖至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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

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