Android jcenter關(guān)閉,換源maven解決方案

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

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

image

發(fā)覺事情蹊蹺后,馬上度娘看下。查了好久才找到同樣翻車的伙計,上圖:

image
  • 總結(jié)下:
  • 它對Java社區(qū)的影響是巨大的,尤其是Android社區(qū),它意味著五月之后很多構(gòu)建會直接失敗。但是我發(fā)現(xiàn)好像國內(nèi)沒什么人關(guān)心,畢竟人類的本質(zhì)是拖延癥吧
  • 重點:五月之后很多構(gòu)建會直接失敗")重點:五月之后很多構(gòu)建會直接失敗

  • 說人話就是:
    如果你的項目中,有任何一個第三方庫來源于jcenter。 結(jié)果就是,編譯都是失敗的,更別想run和簽名打包

那么來談一談初步的解決方案:

解決方案參考(一)
  • 項目根目錄(非app目錄)
  • 創(chuàng)建:javadocs.gradle
  • 創(chuàng)建:maven.gradle
  • 創(chuàng)建: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文件
// 動態(tài)讀取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和參數(shù)
        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
                }

                // 軟件開源協(xié)議,現(xiàn)在一般都是Apache License2.0
                if (project.hasProperty("licenseName")) {
                    licenses {
                        license {
                            name licenseName
                            url licenseUrl
                        }
                    }
                }

                // 填寫開發(fā)者基本信息
                if (project.hasProperty("developerId") && project.hasProperty("developerName")
                        && project.hasProperty("developerEmail")) {
                    developers {
                        developer {
                            id developerId // 開發(fā)者的id。
                            name developerName // 開發(fā)者名字。
                            email developerEmail // 開發(fā)者郵箱。
                        }
                    }
                }

                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 個步驟非常關(guān)鍵!??!

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" // 支持的協(xié)議
    licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt' // 支持的協(xié)議網(wǎng)址

    libraryPackaging = 'jar' //  選填(已處理)如果是'com.android.library'默認(rèn)上傳aar, 如果是'java-library'默認(rèn)上傳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環(huán)境沒配置,請度娘~


以上方案比較倉促整理,上傳可以成功,下載依賴還待測試,過幾天我再更新!

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容