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

前言

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

开发环境

Gradle Version:4.1

注:最新的gradle4.6版本与novoda0.8.0版本有冲突,
提示Error:Cause: com.novoda.gradle.release.AndroidLibrary$LibraryUsage.getDependencyConstraints()Ljava/util/Set;

classpath ‘com.android.tools.build:gradle:3.0.1’
classpath ‘com.jakewharton:butterknife-gradle-plugin:8.4.0’
classpath ‘com.novoda:bintray-release:0.8.0’
buildToolsVersion:26.0.2
compileSdkVersion:26

上传步骤

  1. 在上传的库工程的build.gradle文件中添加:
publish {
    userOrg = 'ddnosh'
    groupId = 'la.xiong.androidquick'
    artifactId = 'AndroidQuick'
    version = '1.0.1'
    description = 'AndroidQuick is a quick architecture to make an app.'
    website = "https://github.com/ddnosh/AndroidQuick"
}
  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”的形式引入库工程。

猜你喜欢

转载自blog.csdn.net/ddnosh/article/details/79586301