转载请标明出处
本文出自HCY的博客
概述
将自己写的库上传到Jcenter或者Maven提供给自己或者别人使用,在构建项目的时候只要写上一行如下类似的引用代码即可引用自己的库。是不是很酷的一件事情,本文一步一步教你如何将自己的代码发布到JCenter上,带你装逼带你飞。
compile
'com.android.support:recyclerview-v7:23.3.0'
本人使用的软件环境
软件名称版本号
操作系统Windows 7Android Studio2.2Gradle2.14.1com.android.tools.build:gradle1.5.0com.github.dcendents:android-maven-gradle-plugin1.3.0com.jfrog.bintray.gradle:gradle-bintray-plugin1.6.0
上传到代码到Jcenter
1.到Bintray官网注册账号
到Bintray官网注册账号,填写相关信息,填写的Organization Id很重要,一定要记起来到时候上传代码的时候要用。另外邮箱也不要填写比如qq.com、163.com的邮箱,会无法注册的。最好是填写GMail邮箱地址。注册完成之后到你填写的邮箱里面去激活Bintray账号即可。
2.创建代码仓库
点击上图所示的“Add NewRepository”按钮,添加代码仓库,点击后就会跳转到下图的界面。
在上图的Name输入框中输入代码仓库的名称,名字可以随便写,但是一定要记得,因为后面上传代码的时候还要用,Type选择Maven即可。点击Create即可创建代码仓库,若创建成功则会跳转到下面的页面。
如上图红色框框所示代码仓库的路径就是Organization Id/Repository Name,本人创建的代码仓库即为(coolcode/maven),另外要记住的信息是上图右上角的Bintray User(Bintray的用户名),因为后面上传代码要用到。
3.获取账号对应的API KEY
点击个人头像进入到个人信息主界面,点击Edit按钮即可进入到上图所示的界面。点击“API KEY”,输入Bintray本账号的登陆密码,即可查看到本账号的API KEY。到此为止我们已经获取到了如下四条重要的信息,请牢记:
Organization Id(组织ID)Repository Name(仓库名称)Bintray User(Bintray账号的用户名)Bintray API Key(Bintray账号的API KEY)
4.在Project的build.gradle添加如下信息
// Top-level build file where you can add configuration options common to all
sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath
'com.android.tools.build:gradle:1.5.0'
classpath
'com.github.dcendents:android-maven-gradle-plugin:1.3' //用于打包Maven所需文件
classpath
'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6' //用于上传Maven生成的文件到Bintray
}
}
allprojects {
repositories {
jcenter()
}
}
5.在Module的根目录下创建bintrayUpload.gradle文件
apply plugin:
'com.github.dcendents.android-maven'
apply plugin:
'com.jfrog.bintray'
Properties properties =
new Properties()
File localPropertiesFile = project.file(
"bintray.properties");
if (localPropertiesFile.exists()) {
properties.load(localPropertiesFile.newDataInputStream())
}
File projectPropertiesFile = project.file(
"project.properties");
if (projectPropertiesFile.exists()) {
properties.load(projectPropertiesFile.newDataInputStream())
}
def projectRepositoryName = properties.getProperty(
"project.repositoryName")
def projectName = properties.getProperty(
"project.name")
def projectGroupId = properties.getProperty(
"project.groupId")
def projectArtifactId = properties.getProperty(
"project.artifactId")
def projectVersionName = android.defaultConfig.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 bintrayOrganizationId = properties.getProperty(
"bintray.organizationId");
def javadocName = properties.getProperty(
"javadoc.name")
group = projectGroupId
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
}
}
}
}
}
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
}
artifacts {
archives javadocJar
archives sourcesJar
}
javadoc {
options {
encoding
"UTF-8"
charSet
'UTF-8'
author
true
version projectVersionName
links
"http://docs.oracle.com/javase/7/docs/api"
title javadocName
}
}
bintray {
user = bintrayUser
key = bintrayApikey
configurations = [
'archives']
pkg {
userOrg = bintrayOrganizationId
repo = projectRepositoryName
name = projectName
websiteUrl = projectSiteUrl
vcsUrl = projectGitUrl
licenses = [
"Apache-2.0"]
publish =
true
}
}
6.在Module的build.gradle中应用上面创建的bintrayUpload.gradle文件,添加如下代码
apply
from:
"bintrayUpload.gradle"
7.在Module的根目录下创建第5步要读取的配置文件
创建bintray.properties用于配置bintray和开发者信息
#配置bintray账号相关信息
#bintray用户名,不是登陆邮箱,是个人中心右上角显示的名字
bintray.user=huangcaiyuan5678
#bintray的ApiKey
bintray.apiKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#bintray的Organization Id
bintray.organizationId=coolcode
#配置开发者信息
#昵称
developer.id=huangcaiyuan
#姓名
developer.name=huangcaiyuan
#邮箱
developer.email=huangcaiyuan1234@gmail.com
创建project.properties用于配置项目信息
#project
#仓库名称,就是在bintray官网建立的仓库的名称
project
.repositoryName=maven
#项目名称
project
.name=LibUiBase
#项目组id
project
.groupId=
com.hcy.library
#项目id,一般同project.name
project
.artifactId=LibUiBase
#打包类型
project
.packaging=aar
#项目官方网站地址
project
.siteUrl=https://github
.com/Money888
#项目git地址
project
.gitUrl=https://github
.com/Money888
#生成的javadoc名称
javadoc
.name=LibUiBase
8.在Terminal窗口下收入如下指令上传到Bintray
gradlew
install
gradlew bintrayUpload
若出现BUILD SUCCESSFUL则说明成功上传到了Bintray。
9.添加Package到JCenter
进入到Bintray网站,找到刚才上传的项目,点击右下角的“Add To JCenter”按钮。
然后填写项目描述点击“Send”提交审核即可,如果审核成功,它会给你发送一封站内信通知你。
10.引用成功
compile
'项目组ID:项目名称:项目版本号'
compile
'com.android.support:recyclerview-v7:23.3.0'
常见问题及解决方案
1.
Could
not upload
to 'https://api.bintray.com/content/coolcode/maven/LibUiBase/1.0.0/CommonLibrary/LibUiBase/1.0.0/LibUiBase-1.0.0.pom': HTTP/
1.1 400 Bad Request [
message:Unable
to upload files: Maven group, artifact
or version defined
in the pom
file do not match the
file path
'CommonLibrary/LibUiBase/1.0.0/LibUiBase-1.0.0.p
om']
解决方案:
出现这个问题的原因有可能是project.properties里面的project.name的属性值与project.artifactId不一致,或者是bintrayUpload.gradle里面的group = projectGroupId脚本没有写,尝试修改上面两种可能出现该问题的脚本。
2.
Could not
create package 'coolcode/maven/LibUIBase': HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]
解决方案:
出现这个问题的原因可能是名为maven的仓库(不一定是叫maven,名字只要和bintray网站建立仓库时的名称一致即可)没有建立,或者建立了仓库,但是名称不叫maven,又或者组织名称不叫coolcode,因为项目上传的路径为:组织ID/仓库名称/项目名,所以检查组织ID和仓库名称是否正确即可解决问题。
更多
扫一扫关注我的公众号。