美文网首页
常用gradle脚本整理

常用gradle脚本整理

作者: 西瓜太郎123 | 来源:发表于2020-09-14 17:54 被阅读0次

    一:发布项目

    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'
    }
    

    相关文章

      网友评论

          本文标题:常用gradle脚本整理

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