教大家如何一步一步的将自己的开源项目上传到jcenter

2字数 1495阅读 187

前言:现在网上很多开源项目库,上传到jcenter上,使用起来也很方便,直接在build.gradle中添加依赖,下载下来就可以使用, 所以自己也想尝试上传一个试试。学习这个的时候,自己也是在网上各种找资料,中途也遇到了很多坑,觉得有必要做下笔记,写成博客,怕自己以后忘记,再翻翻博客就知道了。

1、首先我们要注册一个bintray,注册网址https://bintray.com/signup/oss,直接点击进行注册,注册的时候需要用到一个邮箱,这里邮箱不能使用qq 163等邮箱,需要用到谷歌和outlook邮箱,我用的是谷歌的邮箱,大家可以翻墙去谷歌邮箱注册一个自己的邮箱账号,如果没有翻墙的,这里也有一个比较方便的方法:大家去下载一个百度浏览器,里面有一个谷歌访问助手的工具,按照提示的步骤安装一下,然后重启浏览器,就可以访问谷歌邮箱,进行注册了,

image.png

具体的步骤我就不赘述了,安装成功之后,就是如上页面,就可以访问谷歌邮箱了,邮箱注册号之后,下面我们就开始注册bintray账号,如果有bintray直接略过这一步


image.png

账号创建好之后,登陆进入到个人中心界面,如下图:


image.png

我们需要创建一个仓库,来存放我们的开源项目,所以点击Add Repository会跳转到如下界面


image.png

创建成功之后,仓库列表会多一个你刚才创建的仓库,仓库创建好之后我们就需要准备你需要上传到jcenter的开源项目库,这里需要是module,如下界面:


image.png

winfoutils只为测试,所以这里就只写了一个ToasUtils类,没有复杂的功能,只是测试上传的,下面我们需要来配置项目,这里我们需要用到一个插件,在你工程的build.gradle文件中添加插件支持

classpath 'com.novoda:bintray-release:0.7.0' 添加好之后文件详情如下
// Top-level build file where you can add configuration options common to all sub-projects/modules.
 
buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.novoda:bintray-release:0.7.0'
 
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
 
allprojects {
    repositories {
        google()
        jcenter()
//        maven { url 'https://dl.bintray.com/wj19940409/maven' }
    }
    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
    }
}
 
task clean(type: Delete) {
    delete rootProject.buildDir
}

再到自己需要上传的module中的build.gradle文件中添加

apply plugin: 'com.novoda.bintray-release'//添加  

//添加

publish {
//    repoName = 'WinfoSdk'//不指明,默认是上传到maven,指明的话这里的名字需要和你创建的仓库的名字一样
    userOrg = 'wj19940409'//bintray.com你的用户名
    groupId = 'com.winfo.msa'//jcenter上的路径
    artifactId = 'winfoUtils'//项目名称
    publishVersion = '1.0.0'//版本号
    desc = 'my first module'//描述,不重要
    website = 'https://github.com/wj576038874'//网站,不重要;尽量模拟github上的地址,例如我这样的;当然你有地址最好了
}

最后都添加好之后的文件,如下:

apply plugin: 'com.android.library'
apply plugin: 'com.novoda.bintray-release'//添加
 
android {
    compileSdkVersion 26
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
 
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
 
    }
 
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
//添加
publish {
    userOrg = 'wj19940409'//bintray.com你的用户名
    groupId = 'com.winfo.msa'//jcenter上的路径
    artifactId = 'winfoUtils'//项目名称
    publishVersion = '1.0.0'//版本号
    desc = 'my first module'//描述,不重要
    website = 'https://github.com/wj576038874'//网站,不重要;尽量模拟github上的地址,例如我这样的;当然你有地址最好了
}

接下来,我们需要到bintray来创建package,之前创建的是仓库,现在创建package,否则会上传失败

点击我们创建的仓库:


image.png

点击Add New Package:

image.png

需要注意的是Name需要和artiufactid一样,否则会上传失败

image.png

创建好之后,我们下面就可以开始上传了,如果是更新版本的话,直接修改publishVersion的值,然后再执行上传的那句代码即可。上传之前我们还需要做一件事,找到apikey

image.png
image.png

把apikey复制出来放在一边备用

下面我们就开始上传我们的开源项目了,打开android studio的Termainal界面


image.png

执行如下代码

gradlew clean build bintrayUpload -PbintrayUser=**** -PbintrayKey=********** -PdryRun=false

需要注意的是每一个-前面都需要加上空格

gradlew clean build bintrayUpload 

-PbintrayUser=jcenter用户名
-PbintrayKey=apikey就是刚刚查看到的
-PdryRun=false 写false代表要上传

然后回车,即可,等到上传。如果按回车,无法执行,那么你需要将你的gradle添加到系统的环境变量中,再执行此代码就可以了,执行过程中如下图


image.png

等待几分钟,保证你的电脑有网络,当你看到BUILD SUCCESS那么久上传成功了,上传成功之后,进入到你的仓库中就可以看到你上传的项目了


image.png

点击进入详情页:

image.png

已经大功告成了,但是你现在还不能用,因为还没有添加到jcenter,但是你可以用maven的方式来用

在你的工程的build.gradle文件中,添加maven支持

repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/wj19940409/maven' }
    }

maven的url直接在详情中可以看到,将这个链接复制出来粘贴进去就可以了


image.png

然后再你的项目中的build.gradle文件中添加依赖

compile 'com.winfo.msa:winfoUtils:1.0.0'

然后编译就可以使用了,你可以在详情页面中,点击add jcenter按钮之后即可 等到审核,审核通过,就可以直接添加依赖,去掉maven { url 'https://dl.bintray.com/wj19940409/maven' }支持了

image.png

我这里已经审核通过了,所以不会再出现add jcenter,没有添加审核的时候,这里是一个add jcenter按钮点击一下就可以了。,等待审核,审核通过jcenter会通过站内消息,通知你,你的请求已被认可,接下来,就可以直接在你的项目中添加

compile 'com.winfo.msa:winfoUtils:1.0.0'

就可以使用你的开源库了。

总结一下,整个过程中遇到的坑

1、上传是报如下错,那是因为你没有创建package,所以需要你按照上面的步骤先创建package再进行上传


image.png

image.png

2、这里是生成javadoc报错,需要在你的工程build.gradle文件中添加就不会报这个错了


image.png

3、jdk版本问题


image.png

可以具体错误:

可以参照https://www.jianshu.com/p/5eebd3c609d6

https://stackoverflow.com/questions/38209522/circleci-android-unsupported-major-minor-version-52-0

就是java的编译环境版本太低,java 8 class file的版本是52,Java 7虚拟机只能支持到51。所以需要升级到java 8 vm才行

Android studio自带jdk 需要将gradle的jdk升级到跟android stuido自带jdk一致,找到gradle.properties文件做如下修改


image.png

org.gradle.java.home的地址指向到android studio自带的jdk地址即可

整个上传流程可参考一下其他博客:

http://blog.csdn.net/baidu_34012226/article/details/65444901

推荐阅读更多精彩内容