2019 Android library 怎么快速上传 Jcenter
Library 的两种结构
当我们写下自己的组件库时,结构可能如下面两种方式:
当我们的库比较简单时采用第一种方式就足够了,但是当库比较复杂时,第二种拆分为多个组件的方式能够跟好的组织与提供服务。下面会介绍这两种结构的项目如何快速上传 Jcenter。
注册 Bintray
第一步首先是注册 Bintray Open Source 账户,注册地址是 Create Your JFrog Bintray Account https://bintray.com/signup/oss, 请注意不要去 Bintray 主页注册为企业账户,否则删除账户需要在 3 个月后试用时长过期后才可以申请。
注册页面预览:
建立 Maven 仓库
账号建立并成功登录之后,你们看到的页面可能和下图类似:
不同之处可能是 Owned Repositories 部分是空的。 接下来就是建立自己的 maven 仓库了。 点击 Owned Repositories 区域的 Add New Repository, 重点在于 Type 需要选择 Maven 项,其他部分根据自己的实际情况填写。
当创建成功之后,回自动进入的新的仓库页面,预览如下:
对单 Module Library 进行上传
既然仓库以及建立好了接下来就是对 library 将上传到刚刚建立的 maven 仓库了。
修改 Project build.gradle
首先在 project 下的 build.gradle 脚本添加必要的依赖:
buildscript {
dependencies {
...
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
...
}
}
allprojects {
//如果是kotlin项目,请添加此项,纯Java项目请忽略
tasks.withType(Javadoc).all { enabled = false }
}
建立 bintrayv1.gradle 文件
然后在 project 目录下新建 bintrayv1.gradle 文件,内容如下:
apply plugin: 'com.jfrog.bintray'
version = libraryVersion
if (project.hasProperty("android")) { // Android libraries
task sourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
} else { // Java libraries
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
// Bintray
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 = bintrayRepo
name = bintrayName
desc = libraryDescription
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = allLicenses
publish = true
publicDownloadNumbers = true
version {
desc = libraryDescription
gpg {
sign = true //Determines whether to GPG sign the files. The default is false
passphrase = properties.getProperty("bintray.gpg.password")
//Optional. The passphrase for GPG signing'
}
}
}
}
建立 installv1.gradle 文件
之后在 project 目录下再新建 installv1.gradle 文件,内容如下:
apply plugin: 'com.github.dcendents.android-maven'
group = publishedGroupId // Maven Group ID for the artifact
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
groupId publishedGroupId
artifactId artifact
// Add your description here
name libraryName
description libraryDescription
url siteUrl
// Set your license
licenses {
license {
name licenseName
url licenseUrl
}
}
developers {
developer {
id developerId
name developerName
email developerEmail
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
这里解释一下为什么要新建这两个文件,这两个文件是 Bintray 为了方便上传 library 所编写的脚本,源文件位于 github,为了避免 gradle 同步过程中由网络引发的错误,所以直接将其内置与项目中。源地址分别是:
若嫌麻烦,也可在后续引用到改文件的地方直接填入 http 链接,不必新建为本地文件。
填写 Publish 信息
在需要上传的 module 下建立 publish.gradle 文件,填写内容如下:
ext {
// 此处填写刚才建立的maven仓库的仓库名称
bintrayRepo = 'YourRepositoryName'
// library的group id
publishedGroupId = 'com.xxx.libraryName'
// library网站地址
siteUrl = ''
// library仓库地址
gitUrl = ''
// 注册时候的bintray username
developerId = ''
// 开发者名称
developerName = ''
// 开发者邮箱
developerEmail = ''
// 开源许可证(这里是Apache 2.0)
licenseName = 'The Apache Software License, Version 2.0'
licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
allLicenses = ["Apache-2.0"]
// library artifact(单个module一般就填写library name)
artifact = 'libraryName'
libraryName = ''
libraryVersion = ''
libraryDescription = ''
// bintrayName 是你在网页Repository页面能看到的名称
bintrayName = 'libraryName-' + artifact
}
apply from: '../installv1.gradle'
apply from: '../bintrayv1.gradle'
修改 Module build.gradle 文件
只需要在需要上传的 module 目录下的 build.gradle 文件的最后添加以下代码:
apply from: 'publish.gradle'
编辑 local.properties 文件
在 bintray 个人页面右上角头像处,点击 Edit Profile 进入个人信息编辑页面后,点击左下角的 API Key, 会提示输入密码,输入密码后点击 Copy To Clipboard 就可以得到你自己的 bintray api key。
然后修改 project 目录下的 local.properties 文件,在末尾添加下面的内容。
bintray.user=你的bintray username
bintray.apikey=刚才复制的bintray api key
在获取到 bintray api key 之后就可以进行上传了。
对多 Module Library 进行上传
如果只是单 Module 可以跳过此部分。
由于多 Module library 对于每个 module 而言,同属与同一个 library,所以 publish 信息中大部分信息相同,所以便把这些相同的信息提取出来。
建立 publish_info.gradle 文件
我们选择把相同的信息提取到 Project 目录下到 publish_info.gradle 文件中,内容如下:
ext {
// 此处填写刚才建立的maven仓库的仓库名称
bintrayRepo = 'YourRepositoryName'
// library的group id
publishedGroupId = 'com.xxx.libraryName'
// library网站地址
siteUrl = ''
// library仓库地址
gitUrl = ''
// 注册时候的bintray username
developerId = ''
// 开发者名称
developerName = ''
// 开发者邮箱
developerEmail = ''
// 开源许可证(这里是Apache 2.0)
licenseName = 'The Apache Software License, Version 2.0'
licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
allLicenses = ["Apache-2.0"]
}
填写 publish 信息
在每个 module 目录下建立 publish.gradle 文件,内容如下:
ext {
// library artifact(单个module一般就填写library name)
artifact = 'libraryName'
libraryName = ''
libraryVersion = ''
libraryDescription = ''
// bintrayName 是你在网页Repository页面能看到的名称
bintrayName = 'libraryName-' + artifact
}
apply from: '../publish_info.gradle'
apply from: '../installv1.gradle'
apply from: '../bintrayv1.gradle'
其余步骤均与单个 module 上传部分相同。
上传
上传有两种方式:
命令行: 打开终端,在 project 目录下运行如下命令即可(modelName 改为自己需要上传的 module 名称):
./gradlew moduleName:bU
IDE 可视化:
选择侧边栏中的 gradle,然后导航至需要上传的 module 下,打开 Tasks/publishing/bintrayUpload,双击执行任务即可。
上传成功后截图:
添加至 Jcenter
新版 Bintray 网站改版之后 Add to Jcenter 被放置在了 Actions 按钮下。
点击 Add to Jcenter 按钮后,此时会弹出如下弹窗: 在填写相关信息后,点击 Send,等待申请通过后,你的仓库便会被同步到 Jcenter。
当申请通过后,你会在网站的 Inbox 收到如下信息:
这表明你的 library 已经被同步至 Jcenter,接下来便可以在其他的 Android 项目里进行远程引用的,需要注意的是在每次 library 更新后,并不会马上被同步至 Jcenter,而是需要等待一段时间。
删除 Library/Repository
当不小心把信息填写错误后,我们可能需要删除错误的仓库和库。删除的方式如下:
进入 Repository/Library 主页,在右上角的 Actions 选择 Edit,然后选择右上角的 Delete 按钮,最后等待删除成功提示即可。