介绍
当在我们这行积累到一定程度,都会有自己的一些代码库,这些代码被多个项目使用。之前的做法是每次到新的项目中,就会把之前的代码拷贝过来,升级一下,或许会把一些纯java代码打包成jar包文件,这样项目中只要引用这个jar包就可以了,但是在Android中,我们可能还会用到一些资源文件,这样再想打包成jar包就比较麻烦了。再再升级下,我们可以使用Android Studio生成aar文件,这样就避免了资源文件无法打包的困扰。但是这样每次到新项目,我们还是要将aar文件拷贝过来,这样的维护还是需要些成本。本文将阐述如何将私有代码库发布到maven仓库中心,只要一句简单的配置代码,即可引用自己的代码库,这样是不是更好维护,更简单,逼格更高呢~
创建并配置library项目
作为一个工具类库,首先,我们需要创建一个library项目
然后在project的build.gradle配置以下两句代码
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
接着在library module的build.gradle增加一些配置:
1、添加插件
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
2、定义版本
version = "0.0.1"
3、设置项目代码地址
这里我是使用github作为代码开源地址
def siteUrl = 'https://github.com/a631855639/BintrayDemo' // project homepage
def gitUrl = 'https://github.com/a631855639/BintrayDemo.git' // project git
4、定义group
这个group定义的名称将是你之后要引用时会用到的,且要唯一,一般是用包名
group = "com.bintray.library.demo"
如何确定唯一性呢,可以打开这个地址https://bintray.com/bintray/jcenter,然后搜索一下自己的包名,看是否被人使用过了没。
5、定义pom并打包aar
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
name 'Helen Code For Android'//一些描述
url siteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {//开发者信息
id ''
name ''
email ''
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
6、打包javadoc jar和source 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))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
javadoc {
options{
encoding 'UTF-8'
charSet 'UTF-8'
author true
}
}
artifacts {
archives javadocJar
archives sourcesJar
}
7、上传到maven仓库,从local.properties读取user和apikey
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo = "maven"
name = "BintrayLibraryDemo" // project name in maven
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
publish = true,代表当改task执行时,就将其发布上去,如果为false就不发布。
这里你需要在项目的local.properties文件里配置bintray.user和bintray.apikey,分别为https://bintray.com/ 网站注册的用户名和密钥。
注意:不要将local.properties文件提交到代码开源库上,防止重要信息泄露,记得使用忽略文件将其忽略提交
项目整体配置
以上步骤算是配置好了,剩下就是到https://bintray.com/ 注册用户,获取bintray.user和bintray.apikey了
来个配置代码全身照吧!
获取bintray.user和bintray.apikey
要获取这两个值,必须要先到https://bintray.com/ 注册,然后点击个人头像—>编辑
如果发布失败,可能是因为你的user填错了。之前,我在注册的时候,使用的用户名是Helen,但是发现发布失败,当我改为小写helen时,成功了!当你不知道你要填大写小写时,你可以看进入你的个人主页时,地址写着是什么就是什么了,比如我的个人主页是https://bintray.com/helen。
发布
配置完以上,最后,打开命令行执行
gradlew bintrayUnload
或者如下图
双击运行bintrayUnload即可。
然后你会在bintray的个人主页下方
说明已经上传成功了,但是还没完,点击上面的项目链接进入项目主页,然后将其“Add to JCenter”提交,等待审核。
等待审核通过之后(这个差不多等半个小时吧),然后就可以使用了。用法就是使用gradle compile group名+module名+版本号
compile 'com.bintray.library.demo:app:0.01'
升级
我们的类库也会不断优化,添加功能,这时候仓库中心的代码也需要升级,这个只要将第二步中的版本号version提高一个版本即可,然后再次执行bintrayUnload。如果没有将版本号升级,就再次发布,会报错
Could not upload to 'https://api.bintray.com/content/helen/maven/BintrayLibraryDemo/0.0.1/com/bintray/library/demo/app/0.0.1/app-0.0.1-javadoc.jar': HTTP/1.1 409 Conflict
提交升级之后,需要等待一段时间。