前言

在前面的文章中,以及说明了本地仓库的搭建及其gradle上传的使用;

automation - 使用Artifactory简单搭建本地library仓库

automation - 使用docker搭建基于artifactory的library仓库

1. root/build.gradle

根目录下的build.gradle 需要引入 artifactory :

// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from: "$rootDir/config.gradle"

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4+"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url urls.localUseMaven
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

有人要说了,为什么使用了 config.gradle 不统一配置 artifactory 插件和 gradle tools 呢?

其实是可以配置的,我这里没有进行配置,你可以测试下,如果 gradle tools 有更新的话,不知道在 config.gradleandroid studio 可以检测到更新不?

2. module/build.gradle

配置 artifactory 上传插件,编译后上传 arr 到仓库;

apply plugin: 'com.android.library'
apply from: "$rootDir/config.gradle"
apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'

def MAVEN_LOCAL_PATH = urls.localUploadPath
def ARTIFACT_ID = artifactIds.coreui
def VERSION_NAME = versions.coreui
def GROUP_ID = groupIds.core

/**
 * 命令行编译上传:
 *  (这是一条命令)
 *  gradle :core_ui:assembleRelease
 *  :core_ui:generatePomFileForMavenArrPublication  
 *  :core_ui:artifactoryPublish
 */


android {
    compileSdkVersion versions.complieSdk
    buildToolsVersion versions.buildTools

    defaultConfig {
        minSdkVersion versions.minSdk
        targetSdkVersion versions.targetSdk
        versionCode versions.code
        versionName versions.name
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile views.appcompat
    compile views.design
    compile project(path: ':core')
}

publishing {
    publications {
        // mavenArr 在这里
        mavenArr(MavenPublication) {
            groupId GROUP_ID
            version = VERSION_NAME
            artifactId ARTIFACT_ID
            // 这里获得arr 生成的位置和上传
            artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
        }
    }
}

artifactory {
    contextUrl = MAVEN_LOCAL_PATH
    publish {
        repository {
            // The Artifactory repository key to publish to
            repoKey = localRespos.repoName
            username = localRespos.userName
            password = localRespos.password
            maven = true
        }
        defaults {
            // 这里的 mavenArr 指向上面 publishing/publications/mavenArr
            publications('mavenArr')
        }
    }
    resolve {
        repoKey = 'jcenter'
    }
}

这里使用了 config.gradle 统一管理信息,所有需要改变的东西都在 config.gradle 中进行修改;

可以执行下面命令执行上传:(这是一条命令)

 gradle :module_name:assembleRelease 
 :module_name:generatePomFileForMavenArrPublication 
 :module_name:artifactoryPublish

基本意思是:

生成 release arr 文件 => 生成 pom.xml 配置 => 上传

没有配置 全局 gradle 的话 ,可以使用项目根目录下的:

// 全局
gradle xxx
// uinx
gradlew  xxx
// windows
gradlew.bat  xxx

当然,也可以使用 android studio 自带的 gradletasks 面板,依次执行

assembleRelease
generatePomFileForMavenArrPublication 
artifactoryPublish

这里写图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