最近有这方面需要,所以研究了一下如何将自己的工程项目发布到jCenter上去。方法有很多,可以是Bintray,maven,jitPack.io等等。
本次发布使用的Bintray,所以稍后先从如何使用Bintray网站开始。工程通过novoda进行发布,使用起得非常方便。由于参数问题踩了几步坑,文中也会提到,但只要仔细,这些都是可以避免的。
一、Bintray网站的使用
Step 1 注册
在网上可以找到很多关于Bintray如何注册的文章,也都讲到了如何成为个人或企业用户。区别在于直接在首页点击注册并进入网站后,默认会是一个企业用户,需要等待30天的激活时间,而且在项目发布后,是没有同步到jCenter按钮的(add to jCenter)。
所以我们需要的是这个地址,bintray.com/signup/oss,成为个人用户。但个人用户是不可以创建private仓库的,这一点值得注意。
具体的注册信息就按个人情况填写即可,很快就会成为一个新的注册用户了,那么第一步也就顺利完成了。
Step 2 创建仓库(Add new Repository)
创建仓库很简单,但是Name一定要填maven,否则后面的发布操作是不成功的。Type也一定要选择maven,表示是一个maven仓库。同时可以看到,Pravite选项是disable的,这是个人用户不可选择的一项。下面的Licenses是可选项,点击下拉的菜单可以选择Apache-2.0。
最后点击Create创建即可,页面会刷新回到上一级,同时在Owned Repository中多出一个刚才新建的maven仓库链接。
Step 3 Add New Package
maven仓库创建完成了,来到仓库的页面中,点击Add New Package来创建新的Package。如果不创建的话,后面的发布不成功哦!下面是创建时要填写的内容,Name就填你要发布的module的名字,website和version control,都可以填git的地址,issue可以填上你的git地址/issue。
Step 4 获取 API key
好了,基本准备就绪了。随后的发布,会用到一个key,它在哪里呢?
页面右上角!看到Edit Profile了,点击进入到下一页。
很明显,左侧菜单下方会有一个API Key的选项,点击后输入密码,就可以拿到你的key了。现在怎么做都可以,这个key到发布的时候才会使用。
二、本地工程配置
Bintray的事搞定了,下面就开始我们自己的工程了。Android的工程如何创建,如何架构,这里就不再描述了,当前就认为工程的事一切就绪,只差东(pei)风(zhi)了。配置的关键就是顶级的build.gradle文件,和你要发布的module的build.gradle。这两个文件可以帮助你完成发布的事情,请认真对待哦!
Step 1 顶级 build.gradle
前面已经说过了,我们的方式是使用novoda来进行发布操作,这里首先要添加novada的引用。
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.novoda:bintray-release:0.5.0' // 可以到github上查看他的最版本复制代码
上面我用到的是0.5.0版本,你也可以去github上自行使用它的最新版本,但是版本这个东西会造成很多问题,所以如果是第一次尝试,感觉还是先按这个来,等走通了之后再去修改也不迟。
接下来需要添加对字体的设置
tasks.withType(Javadoc) {
options{
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
}复制代码
下面这段要注意,之前我没加上,在发布的时候会报错(报什么错我忘了,好像是因为引入Kotlin的原因,要是想知道的话,可以先不加这句,看看运行发布命令的时候会出什么错)。
tasks.getByPath(":XXXXX:releaseAndroidJavadocs").enabled = false
tasks.getByPath(":XXXXX::bintrayUpload").enabled = true复制代码
其中的“XXXXX”指的是你的目标module,比如你要发布的module叫abc,那么改过之后的代码就是下面的样子,要注意第一行是一个冒号,第二行是两个哦,不是我写错了,也不是你看错了!
tasks.getByPath(":abc:releaseAndroidJavadocs").enabled = false
tasks.getByPath(":abc::bintrayUpload").enabled = true复制代码
Step 2 module的build.gradle
首先就是要引入novada plugin
apply plugin: 'com.novoda.bintray-release'复制代码
其次,在你的android配置中,增加lint设置。
android{
......
......
lintOptions {
abortOnError false
}
}复制代码
接下来写上这些东西,虽然跟顶级的重复了,但是我在没写的情况下,发布失败了
repositories {
jcenter()
}
allprojects {
repositories {
jcenter()
}
tasks.withType(Javadoc) {
options{
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
}
}复制代码
最后,重中之重,放在最后面配置,那就是novada的配置。这些配置,你可以写到变量里,也可以直接写字符串里,这里给出后者,变量的事自己按习惯修改。
publish {
userOrg = 'foo'
groupId = 'foo.bar'
artifactId = 'bar'
publishVersion = '0.0.1'
desc = 'foo bar'
website = 'http://git.yourgit/'
licences = ['Apache-2.0']
}复制代码
好好解释一下上面这些参数。
- userOrg:Bintray网站注册时的用户名。最简单的查看方法就是,登录了Bintray网站之后,看浏览器地址,上面会写着你的用户名,页面上也有。
- groupId:jCenter上的路径。拿rxjava举例,它的引用方式是
,那么它的groupId就是io.reactivex.rxjava2。complie io.reactivex.rxjava2:rxjava:2.x.y复制代码
- artifactId:这是你在jCenter上项目的名字。一般跟你的项目中module名称一致。
- publishVersion:发布的版本号。递增的。
- 后面三个,desc是项目描述,website可以填上你项目的git地址,licences几乎是固定的。
三、发布到jCenter
终于走到这一步了,前面有准备全都是为了发布。那么打开终端,来到我们的项目目录下,执行命令,开始发布。
./gradlew clean build bintrayUpload -PbintrayUser=foo -PbintrayKey=bary -PdryRun=false复制代码
bintrayUser要填的仍然是你的用户名,bintrayKey就是上面我们说到的API Key了,复制到命令中就可以了。最后一个dryRun参数,true时表示不发布只查看命令是否成功,false时即执行发布和上传操作。
问题
如果在Bintray中,自己的maven仓库下先Add New Package的话,这里的命令会失败,找不到仓库;
message:Please enter a valid VCS URL for your OSS package.
复制代码
如果上面的bintrayUser和bintrayKey填错的话,也会失败。
message:This resource requires authentication
复制代码
四、add to jCetner
发布成功后,来到你的Bintray页面上,找到刚刚上传的项目中并打开页面。你会发现右侧有一个按钮,即add to jCenter
我们要做的就是点击,进入到下一页,输入一些描述后,等待审核就可以了。审核成功后,我们的项目就算是真正的走到了jCenter仓库中了,你的build.gradle中也不必再定义一个自己的maven了。