当前位置: 移动技术网 > IT编程>开发语言>Java > Android Library 发布到 Jcenter 库

Android Library 发布到 Jcenter 库

2020年08月14日  | 移动技术网IT编程  | 我要评论

将 Android Library 发布到 Jcenter 库

专注于Android开发,分享经验总结,欢迎加入

QQ群

Android Studio , build.gradle 集成依赖包,方便快捷,只需一行代码就可以搞定,如下:

implementation “com.squareup.retrofit2:retrofit:2.9.0”

打开项目的build.gradle,能看到如下配置

repositories {
    google()
    jcenter()
	mavenCentral()
}

Android 中依赖库有 google , maven , jcenter , 今天给大家讲讲如何将自己的项目发布到 jcenter 上

https://bintray.com/

点击去注册

账号注册完成后进去新建一个 repository

新建 repository

  • 2.新建项目将 Android Studio 项目发布到 Jcenter 库中

借助于: https://github.com/bintray/gradle-bintray-plugin

*	首先在项目的 build.gradle 中配置如下

dependencies 中加入

classpath “com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5”

dependencies {
    classpath "com.android.tools.build:gradle:4.0.0"
    // Gradle Bintray Plugin
    classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5"
}

再加入

allprojects {
    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
    }
}

allprojects {
    tasks.withType(Javadoc) {
        options {
            encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
    }
}

项目 build.gradle 完整配置

apply from: "config.gradle"
buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.0"
        // Gradle Bintray Plugin
        classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5"

    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
}

allprojects {
    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
    }
}

allprojects {
    tasks.withType(Javadoc) {
        options {
            encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
    }
}

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

依赖包 build.gradle 配置

/*************************** bintray start ***************************/

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

// Bintray 相关的信息
group = rootProject.ext.bintray_groupId // groupId
version = rootProject.ext.bintray_publishVersion // 版本号

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user") // Bintray 用户名
    key = properties.getProperty("bintray.apikey") // Bintray ApiKey
    configurations = ['archives']
    pkg {
        // 项目简介
        repo = rootProject.ext.bintray_repoName // 仓库名称
        userOrg = rootProject.ext.bintray_userOrg // 用户名
        name =  rootProject.ext.bintray_groupId // 项目名称
        desc = rootProject.ext.bintray_project_desc // 项目描述
        issueTrackerUrl = rootProject.ext.bintray_issueTrackerUrl // issue 网址
        websiteUrl = rootProject.ext.bintray_website // git 网址
        vcsUrl = rootProject.ext.bintray_gitUrl // git 网址
        licenses = rootProject.ext.bintray_licenses // 协议
        labels = rootProject.ext.bintray_labels // 标签
        publish = true // 是否是公开项目
        version {
            name = rootProject.ext.bintray_publishVersion // 版本号 1.0.0
            desc = rootProject.ext.bintray_version_desc // 版本描述
            released = new Date()
            vcsTag = 'v' + rootProject.ext.bintray_publishVersion // v1.0.0
            attributes = rootProject.ext.bintray_attributes
        }
    }
}

install {
    repositories.mavenInstaller {
        // 生成pom.xml和参数
        pom.project {
            packaging rootProject.ext.bintray_packaging
            name rootProject.ext.bintray_artifactId// 项目名称
            description rootProject.ext.bintray_project_desc // 项目描述
            url rootProject.ext.bintray_website // 项目主页

            // 软件开源协议,一般都是Apache License2.0
            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                }
            }

            //填写开发者基本信息
            developers {
                developer {
                    id rootProject.ext.bintray_developer_id
                    name rootProject.ext.bintray_developer_name
                    email rootProject.ext.bintray_developer_email
                }
            }

            scm {
                connection rootProject.ext.bintray_gitUrl // Git仓库地址
                developerConnection rootProject.ext.bintray_gitUrl // Git仓库地址
                url rootProject.ext.bintray_website // 项目主页
            }
        }
    }
}

