论一个小白如何将自己的开源库发布到Bintray的JCenter上

在前一阵子的某一天,我不小心撞上了JitPack的版本升级而导致的JitPack炸了,于是无法把自己的库发布成有效的开源库,无奈之下,我终于下定决心转战随缘发布的JCenter,开启了我为了发布放弃高数,放弃大物,放弃现代,放弃离散的漫长踩坑之路。。。

P.S.

  • 因为之前没有发布过开源库,所以这篇文章更适合小白。。。吧,至于大佬嘛。。。(额,你懂)
  • 在开启踩坑之路之前,我们要学会科(如)学(何)上(翻)网(墙)。

(不然的话GitHub和Bintray能卡死你)

踩坑一:在Bintray上注册(这个真的是血泪史啊。。。务必看完再注册)

因为在Binatry版本升级后在注册界面会有一个巨大的绿色框框,我想也没想就注册了,结果,发现自己注册出来了一个团队,但是你要是创建个人的开源库就要个人的账号,注册在右上角的sign in !!!注册地址点这里!!!

向前迈进:

注册完了以后要生成自己的maven库,这个库用来存放你的项目(闲扯一句,就算你的项目与JCenter注定无缘,不怕,只要在gradlel的build里面加上你maven库的地址再加上你库的依赖,依然可以使用这个库)


论一个小白如何将自己的开源库发布到Bintray的JCenter上_第1张图片

踩坑二:maven的m的大小写

你的库的类型一定要选Maven名字一定要叫maven(因为AS上传Library时会默认上传到名叫maven类型为Maven的库)

向前迈进:

新建完maven库就要开始新建上传到Bintray的Library了,怀着无比激动的心情想着自己很快就有第一个开源库了,然而事实证明之前的都在热身,这才是开始踩坑的血泪史。。。

踩坑三:如何新建Library以及Library下面该放些什么

(唔。。。接下来我的时间轴会有点混乱)我按照网上的流程写完了gradle里面的配置后,无比憧憬的等待Bintray审核通过的邮件,等了大概两天吧,终于收到了成功加入JCenter的邮件,然后我把依赖加到项目里面,gradle的build也通过了,但是在Activity里面并找不到自己的类,后来某位大佬终于告诉了我真相:

把你想上传的东西都要加在自己新建的Library里,而不是app里面(切到project模式可以看见),包括你的想上传类,如果你的类有自己定义的属性或者用到了app/src/res/values的文件,也要一并加到library/src/res/values里面,因为开源库是不会上传你app里的内容。

那接下来我们就跳过Library里面类什么都没有的version1,以及default-pom.xml莫名无法生成的version2(中间会稍微提一下解决方法),直接到成功发布的version3好了.P.S.如果AS在每次打开时都会在右上角提醒你更新的话(老版的settings里面没有Android SDK也很不方便),先更新吧,因为我们接下来的配置都用的是最新的版本,如果更新完,又提醒你更新Plugin也一起更新吧

论一个小白如何将自己的开源库发布到Bintray的JCenter上_第2张图片

如果在更新时是这个报错,建议你去设置网络代理,这个网上的解决方案很多,或者看我的另一篇博客(正在更),我就不赘述了。。。

继续向前:

新建Library。右键点application,然后选New->Moudle->(在弹出来的提示框里选)Android Library就可以了。


论一个小白如何将自己的开源库发布到Bintray的JCenter上_第3张图片

至于Library的名字,你随意吧,但是别起和你application很像的名字,也别起和你项目没什么关系的名字,因为gradle依赖里面会有一部分是Library的名字。

这里我讲解一下Gradle依赖的每一部分的来历:

