2020最新通过novoda上传到JCenter的方法、技巧及遇到的坑

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。

书籍详情请见:https://blog.csdn.net/ddnosh/article/details/107666187

书籍购买地址:京东 当当 天猫

图片名称

前言

上传开发库到Jcenter仓库,可以通过Bintray来管理。
Bintray本身也是一个仓库管理网站,比如可以建立自己的Maven仓库,当然也通过Bintray可以上传到JCenter。
开发库首先需要上传到Bintray,上传的常用方法有novoda和jfrog两种。
这里介绍的是通过novoda方式上传。

开发环境

Gradle Version:5.4.1
classpath ‘com.android.tools.build:gradle:3.5.1’
classpath ‘com.novoda:bintray-release:0.9.1’
buildToolsVersion:29.0.2
compileSdkVersion:29

在项目的根目录的build.gradle中添加如下代码:

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
        classpath 'com.novoda:bintray-release:0.9'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

上传步骤

  1. 在待上传的库工程的build.gradle文件中添加:
publish {
    userOrg = 'ddnosh'
    groupId = 'com.androidwind'
    artifactId = 'androidquick'
    version = '2.0.4'
    desc = 'AndroidQuick is a code library contains quicker kits.'
    website = "https://github.com/ddnosh/QuickBase"
}
  1. 在Android Studio的Terminal里输入:
gradlew clean generatePomFileForReleasePublication build bintrayUpload -PbintrayUser=Your_Bintray_Name -PbintrayKey=Your_Bintray_Key -PdryRun=false

简单吧,就这么两步即可完成JCenter的上传。当然,这里仅仅是介绍上传的方法,还有Bintray的注册、Maven仓库的建立、JCenter提交申请等未详细列出。

Tips

如果不想传到JCenter,而是仅仅想利用Bintray的Maven仓库,我们可以这么惭怍:
点击创建的Maven仓库,右上角有仓库的地址:https://dl.bintray.com/ddnosh/maven
然后在根目录的build.config文件中加上:

allprojects {
    repositories {
        jcenter()
        mavenCentral()
        maven { url "https://jitpack.io" }
        maven { url "https://dl.bintray.com/ddnosh/maven" }
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }
}

所遇到的坑

  1. 上传命令
    如果使用gradlew clean build bintrayUpload这样的命令,也能上传成功,但是添加到JCenter的时候,会报错:Add a POM file to the latest version of your package.
  2. 版本冲突
    Error:Unable to find method ‘com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;’.
    Possible causes for this unexpected error include: In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

原因是Android Studio3.0和ButterKnife冲突,需要将ButterKnife版本降低至8.4.0.

2018最新坑

  1. Add to JCenter被拒
    如果按照上述方法,库是可以上传到Bintray,而且用自己的Maven仓库地址引用也没问题。
    如果放在以前,点击Add to JCenter就可以申请上传到JCenter了,而且会审核通过。
    但是如今出现的问题是,提交到JCenter的时候,JCenter却拒绝了,发送来的信息内容如下:

Hi,
JCenter hosts java applications that follow maven convention. In addition to the .pom file, your version should include a binary jar file, a sources jar, and optionally a javadoc jar.
Your files should be under a maven path layout. (See https://bintray.com/docs/usermanual/uploads/uploads_includingyourpackagesinjcenter.html)
Once those files are added, we’ll be glad to include your package in JCenter.
Regards,
JFrog Support

意思是没有按照Maven的规范,除了需要.pom文件外,还需要binary.jar、javadoc.jar、sources.jar文件。
好吧,如果按照网上提供的通过novoda上传到JCenter的方式行不通了。
不是需要这几个文件么,那么我们就手动生成,然后传到Bintray的Maven仓库里,然后再提交总可以了吧。
在library工程的build.gradle文件增加的代码如下:

tasks.withType(Javadoc) {//防止编码问题
    options.addStringOption('Xdoclint:none', '-quiet')
    options.addStringOption('encoding', 'UTF-8')
    options.addStringOption('charSet', 'UTF-8')
}

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

然后build一下,AS会在build目录下的libs文件夹下生成对应的sources.jar和javadoc.jar文件。
注意操作顺序:
先不加上这些task,按照最上面的方式上传到JCenter的Maven仓库;、
然后加上这些task,本地build生成sources.jar和javadoc.jar文件。
然后把这两个文件上传到Bintray的Maven仓库,操作如下:
这里写图片描述
按照1、2、3的顺序,其中2的地址要拷贝下来,因为点击3后,需要输入。
最后点击“Add to JCenter”,等审核吧。
注:
手动把Bintray这个版本删了,然后本地task都打开,并且运行上传命令,那么这些aar、jar文件都会自动更新到Bintray上,并且不需要JCenter再次审核的。
审核通过一般会发来如下的信息:
Your request to include your package /ddnosh/maven/AndroidQuick in Bintray’s JCenter has been approved.

以后在工程里面就是用compile "xxx"的形式引入库工程。

2019最新坑

  1. javaDoc编译报错
    在这里插入图片描述
    编译的时候一直提示这个找不到,那个也找不到,但实际上这些都是存在的,而且这些javaDoc文件也已经生成了:
    在这里插入图片描述
    我们的解决方案就是在库工程的build.gradle文件中增加如下代码:
tasks.withType(Javadoc).all {
    enabled = false
}

然后重新运行上传命令即可。

示例项目

https://github.com/ddnosh/ARabbit

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值