// 生成jar包的task
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

// 生成jarDoc的task
task javadoc(type: Javadoc) {
    failOnError false // 忽略注释语法错误,如果用jdk1.8你的注释写的不规范就编译不过
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

// 生成javaDoc的jar
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
//    archives javadocJar
    archives sourcesJar
}

/*************************** bintray end ***************************/

此配置调用的变量全部来自 config.gradle 中


config.gradle 配置

// jcenter push config
bintray_userOrg = 'xxxxxx'// 用户名
bintray_repoName = 'taxiao'// 远程仓库名称
bintray_groupId = 'com.taxiao.library'// groupId 名称
bintray_artifactId = 'common-library'// 项目名称
bintray_publishVersion = versionName// 版本号
bintray_project_desc = 'Android Dependent library MVP'// 项目描述
bintray_version_desc = 'version 1.0.0'// 项目描述
bintray_website = 'https://github.com/taxiao213/common_library'// 项目主页
bintray_gitUrl = 'https://github.com/taxiao213/common_library.git'// Git仓库的地址
bintray_issueTrackerUrl = 'https://github.com/taxiao213/common_library/issues'// issues地址
bintray_labels = ["Tools", "Library", "Java", "Android"]// 标签
bintray_licenses = ["Apache-2.0"] // 协议
bintray_attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']
bintray_packaging = 'aar'

// developer info
bintray_developer_id = 'taxiao'// 开发者 id
bintray_developer_name = 'taxiao'// 开发者姓名
bintray_developer_email = 'yin13753884368@163.com'// 开发者邮箱

需要注意的地方,新建的依赖库名称要和 bintray_artifactId 一致

这两处很重要记得配置

// Bintray 相关的信息
group = rootProject.ext.bintray_groupId // groupId
version = rootProject.ext.bintray_publishVersion // 版本号

一般的依赖包都是 xyz 这种方式,x 是 group, y 是 bintray_artifactId,z 是 bintray_publishVersion

比如我自己的依赖包: implementation ‘com.taxiao.library:common-library:1.0.0’


依赖包的完整配置 build.gradle


apply plugin: 'com.android.library'

/*************************** bintray start ***************************/

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

// Bintray 相关的信息
group = rootProject.ext.bintray_groupId // groupId
version = rootProject.ext.bintray_publishVersion // 版本号

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user") // Bintray 用户名
    key = properties.getProperty("bintray.apikey") // Bintray ApiKey
    configurations = ['archives']
    pkg {
        // 项目简介
        repo = rootProject.ext.bintray_repoName // 仓库名称
        userOrg = rootProject.ext.bintray_userOrg // 用户名
        name =  rootProject.ext.bintray_groupId // 项目名称
        desc = rootProject.ext.bintray_project_desc // 项目描述
        issueTrackerUrl = rootProject.ext.bintray_issueTrackerUrl // issue 网址
        websiteUrl = rootProject.ext.bintray_website // git 网址
        vcsUrl = rootProject.ext.bintray_gitUrl // git 网址
        licenses = rootProject.ext.bintray_licenses // 协议
        labels = rootProject.ext.bintray_labels // 标签
        publish = true // 是否是公开项目
        version {
            name = rootProject.ext.bintray_publishVersion // 版本号 1.0.0
            desc = rootProject.ext.bintray_version_desc // 版本描述
            released = new Date()
            vcsTag = 'v' + rootProject.ext.bintray_publishVersion // v1.0.0
            attributes = rootProject.ext.bintray_attributes
        }
    }
}