论一个小白如何将自己的开源库发布到Bintray的JCenter上_第4张图片
  1. 首先把你要传的类放在你Library->src->main->java件夹的下面(注意,我切的是Project的模式)。
  2. 如果你的类有自定义的属性,要把相应的attrs.xml文件移到你Library->src->res->values文件夹下面(如果你的类涉及到app中values的colors什么什么的文件,建议也一起加到你Library下面,在Library中加Values文件夹下面的文件时,最好新建,不要去把app中的拖到Library里面,因为Build的时候可能报错
  3. 最后我们我们把这些都准备好后,就可以Share Project On GitHub了。当然了,至于怎么在AS上把项目推到GitHub上我就不多说了,网上搜一搜教程很多的,当你上传成功以后你就会看见你AS的右上角会有一个上传成功的提示,这个时候你就可以去你的GitHub上看你的项目了
  4. 至于我gradle里免得配置基本上都是参考的这篇博客的: AndroidStuio快速发布开源项目到Jcenter/Bintray.那下面我就直接贴代码喽。
  • 配置项目的gradle:
 buildscript {
    repositories {
        jcenter()
 }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
        // 添加下面两行代码即可。
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
        //就上面的这两行
    }
 }

 allprojects {
     repositories {
        jcenter()
    }
 }

 task clean(type: Delete) {
    delete rootProject.buildDir
 }
  • 配置Library里面的gradle文件(务必仔细阅读注释,部分个人信息的修改都写在了注释里了!)

    apply plugin: 'com.android.library'
    // 这里添加下面两行代码。
    apply plugin: 'com.github.dcendents.android-maven'
    apply plugin: 'com.jfrog.bintray'
    
    android {
       compileSdkVersion 23
       buildToolsVersion "23.0.3"
       resourcePrefix "andserver_res_"
    
       defaultConfig {
            // applicationId "com.yanzhenjie.andserver.sample"
           // 这一行要删除, 因为library不允许有applicationId。
           minSdkVersion 8
           targetSdkVersion 23
           versionCode 1
           versionName '1.0.1'
      }
     }
    dependencies {
    // 如果你的library有依赖别的jar,这里要把jar依赖进来。
    compile fileTree(dir: 'libs', includes: ['*.jar'])
    }
    
    // 项目引用的版本号,比如compile    
    // 'com.yanzhenjie:andserver:1.0.1'中的1.0.1就是这里配置的。
    version = "1.0.1"
    
    // 定义两个链接,下面会用到。
    def siteUrl = 'https://github.com/yanzhenjie/AndServer' // 项目主页。
    def gitUrl = '[email protected]:yanzhenjie/AndServer.git' // Git仓库的url。
    
    // 唯一包名,比如compile 'com.yanzhenjie:andserver:1.0.1'中的     com.yanzhenjie就是这里配置的。
    group = "com.yanzhenjie"
    install {
       repositories.mavenInstaller {
       // 生成pom.xml和参数
       pom {
           project {
               packaging 'aar'
               // 项目描述,复制我的话,这里需要修改。
               name 'AndServer For Android'// 可选,项目名称。
               description 'The Android build the framework of the Http server.'// 可选,项目描述。
               url siteUrl // 项目主页,这里是引用上面定义好。
    
               // 软件开源协议,现在一般都是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 'yanzhenjie' // 开发者的id。
                      name 'yanzhenjie' // 开发者名字。
                      email '[email protected]' // 开发者邮箱。
                   }
               }
    
               // SCM,复制我的,这里不需要修改。
               scm {
                   connection gitUrl // Git仓库地址。
                   developerConnection gitUrl // Git仓库地址。
                   url siteUrl // 项目主页。
              }
           }
        }
       }
     }
    // 生成jar包的task,不需要修改。
    task sourcesJar(type: Jar) {
       from android.sourceSets.main.java.srcDirs
       classifier = 'sources'
    }
    // 生成jarDoc的task,不需要修改。
    task javadoc(type: Javadoc) {
        source = android.sourceSets.main.java.srcDirs
        classpath +=       project.files(android.getBootClasspath().join(File.pathSeparator))
        // destinationDir = file("../javadoc/")
        failOnError false // 忽略注释语法错误,如果用jdk1.8你的注释写的不规范就编译不过。
    }
    // 生成javaDoc的jar,不需要修改。
    task javadocJar(type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        from javadoc.destinationDir
    }
    artifacts {
        archives javadocJar
        archives sourcesJar
    }
    
    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 = "maven"  // 上传到maven库。(这里要特别注意,如果写了maven报404错误,请在bintray创建一个仓库,这里填改成你创建的仓库的名字,如何创建请看下图。)
            name = "andserver"  // 发布到Bintray上的项目名字,这里的名字不是compile 'com.yanzhenjie:andserver:1.0.1'中的andserver。
            userOrg = 'bintray_user' // Bintray的用户名。
            websiteUrl = siteUrl
            vcsUrl = gitUrl
            licenses = ["Apache-2.0"]
            publish = true // 是否是公开项目。
       }
    }
    
  • 说一下可能有疑问的地方:

