上传开源库到JCenter

在开发中,我们经常用到其他人写好的库,然后compile一下。那有没有想过怎样让我们自己写的库也能被别人这么方便的使用呢?别急,下面一步一步来。

先说一下,弄这个东西整整耗费了2天时间,一方面是由于国外网速的问题;一方面是网上的教程有的太老,有的根本就是到处copy,自己也没有实践,误人子弟,对于这种行为,鄙视。

首先,我从网上众多的博客中找到了hongyang的,毕竟大神嘛。但是这次他的教程没有帮上忙,可能是教程太老了,耗费了不少时间。具体不展开了,说一下问题吧,hongyang使用的是bintray-release这个库,这个库相比其他库使用方法简单了很多(导致我后面遇到了很多问题也不想换其他的库,想偷懒结果更麻烦)。
1. 要上传到JCenter需要我们上传4个东西,aar,source.jar , doc.jar和pom文件,其中pom是必不可少的。但是偏偏这个库就是没有生成pom文件和两个jar文件,然后上传的时候skipping upload…
2. 既然你没有生成,那我直接生成好了,于是我直接生成了pom文件和两个jar文件,放到指定的位置,这下确实上传成功了,但就是不能引用,我真是日了dog了。上传上去的文件和引用时下载的文件名不一致导致引用失败。
3. 到了上面第二步,我对这个库是彻底没想法了,开始使用其他的库,麻烦是麻烦了一点,但是一次成功了,鼓掌。

教程开始

(一)注册Bintray账号

这里的坑在于注册个人还是组织的,如果是注册个人的那没什么,但是如果是注册组织的,就要注意了。
image
如上图所示,个人的话1和2都是相同的,组织1和2可能是不同的。

(二)创建项目

创建一个Project,然后在创建一个Module,Module类型选择Android Library,这个Module是我们要上传的; 在Bintray网站中创建Maven仓库,取名为maven

(三)配置
  1. 在Top-level层的build.gradle中添加如下依赖:
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
  1. 在Module最外层创建文件 project.properties
#project
project.name=LibraryTest
project.groupId=com.wl
project.artifactId=librarytest
project.versionName=1.0.0
project.packaging=aar
project.siteUrl=https://github.com/Hhcoco/librarytest
project.gitUrl=https://github.com/adamrocker/librarytest.git

#javadoc
javadoc.name=LibraryTest
  1. 在Module最外层创建文件 local.properties
bintray.user=coco   //这是你的用户名,对应上图的1
bintray.apikey=***************    //这是你账号对应的key,在个人中心里面去找

#developer
developer.id=wl
developer.name=wl
developer.email=wang1024liang@gmail.com
  1. 在Module最外层创建文件 bintrayUpload.gradle (直接copy下面代码,无需修改)
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

// load properties
Properties properties = new Properties()
File localPropertiesFile = project.file("local.properties");
if (localPropertiesFile.exists()) {
    properties.load(localPropertiesFile.newDataInputStream())
}
File projectPropertiesFile = project.file("project.properties");
if (projectPropertiesFile.exists()) {
    properties.load(projectPropertiesFile.newDataInputStream())
}

// read properties
def projectName = properties.getProperty("project.name")
def projectGroupId = properties.getProperty("project.groupId")
def projectArtifactId = properties.getProperty("project.artifactId")
def projectVersionName = properties.getProperty("project.versionName")
def projectPackaging = properties.getProperty("project.packaging")
def projectSiteUrl = properties.getProperty("project.siteUrl")
def projectGitUrl = properties.getProperty("project.gitUrl")

def developerId = properties.getProperty("developer.id")
def developerName = properties.getProperty("developer.name")
def developerEmail = properties.getProperty("developer.email")

def bintrayUser = properties.getProperty("bintray.user")
def bintrayApikey = properties.getProperty("bintray.apikey")

def javadocName = properties.getProperty("javadoc.name")

group = projectGroupId

// This generates POM.xml with proper parameters
install {
    repositories.mavenInstaller {
        pom {
            project {
                name projectName
                groupId projectGroupId
                artifactId projectArtifactId
                version projectVersionName
                packaging projectPackaging
                url projectSiteUrl
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        id developerId
                        name developerName
                        email developerEmail
                    }
                }
                scm {
                    connection projectGitUrl
                    developerConnection projectGitUrl
                    url projectSiteUrl
                }
            }
        }
    }
}

// This generates sources.jar
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))
}

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

artifacts {
    archives javadocJar
    archives sourcesJar
}

// javadoc configuration
javadoc {
    options {
        encoding "UTF-8"
        charSet 'UTF-8'
        author true
        version projectVersionName
        links "http://docs.oracle.com/javase/7/docs/api"
        title javadocName
    }
}

// bintray configuration
bintray {
    user = bintrayUser
    key = bintrayApikey
    configurations = ['archives']
    pkg {
        repo = "maven"
        name = projectName
        websiteUrl = projectSiteUrl
        vcsUrl = projectGitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}
  1. 在Module的build.gradle文件末尾添加:
apply from:"bintrayUpload.gradle"
(四) 运行
  1. 首先生成各种文件,打开Terminal ,执行 :
gradlew install 

如果BUILD SUCCESSFUL,则可以开始下一步了,如果不行,根据错误慢慢爬坑吧。
2. 开始上传

gradlew bintrayUpload

同理 ,如果BUILD SUCCESSFUL 就ok了。去主页查看就能看到了。
image
要有1的这种,就可以了。然后点击2处的Add to JCenter添加到仓库。

但是到这一步还不算完,我们需要测试一下,因为我一开始用的那种方法也进行到这一步了,看起来什么东西都有了,但是引用会出错。

验证方法:
1. 在Top-Level层添加:

//把下面的coco换成你自己的用户名
maven { url "http://dl.bintray.com/coco/maven/com/wl/librarytest/1.0.0/"}
  1. 然后compile ‘XXXXXXXXXXXX’ ,看是否能sync成功,如果能成功,那就大功告成了,如果还不对,慢慢爬坑吧,道阻且长。。。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值