install {
    repositories.mavenInstaller {
        // 生成pom.xml和参数
        pom.project {
            packaging rootProject.ext.bintray_packaging
            name rootProject.ext.bintray_artifactId// 项目名称
            description rootProject.ext.bintray_project_desc // 项目描述
            url rootProject.ext.bintray_website // 项目主页

            // 软件开源协议,一般都是Apache License2.0
            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                }
            }

            //填写开发者基本信息
            developers {
                developer {
                    id rootProject.ext.bintray_developer_id
                    name rootProject.ext.bintray_developer_name
                    email rootProject.ext.bintray_developer_email
                }
            }

            scm {
                connection rootProject.ext.bintray_gitUrl // Git仓库地址
                developerConnection rootProject.ext.bintray_gitUrl // Git仓库地址
                url rootProject.ext.bintray_website // 项目主页
            }
        }
    }
}

// 生成jar包的task
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

// 生成jarDoc的task
task javadoc(type: Javadoc) {
    failOnError false // 忽略注释语法错误,如果用jdk1.8你的注释写的不规范就编译不过
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

// 生成javaDoc的jar
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
//    archives javadocJar
    archives sourcesJar
}

/*************************** bintray end ***************************/

def support = rootProject.ext.commonDependencies
def annotation = rootProject.ext.annotationProcessor

android {
    compileSdkVersion rootProject.compileSdkVersion

    defaultConfig {
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode rootProject.versionCode
        versionName rootProject.versionName
    }

    buildTypes {
        release {
            minifyEnabled false
            consumerProguardFiles 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    support.each { k, v -> api v }
    annotation.each { k, v -> annotationProcessor v }
}
  • 3.项目配置完成后 依次执行如下命令:

    gradlew clean

    gradlew install

    gradlew bintrayUpload


gradlew clean

https://img-blog.csdnimg.cn/20200812222021479.png#pic_center


gradlew install

http://www.lhsxpumps.com/_images5/10qianwan/20200814/b_0_202008141013182174.jpg


gradlew bintrayUpload

http://www.lhsxpumps.com/_images5/10qianwan/20200814/b_0_202008141013183116.jpg

  • 错误最多的就是第三个,常见错误如下:

Could not upload to ‘https://api.bintray.com/content/yin13753884368/taxiao/com.taxiao.cn/1.0.0/common_library/common-library/unspecified/common-library-unspecified.pom’: HT
TP/1.1 400 Bad Request [message:Unable to upload files: Maven group, artifact or version defined in the pom file do not match the file path ‘common_library/common-library/uns
pecified/common-library-unspecified.pom’]

http://www.lhsxpumps.com/_images5/10qianwan/20200814/b_0_202008141013183116.jpg


报 404 这个问题,困扰我好长时间,解决方案:依赖库的名称 和 rootProject.ext.bintray_artifactId 需要一致

http://www.lhsxpumps.com/_images5/10qianwan/20200814/b_0_202008141013191988.jpg

    1. gradlew bintrayUpload 执行完提示 successful ,说明上传成功

http://www.lhsxpumps.com/_images5/10qianwan/20200814/b_0_202008141013192429.jpg

  • 5.上传完成后,将依赖包上传到 jcenter 库,大概 2 小时左右会出结果

http://www.lhsxpumps.com/_images5/10qianwan/20200814/b_0_202008141013208356.jpg

  • 6.如果未上传到 Jcenter 库 ,要用时需要这样去配置

在 Andoid build.gradle 配置:

repositories {
    google()
    jcenter()
    mavenCentral()
    maven{url "https://dl.bintray.com/yin13753884368/taxiao/" }
}

然后再去依赖依赖包 build.gradle 配置:

[implementation ‘com.taxiao.library:common-library:1.0.0’]

  • 7.上传到 Jcenter 后,build.gradle 配置:

[implementation ‘com.taxiao.library:common-library:1.0.0’]

http://www.lhsxpumps.com/_images5/10qianwan/20200814/b_0_202008141013209986.jpg

http://www.lhsxpumps.com/_images5/10qianwan/20200814/b_0_202008141013228485.jpg

源码查看,关注公众号回复 jcenter ,获取

微信公众号 -->> 他晓 (欢迎加入)

公众号

本文地址:https://blog.csdn.net/yin13753884368/article/details/107993920

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网