论一个小白如何将自己的开源库发布到Bintray的JCenter上_第5张图片
  • APIKey和user存放和读取:
    因为我们上传项目到github上的时候会把gradle文件传上去,所以不要把帐号密码的信息直接写在这里,写在local.properties中,这里动态读取。
论一个小白如何将自己的开源库发布到Bintray的JCenter上_第6张图片
  • 那么问题来了,apikey在哪里找呢还有上面的git仓库又在哪里找呢?
  1. 先说一下apikey:

  2. git仓库地址:
    首先打开你项目在GitHub里的页面,然后点左边的一个绿色的一个Clone or download的框框,然后把它切换到SSH,这时现实的就是你git仓库的地址


    论一个小白如何将自己的开源库发布到Bintray的JCenter上_第7张图片

把Library上传到Bintray上

  • 首先我建议把你的项目在AS上再朝GitHub那边Commit and Push一次,然后就可以准备传到Bintray
  • 完成了以后,打开AS的Terminal控制台,在里面输入这两句(分开输)
      gradew install                              //系统配置gradle的用户环境
      gradew bintrayUpload                        //上传到Bintray

或者在AS的右边有一个Gradle,用里面的插件bintrayUpload来上传也可以,但是要切到gradle控制台里看是否BUILD SUCCESSFUL.
(感觉命令行更好用些)

论一个小白如何将自己的开源库发布到Bintray的JCenter上_第8张图片

去你Bintray的maven仓库下进行确认是否上传成功

如果你到Bintray上发现你的项目存在,但是下面没有Gradle的依赖,大概就像这样:
正常的库

论一个小白如何将自己的开源库发布到Bintray的JCenter上_第9张图片

不正常的库(假装有图)

这个。。。由于换电脑的原因,之前留的图片全都没备份就把上一个电脑的系统重装了(啊啊啊,暴风式哭泣。。。
总之就是,上面那张图的最下面的gradle可以复制的一段代码消失了,没有可以导入的库的代码

如果有可复制的依赖代码,那么说明你的库就已经上传成功啦,要是没有的话建议去看一下Android Studio 的gradle控制台在run的时候有没有报错,比如说哪一个文件没有生成或者生成的时候出现了问题之类的。

最后一步:添加到jcenter,提交给管理员审核

最后一步最关键的审核你和管理员的缘分(哈哈哈,开玩笑的)其实我感觉我都还好,没遇到传说中审核没通过的事情,基本上提交了以后等一阵子(一般是1~3天都会有回复,如果没有通过我记得会给原因。。。吧)

提交步骤很简单,在页面左侧有一个 Linked to(0), 然后你只要点下面的Add to JCenter 按钮就可以,然后在弹出的提交界面写上对应的信息就好啦,然后就可以等管理员审核过后给你在Binary上绑定的邮箱里面发通知邮件咯

啰嗦一些可能遇见的小问题

  • 如果报错了建议先去看gradle控制台的运行记录,看里面有没有什么异常

  • 关于default-pom.xml莫名无法生成 :
    这一个问题我一般是直接删掉之前放开源库相应代码的package,然后直接新建一个package,名字要和之前的package一样,但是在build.gradle 里面的version(即版本号)要改一个新的版本号,然后也是上面的步骤再重复一遍。

    但是在有一篇博客里提到了关于default-pom.xml无法生成的解决方法,要是嫌上面的方法麻烦的话,可以看一下解决方法(我没有试过)。

然后基本上就是这些啦,要是还有什么为问题的话可以在评论区留言呀。

这是我第一次写博客,啰里八嗦说了一大堆,措辞也要改进,而且自己也拖了好久,唉,感觉自己好菜啊,如果有什么不足之处希望大家直接说好了,我是一个耿直girl,不会介意的,最后就是蟹蟹大家能一直看到最后,又听我啰里八嗦一大堆。

哈哈(尬笑

你可能感兴趣的:(论一个小白如何将自己的开源库发布到Bintray的JCenter上)