Better

业精于勤荒于嬉

发布开源项目到JCenter

Better's Avatar 2017-01-14 Android

  1. 1. 独立模块
  2. 2. 发布到Bintray
    1. 2.1. 注册Bintray账号
    2. 2.2. 配置Bintray
      1. 2.2.1. 添加插件
      2. 2.2.2. 配置开发者信息
      3. 2.2.3. 配置项目信息
      4. 2.2.4. 上传的bintray
  3. 3. 发布到jCenter
  4. 4. 遇到的问题
  5. 5. Thinks

思路是:

  1. 独立开源模块
  2. 上传到Bintray
  3. 发布到JCenter

    独立模块

    就是抽出相应的代码到独立的modle里面,以便生成aar文件。比如我将的我banner部分代码封装在一个modle里面。
    项目

    发布到Bintray

    至于为什么要发布到bintray上 参考

    注册Bintray账号

    有的话请跳过,没有的话 传送门 。如果是企业级别的就注册企业的,个人开发者就注册个人的,企业的要收费,有30天试用期。
    注册之后可以新建一个maven库。
    maven库

    配置Bintray

    添加插件

    因为要使用到Bintray和Maven的服务,在项目的的build.gradle文件中添加两个插件,参考 Bintray plugin maven plugin
1
2
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.2'

大概长这个样子
引入插件

配置开发者信息

local.properties中添加:

1
2
3
4
5
6
bintray.user=开发者注册账号
bintray.apikey=开发者key
##developer
developer.id=这个可以随便写,一般是你开源社区的昵称
developer.name=你的名字
developer.email=联系邮箱,国内的qq,163统统不行。

user:如果user你不记得是什么了可以打开的bintray主页面即:https://bintray.com/xxx这个xxx就是你需要填写的user。
API key:在个人页面点击头像,选择view prefile。在做上方,点击头像羡慕的Edit,然后你就看见了
api key
涉及到隐身开发者信息,所以最好不要同步到开源社区上了,当然在这个信息化时代,不存在什么个人隐私信息。

配置项目信息

在modle下面新建一个project.properties 文件,用于几种记录信息并输入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#project
#项目名称
project.name=项目名称
project.version=版本号
project.bintrayRepo=就是你刚刚建立的maven库名字
#项目组ID 通常情况下如果你的包名为com.example.test,那么项目组ID就是com.example
project.groupId=xx
#项目ID 通常情况下如果你的包名为com.example.test,那么项目ID就是test
#保持你的library module的名字同artifactId一样
project.artifactId=xx
#包类型,Android库是aar
project.packaging=aar
#项目官方网站的地址,没有的话就用Github上的地址
project.siteUrl=https://github.com/471448446/DAndroid/tree/master/demo_android/BBanner
#项目的Git地址
project.gitUrl=https://github.com/471448446/DAndroid/tree/master/demo_android/BBanner
#项目描述
project.des=a simple banner for android

#javadoc
javadoc.name=BBanner

然后在modler下新建bintrayUpload.gradle文件,填入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'

//需要在local.properties文件中取值
Properties properties = new Properties()
File localPropertiesFile = project.file("../local.properties");
if (localPropertiesFile.exists()) {
properties.load(localPropertiesFile.newDataInputStream())
}
File projectPropertiesFile = project.file("project.properties");
if (projectPropertiesFile.exists()) {
properties.load(projectPropertiesFile.newDataInputStream())
}
//properties.load(project.rootProject.file('local.properties').newDataInputStream())

// read properties
def projectName = properties.getProperty("project.name")
def projectVersion = properties.getProperty("project.version")
def projectBintrayRepo = properties.getProperty("project.bintrayRepo")
def projectGroupId = properties.getProperty("project.groupId")
def projectArtifactId = properties.getProperty("project.artifactId")
def projectPackaging = properties.getProperty("project.packaging")
def projectSiteUrl = properties.getProperty("project.siteUrl")
def projectGitUrl = properties.getProperty("project.gitUrl")
def projectDes = properties.getProperty("project.des")

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 javadocName = properties.getProperty("javadoc.name")

//maven配置
version = projectVersion // 指定版本
group = projectGroupId // 这里需要和真实包名对应,不能随便填写

task generateSourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs //通过from函数指定代码源,这里是默认代码源
classifier 'sources'
}

task generateJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs //source指定了代码源
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

//这里dependsOn意为仅当generateJavadocs完成后才开始本task
task generateJavadocsJar(type: Jar, dependsOn: generateJavadocs) {
from generateJavadocs.destinationDir
classifier 'javadoc'
}
//将你生成的源代码和Javadoc Jar文件添加到Maven中
artifacts {
archives generateJavadocsJar
archives generateSourcesJar
}
// bintray configuration
bintray {
user = bintrayUser
key = bintrayApikey

pkg {
repo = projectBintrayRepo
//发布到JCenter上的项目名字
name = projectName
vcsUrl = projectGitUrl
websiteUrl = projectSiteUrl
licenses = ["Apache-2.0"]
publish = true
}
configurations = ['archives']
}

//版权申明
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging projectPackaging
// Add your description here
name projectDes
groupId projectGroupId
artifactId projectArtifactId
url projectSiteUrl
version projectVersion
// Set your license
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
}
}
}
}
}

这个基本上没什么修改的。
最后在modle的build.gradle的文末(ps:不要添加在文首)添加:
apply from: "bintrayUpload.gradle"
到处配置以及结束。

上传的bintray

在项目的gradle里面,点击gradle选择modle项目,以次输入并点击确认 :

  1. install
  2. bintrayUpload
    gradle task
    也可以在gradle的命令行里面输入:
  3. gradlew install
  4. gradlew bintrayUpload
    在linux或者mac下如果你没有将gradle命令添加到全局那么在gradlew前面需要添加./
    上传成功后你的项目就在bintray的maven里面的。你可以在查看是否上传没有。

    发布到jCenter

    这个时候的开源库还是在你的私人仓库里面引用方式是:在modle里面添加你的maven url,然后在complie你的项目名字。maven库的引用
    发布到jCenter方式很简单,只需点击Add to JCenter
    发布
    审核成功后你就可以快乐的引用了。

    遇到的问题

  • 如果你是个人用户的话,注册bintray账号就别注册企业版的,如果你需要消费,哪也无妨。个人版的注册在页面的最底部。当时也是先注册,在注销(会删除所有的库),在注册。
  • error: Error:(3, 0) No service of type Factory<LoggingManagerInternal> available in ProjectScopeServices. <a href="openFile:/Users/better/Documents/WorkSpace/git/DAndroid/demo_android/BBanner/banner/build.gradle">Open File</a> 使用bintray和maven插件的时候最好使用最新的
  • Error : cause android.compileSdkVersion is missing 申明bintrayUpload.gradle时最好不要紧跟着申明modle语句之后,如果你没分了配置文件的话不会遇见这个错误。

Thinks

5分钟发布Android Library项目到JCenter
发布aar到jcenter的正确姿势
使用Android Studio把自己的Android library分发到JCenter

This article was last updated on days ago, and the information described in the article may have changed.