常用gradle脚本整理

一:发布项目

1.发布项目到本地&nexus私有仓库

apply plugin: 'maven'
//test
println 'upload_maven running'
if (!project.hasProperty("POM_ARTIFACT_ID") || !project.hasProperty("POM_GROUP")) {
    //throw Exception(">>>>> 组件ArtifactID/GroupId必须设置 <<<<<");
    println('POM_ARTIFACT_ID or POM_GROUP missed.')
    return
}
if (!project.hasProperty("POM_VERSION")) {
    //throw Exception(">>>>> Version必须设置 <<<<<");
    println('POM_VERSION missed.')
    return
}
if(!rootProject.ext.has("USER_NAME") || !rootProject.ext.has("USER_PASS")) {
    println('please check rootProject.ext.USER_NAME and rootProject.ext.USER_PASS')
    return
}
String releaseRepoUrl = project.hasProperty("RELEASE_REPO_URL") ? RELEASE_REPO_URL : 'http://nexus.xxx.net/repository/android-release/'
String snapshotRepoUrl = project.hasProperty("SNAPSHOT_REPO_URL") ? SNAPSHOT_REPO_URL : 'http://nexus.xxx.net/repository/android-snapshots/'
def userName = rootProject.ext.USER_NAME
def userPassword = rootProject.ext.USER_PASS
def pom_artifact_id = POM_ARTIFACT_ID
def pom_group = POM_GROUP
def pom_version = POM_VERSION
def pom_description = project.hasProperty("POM_DESCRIPTION") ? POM_DESCRIPTION : "$pom_group:$pom_artifact_id:$pom_version"
def pom_packaging = project.hasProperty("POM_PACKAGING") ? POM_PACKAGING : 'aar'
def pom_name = project.hasProperty("POM_NAME") ? POM_NAME : pom_artifact_id

uploadArchives {
    //发布到本地仓库
    if (project.hasProperty("LOCAL") && LOCAL.toBoolean()) {
        releaseRepoUrl = uri(releaseRepoUrl)
        snapshotRepoUrl = uri(snapshotRepoUrl)
    }

    repositories.mavenDeployer {
        // 会自动根据传入的version判断是release模式还是snapshot模式,这是gradle的默认行为
        repository(url: releaseRepoUrl) {
            authentication(userName: userName, password: userPassword)
        }
        snapshotRepository(url: snapshotRepoUrl) {
            authentication(userName: userName, password: userPassword)
        }

        pom.groupId = pom_group //主项目的groupId,这里不能用group变量
        pom.artifactId = pom_artifact_id
        pom.version = pom_version

        pom.project {
            name pom_name
            description pom_description
            packaging pom_packaging
        }
    }
}

task cleanDir(type: Delete) {
    delete buildDir
}

task androidJavadocs(type: Javadoc) {
    // 设置源码所在的位置
    if (android != null && android.sourceSets != null && android.sourceSets.main != null && android.sourceSets.main.java != null) {
        source = android.sourceSets.main.java.sourceFiles
    }
    //source = android.sourceSets.main.java.srcDirs
    //classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

// 生成javadoc.jar, frameworkAnnotation中需要用
//task androidJavadocsJar(type: Jar) {
    // 指定文档名称
//    classifier = 'javadoc'
//    from androidJavadocs.destinationDir
//}

// 生成sources.jar
task androidSourcesJar(type: Jar) {
    if (android != null && android.sourceSets != null && android.sourceSets.main != null && android.sourceSets.main.java != null) {
        classifier = 'sources'
        from android.sourceSets.main.java.sourceFiles
    }
}

//是否是开发版本
def isDevOrBetaBuild(String version) {
    if (version == null || version.isEmpty()) {
        throw Exception(">>>>>>>>>>>>>>编译失败,POM_VERSION_TYPE = " + POM_VERSION_TYPE + " ,请确认gradle.properties文件中 POM_VERSION_TYPE 参数填写正确,POM版本必须为(DEV、BETA、RELEASE)中的一种类型<<<<<<<<<<");
    }
    return version.endsWith("-SNAPSHOT") //version.contains("dev") || version.contains("beta")
}

artifacts {
   // if (isDevOrBetaBuild(pom_version)) {
        archives androidSourcesJar
        //archives androidJavadocsJar
   // }
}
uploadArchives.mustRunAfter 'cleanDir'

2.发布到jCenter

//官方插件
plugins {
    //gradle 自定义插件 省掉建resources目录和properties等步骤,gradlePlugin闭包内配置完成
    id 'java-gradle-plugin'
    //发布插件到gradle官方插件库,成为官方插件可以使用plugins闭包一步配置,引用插件
    id 'com.gradle.plugin-publish' version '0.10.1'
    //发布到jCenter仓库,bintray闭包配置
    id "com.jfrog.bintray" version "1.8.4"
}
//第三方插件
apply plugin: 'maven'
apply plugin: 'java'
apply plugin: 'groovy'
//配置
ext {
    versionId = '1.1.0'
    groupId = 'com.cpdroid'
    name = 'fat-aar'
    website = 'https://github.com/cpdroid/fat-aar'
    vcsUrl = 'https://github.com/cpdroid/fat-aar.git'
    tags = ['fat-aar', 'aar', 'fat', 'android', 'fataar']
}

version = ext.versionId
group = ext.groupId

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
//jcenter
bintray {
    user = properties.getProperty('bintrayUser')
    key = properties.getProperty('bintrayApiKey')
    configurations = ['archives']
    pkg {
        repo = 'gradle'
        name = project.ext.name
        licenses = ['MIT']
        vcsUrl = project.ext.vcsUrl
        labels = project.ext.tags
        version {
            name = project.ext.versionId
        }
    }
}
//自定义插件需要
gradlePlugin {
    plugins {
        fatAarPlugin {
            id = "${project.ext.groupId}.${project.ext.name}"
            displayName = 'Fat Aar Plugin'
            description = 'A plugin to merge dependencies(aar/jar) into aar file'
            implementationClass = "${project.ext.groupId}.fat_aar.FatAarPlugin"
        }
    }
}
//发布插件到gradle官方
pluginBundle {
    website = project.ext.website
    vcsUrl = project.ext.vcsUrl
    tags = project.ext.tags
    mavenCoordinates {
        groupId = project.ext.groupId
        artifactId = project.ext.name
        version = project.ext.versionId
    }

}
//发布到本地
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('/Users/admin/AndroidStudioProjects/fat-aar/maven/repo/fatAar'))
        }
    }
}
//仓库地址
repositories {
    jcenter()
    google()
}

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