带你装逼带你飞(将Library发布到JCenter)

转载请标明出处

本文出自HCY的博客

概述

将自己写的库上传到Jcenter或者Maven提供给自己或者别人使用,在构建项目的时候只要写上一行如下类似的引用代码即可引用自己的库。是不是很酷的一件事情,本文一步一步教你如何将自己的代码发布到JCenter上,带你装逼带你飞。

compile 'com.android.support:recyclerview-v7:23.3.0'

本人使用的软件环境

软件名称 版本号
操作系统 Windows 7
Android Studio 2.2
Gradle 2.14.1
com.android.tools.build:gradle 1.5.0
com.github.dcendents:android-maven-gradle-plugin 1.3.0
com.jfrog.bintray.gradle:gradle-bintray-plugin 1.6.0

上传到代码到Jcenter

1.到Bintray官网注册账号

带你装逼带你飞(将Library发布到JCenter)_第1张图片
注册相关信息

到Bintray官网注册账号,填写相关信息,填写的Organization Id很重要,一定要记起来到时候上传代码的时候要用。另外邮箱也不要填写比如qq.com、163.com的邮箱,会无法注册的。最好是填写GMail邮箱地址。注册完成之后到你填写的邮箱里面去激活Bintray账号即可。

2.创建代码仓库

带你装逼带你飞(将Library发布到JCenter)_第2张图片
创建代码仓库

点击上图所示的“Add NewRepository”按钮,添加代码仓库,点击后就会跳转到下图的界面。

带你装逼带你飞(将Library发布到JCenter)_第3张图片
完善代码仓库信息

在上图的Name输入框中输入代码仓库的名称,名字可以随便写,但是一定要记得,因为后面上传代码的时候还要用,Type选择Maven即可。点击Create即可创建代码仓库,若创建成功则会跳转到下面的页面。

带你装逼带你飞(将Library发布到JCenter)_第4张图片
代码仓库创建完成后的显示界面

如上图红色框框所示代码仓库的路径就是Organization Id/Repository Name,本人创建的代码仓库即为(coolcode/maven),另外要记住的信息是上图右上角的Bintray User(Bintray的用户名),因为后面上传代码要用到。

3.获取账号对应的API KEY

带你装逼带你飞(将Library发布到JCenter)_第5张图片
个人信息编辑界面

点击个人头像进入到个人信息主界面,点击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")

/*
*这句代码一定要加否则会出现如下错误
* 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']
* */
group = projectGroupId

// 配置生成POM.xml文件的参数
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
                }
            }
        }
    }
}

//生成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))
}

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

artifacts {
    archives javadocJar
    archives sourcesJar
}

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

/*
*userOrg为bintray账号信息里面的Organization Id
*repo为你创建的仓库名称
* 如果上述两个字段写错了,则会出现下面类似的错误
*Could not create package 'huangxuanheng/maven/fragmentstack': HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]
*
*
* */
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
#邮箱
[email protected]

创建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”按钮。

带你装逼带你飞(将Library发布到JCenter)_第6张图片
点击右下角的“Add To JCenter”按钮

然后填写项目描述点击“Send”提交审核即可,如果审核成功,它会给你发送一封站内信通知你。

10.引用成功

//引用方式如下
compile '项目组ID:项目名称:项目版本号'

//引用示例
compile 'com.android.support:recyclerview-v7:23.3.0'

常见问题及解决方案

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脚本没有写,尝试修改上面两种可能出现该问题的脚本。

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和仓库名称是否正确即可解决问题。

你可能感兴趣的:(带你装逼带你飞(将Library发布到JCenter))