Android jcenter关闭,换源maven解决方案

原文链接 https://www.cmonbaby.com/posts/jcenter_maven_01.html
原文链接 https://www.cmonbaby.com/posts/jcenter_maven_02.html

google官方、Android Studio支持的Jcenter,突如其来的一篇公告让我措手不及,上图:

image

发觉事情蹊跷后,马上度娘看下。查了好久才找到同样翻车的伙计,上图:

image
  • 总结下:
  • 它对Java社区的影响是巨大的,尤其是Android社区,它意味着五月之后很多构建会直接失败。但是我发现好像国内没什么人关心,毕竟人类的本质是拖延症吧
  • 重点:五月之后很多构建会直接失败")重点:五月之后很多构建会直接失败

  • 说人话就是:
    如果你的项目中,有任何一个第三方库来源于jcenter。 结果就是,编译都是失败的,更别想run和签名打包

那么来谈一谈初步的解决方案:

解决方案参考(一)
  • 项目根目录(非app目录)
  • 创建:javadocs.gradle
  • 创建:maven.gradle
  • 创建:simon.gradle (随意命名)

javadocs.gradle代码如下:

// 生成javadoc.jar和source.jar
if (project.hasProperty("android")) {
    // Android libraries

    println(">>>>>>>>>>>>>>> JavaDoc for AndroidLibrary, Java Version:" + JavaVersion.current().getMajorVersion())

    // 打包source源码
    task sourcesJar(type: Jar) {
        classifier = 'sources'
        from android.sourceSets.main.java.srcDirs
    }

    // 打包class的jar包
    if (project.hasProperty("zipFile")) {
        task makeJar(type: Jar) {
            from zipTree(file(zipFile))
            destinationDir = file("build")
        }
    }

    android.libraryVariants.all { variant ->
        if (variant.name == 'release') {
            // 只需release的javadoc
            task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {

                title "API Documentation (${project.android.defaultConfig.versionName})"
                group "ApiDoc"
                description "Generates Javadoc for $variant.name."

                ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
                source = variant.sourceSets.collect { it.java.sourceFiles }.inject { m, i -> m + i }

                doFirst {
                    classpath = project.files(variant.javaCompileProvider.get().classpath.files,
                            project.android.getBootClasspath())
                }

                options {
                    encoding "UTF-8"
                    charSet 'UTF-8'
                    author true
                    version true
                    if (project.hasProperty("libName")) {
                        title libName
                    }
                }

                String javaDocsLink = String.format("https://docs.oracle.com/javase/%s/docs/api/",
                        JavaVersion.current().getMajorVersion())
                options.links(javaDocsLink)

                if (JavaVersion.current().isJava8Compatible()) {
                    options.addStringOption('Xdoclint:none', '-quiet')
                }

                exclude '**/BuildConfig.java'
                exclude '**/R.java'
            }
            task("javadoc${variant.name.capitalize()}Jar", type: Jar,
                    dependsOn: "generate${variant.name.capitalize()}Javadoc") {
                // 打包javadoc的jar包
                getArchiveClassifier().value('javadoc')
                from tasks.getByName("generate${variant.name.capitalize()}Javadoc").destinationDir
            }
            artifacts {
                archives tasks.getByName("javadoc${variant.name.capitalize()}Jar")
                archives sourcesJar
                archives makeJar
            }
        }
    }
} else {
    println(">>>>>>>>>>>>>>> JavaDoc for JavaLibrary")
    // Java libraries
    task sourcesJar(type: Jar, dependsOn: classes) {
        classifier = 'sources'
        from sourceSets.main.allSource
    }
    task javadocJar(type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        from javadoc.destinationDir
    }

    artifacts {
        archives javadocJar
        archives sourcesJar
    }
}

maven.gradle代码如下:

apply plugin: 'com.github.dcendents.android-maven'

// 配置maven库,生成POM.xml文件
// 动态读取local.properties
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

println("------------- upload -------------")
def snapshop_url = properties.getProperty("SNAPSHOT_REPOSITORY_URL")
def release_url = properties.getProperty("RELEASE_REPOSITORY_URL")

def userName = properties.getProperty("NEXUS_USERNAME")
def pwd = properties.getProperty("NEXUS_PASSWORD")

install {
    println("------------- maven -------------")
    repositories.mavenDeployer {
        snapshotRepository(url: snapshop_url) {
            authentication(userName: userName, password: pwd)
        }

        repository(url: release_url) {
            authentication(userName: userName, password: pwd)
        }

        // 生成pom.xml和参数
        pom {
            project {
                version project.hasProperty("versionName") ? versionName : project.versionName
                // java jar  /  android aar
                packaging project.hasProperty("libraryPackaging") ? libraryPackaging : project.hasProperty("android") ? 'aar' : 'jar'
                groupId publishedGroupId
                artifactId artifactId

                // 可选,库名称
                name project.hasProperty("libName") ? libName : project.name

                // 可选,库描述
                if (project.hasProperty("libraryDesc")) {
                    description libraryDesc
                }

                // 可选,库主页
                if (project.hasProperty("websiteUrl")) {
                    url websiteUrl
                }

                // 软件开源协议,现在一般都是Apache License2.0
                if (project.hasProperty("licenseName")) {
                    licenses {
                        license {
                            name licenseName
                            url licenseUrl
                        }
                    }
                }

                // 填写开发者基本信息
                if (project.hasProperty("developerId") && project.hasProperty("developerName")
                        && project.hasProperty("developerEmail")) {
                    developers {
                        developer {
                            id developerId // 开发者的id。
                            name developerName // 开发者名字。
                            email developerEmail // 开发者邮箱。
                        }
                    }
                }

                scm {
                    if (project.hasProperty("websiteUrl")) {
                        connection websiteUrl // Git仓库地址
                        developerConnection websiteUrl // Git仓库地址
                        url websiteUrl // 库主页
                    }
                }
            }
        }
    }
}

simon.gradle代码如下:

// 生成maven配置
apply from: '../maven.gradle'

// 生成JavaDocs
apply from: '../javadocs.gradle'


task simon {
    doLast {
        println "Release ${version}"
    }
}

simon.dependsOn(install)

最后 4 个步骤非常关键!!!

1、在根目录的build.gradle中配置:

dependencies {
        classpath 'com.android.tools.build:gradle:3.5.4'

        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        }

2、在根目录的local.properties中配置:

SNAPSHOT_REPOSITORY_URL=http://192.168.x.y:port/nexus/repository/maven-snapshots/
RELEASE_REPOSITORY_URL=http://192.168.x.y:port/nexus/repository/maven-releases/

NEXUS_USERNAME=admin
NEXUS_PASSWORD=xxxyyyzzz

3、在需要打包jar / aar上传仓库的子项目(子模块)中,build.gradle添加:

ext {
    publishedGroupId = 'com.cmonbaby' //  填写groupId, 一般是包名,比如:com.android.support
    libName = 'arouter_compiler' //  如果不填写,就使用module名称
    versionName = '1.0.3' //  版本号,比如:1.0.0
    licenseName = "Apache-2.0" // 支持的协议
    licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt' // 支持的协议网址

    libraryPackaging = 'jar' //  选填(已处理)如果是'com.android.library'默认上传aar, 如果是'java-library'默认上传jar
    libraryDesc = 'Android APT Library For Module Develop' //  库的描述
    websiteUrl = 'https://github.com/cnmen/arouter' //  可以填写github上的库地址.

    developerId = '8950764'
    developerName = 'simon'
    developerEmail = 'simon@cmonbaby.com'
}

apply from: '../simon.gradle'

4、在Android Studio / IDEA 中,找到 logcat 旁边的 Terminal,输入命令行:

gradle simon

PS:如果gradle环境没配置,请度娘~


以上方案比较仓促整理,上传可以成功,下载依赖还待测试,过几天我再更新!

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

推荐阅读更多精彩内容