编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过!
原文:使用Gradle发布项目到JCenter仓库
这篇文章介绍通过Gradle把开源项目发布到公共仓库JCenter中,方便你我他的事情,我们都是很懒的嘛。JCenter现在是Android Studio中repositories的默认节点了,之前是Maven的,不过JCenter是兼容Maven的,所以放心使用。步骤基本是按Publishing Gradle Android Library to jCenter Repository这里来的,英文能看的直接看这篇也行。下面我的步骤正式开始,发布到JCenter仓库的是我的项目:BounceProgressBar。
申请Bintray账号#
Bintray的基本功能类似于Maven Central,一样的我们需要一个账号,Bintray传送门,注册完成后第一步算完成了。
生成项目的JavaDoc和source JARs#
简单的说生成的这两样东西就是我们在下一步中上传到远程仓库JCenter上的文件了。这一步需要android-maven-plugin插件,所以我们需要在项目的build.gradle(Top-level build file,项目最外层的build.gradle文件)中添加这个构建依赖,如下:
1 <div class="line number2 index1 alt1">
2
</div>
<div class="line number3 index2 alt2">
3
</div>
<div class="line number4 index3 alt1">
4
</div>
<div class="line number5 index4 alt2">
5
</div>
<div class="line number6 index5 alt1">
6
</div>
<div class="line number7 index6 alt2">
7
</div>
<div class="line number8 index7 alt1">
8
</div>
<div class="line number9 index8 alt2">
9
</div>
<div class="line number10 index9 alt1">
10
</div>
<div class="line number11 index10 alt2">
11
</div>
<div class="line number12 index11 alt1">
12
</div>
<div class="line number13 index12 alt2">
13
</div>
<div class="line number14 index13 alt1">
14
</div>
<div class="line number15 index14 alt2">
15
</div>
<div class="line number16 index15 alt1">
16
</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
`buildscript {`
</div>
<div class="line number2 index1 alt1">
` ``repositories {`
</div>
<div class="line number3 index2 alt2">
` ``jcenter()`
</div>
<div class="line number4 index3 alt1">
` ``}`
</div>
<div class="line number5 index4 alt2">
` ``dependencies {`
</div>
<div class="line number6 index5 alt1">
` ``classpath ``'com.android.tools.build:gradle:1.0.0'`
</div>
<div class="line number7 index6 alt2">
` ``classpath ``'com.github.dcendents:android-maven-plugin:1.2'`
</div>
<div class="line number8 index7 alt1">
` ``// NOTE: Do not place your application dependencies here; they belong`
</div>
<div class="line number9 index8 alt2">
` ``// in the individual module build.gradle files`
</div>
<div class="line number10 index9 alt1">
` ``}`
</div>
<div class="line number11 index10 alt2">
`}`
</div>
<div class="line number12 index11 alt1">
`allprojects {`
</div>
<div class="line number13 index12 alt2">
` ``repositories {`
</div>
<div class="line number14 index13 alt1">
` ``jcenter()`
</div>
<div class="line number15 index14 alt2">
` ``}`
</div>
<div class="line number16 index15 alt1">
`}`
</div>
</div>
</td>
</tr>
</table>
然后在你需要发布的那个module(我这里的即是library)的build.gradle里配置如下内容: 1 <div class="line number2 index1 alt1">
2
</div>
<div class="line number3 index2 alt2">
3
</div>
<div class="line number4 index3 alt1">
4
</div>
<div class="line number5 index4 alt2">
5
</div>
<div class="line number6 index5 alt1">
6
</div>
<div class="line number7 index6 alt2">
7
</div>
<div class="line number8 index7 alt1">
8
</div>
<div class="line number9 index8 alt2">
9
</div>
<div class="line number10 index9 alt1">
10
</div>
<div class="line number11 index10 alt2">
11
</div>
<div class="line number12 index11 alt1">
12
</div>
<div class="line number13 index12 alt2">
13
</div>
<div class="line number14 index13 alt1">
14
</div>
<div class="line number15 index14 alt2">
15
</div>
<div class="line number16 index15 alt1">
16
</div>
<div class="line number17 index16 alt2">
17
</div>
<div class="line number18 index17 alt1">
18
</div>
<div class="line number19 index18 alt2">
19
</div>
<div class="line number20 index19 alt1">
20
</div>
<div class="line number21 index20 alt2">
21
</div>
<div class="line number22 index21 alt1">
22
</div>
<div class="line number23 index22 alt2">
23
</div>
<div class="line number24 index23 alt1">
24
</div>
<div class="line number25 index24 alt2">
25
</div>
<div class="line number26 index25 alt1">
26
</div>
<div class="line number27 index26 alt2">
27
</div>
<div class="line number28 index27 alt1">
28
</div>
<div class="line number29 index28 alt2">
29
</div>
<div class="line number30 index29 alt1">
30
</div>
<div class="line number31 index30 alt2">
31
</div>
<div class="line number32 index31 alt1">
32
</div>
<div class="line number33 index32 alt2">
33
</div>
<div class="line number34 index33 alt1">
34
</div>
<div class="line number35 index34 alt2">
35
</div>
<div class="line number36 index35 alt1">
36
</div>
<div class="line number37 index36 alt2">
37
</div>
<div class="line number38 index37 alt1">
38
</div>
<div class="line number39 index38 alt2">
39
</div>
<div class="line number40 index39 alt1">
40
</div>
<div class="line number41 index40 alt2">
41
</div>
<div class="line number42 index41 alt1">
42
</div>
<div class="line number43 index42 alt2">
43
</div>
<div class="line number44 index43 alt1">
44
</div>
<div class="line number45 index44 alt2">
45
</div>
<div class="line number46 index45 alt1">
46
</div>
<div class="line number47 index46 alt2">
47
</div>
<div class="line number48 index47 alt1">
48
</div>
<div class="line number49 index48 alt2">
49
</div>
<div class="line number50 index49 alt1">
50
</div>
<div class="line number51 index50 alt2">
51
</div>
<div class="line number52 index51 alt1">
52
</div>
<div class="line number53 index52 alt2">
53
</div>
<div class="line number54 index53 alt1">
54
</div>
<div class="line number55 index54 alt2">
55
</div>
<div class="line number56 index55 alt1">
56
</div>
<div class="line number57 index56 alt2">
57
</div>
<div class="line number58 index57 alt1">
58
</div>
<div class="line number59 index58 alt2">
59
</div>
<div class="line number60 index59 alt1">
60
</div>
<div class="line number61 index60 alt2">
61
</div>
<div class="line number62 index61 alt1">
62
</div>
<div class="line number63 index62 alt2">
63
</div>
<div class="line number64 index63 alt1">
64
</div>
<div class="line number65 index64 alt2">
65
</div>
<div class="line number66 index65 alt1">
66
</div>
<div class="line number67 index66 alt2">
67
</div>
<div class="line number68 index67 alt1">
68
</div>
<div class="line number69 index68 alt2">
69
</div>
<div class="line number70 index69 alt1">
70
</div>
<div class="line number71 index70 alt2">
71
</div>
<div class="line number72 index71 alt1">
72
</div>
<div class="line number73 index72 alt2">
73
</div>
<div class="line number74 index73 alt1">
74
</div>
<div class="line number75 index74 alt2">
75
</div>
<div class="line number76 index75 alt1">
76
</div>
<div class="line number77 index76 alt2">
77
</div>
<div class="line number78 index77 alt1">
78
</div>
<div class="line number79 index78 alt2">
79
</div>
<div class="line number80 index79 alt1">
80
</div>
<div class="line number81 index80 alt2">
81
</div>
<div class="line number82 index81 alt1">
82
</div>
<div class="line number83 index82 alt2">
83
</div>
<div class="line number84 index83 alt1">
84
</div>
<div class="line number85 index84 alt2">
85
</div>
<div class="line number86 index85 alt1">
86
</div>
<div class="line number87 index86 alt2">
87
</div>
<div class="line number88 index87 alt1">
88
</div>
<div class="line number89 index88 alt2">
89
</div>
<div class="line number90 index89 alt1">
90
</div>
<div class="line number91 index90 alt2">
91
</div>
<div class="line number92 index91 alt1">
92
</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
`apply plugin: ``'com.android.library'`
</div>
<div class="line number2 index1 alt1">
`apply plugin: ``'com.github.dcendents.android-maven'`
</div>
<div class="line number3 index2 alt2">
`apply plugin: ``'com.jfrog.bintray'`
</div>
<div class="line number4 index3 alt1">
`// This is the library version used when deploying the artifact`
</div>
<div class="line number5 index4 alt2">
`version = ``"1.0.0"`
</div>
<div class="line number6 index5 alt1">
`android {`
</div>
<div class="line number7 index6 alt2">
` ``compileSdkVersion 21`
</div>
<div class="line number8 index7 alt1">
` ``buildToolsVersion ``"21.1.2"`
</div>
<div class="line number9 index8 alt2">
` ``resourcePrefix ``"bounceprogressbar__"` `//这个随便填`
</div>
<div class="line number10 index9 alt1">
` ``defaultConfig {`
</div>
<div class="line number11 index10 alt2">
` ``minSdkVersion 9`
</div>
<div class="line number12 index11 alt1">
` ``targetSdkVersion 21`
</div>
<div class="line number13 index12 alt2">
` ``versionCode 1`
</div>
<div class="line number14 index13 alt1">
` ``versionName version`
</div>
<div class="line number15 index14 alt2">
` ``}`
</div>
<div class="line number16 index15 alt1">
` ``buildTypes {`
</div>
<div class="line number17 index16 alt2">
` ``release {`
</div>
<div class="line number18 index17 alt1">
` ``minifyEnabled ``false`
</div>
<div class="line number19 index18 alt2">
` ``proguardFiles getDefaultProguardFile(``'proguard-android.txt'``), ``'proguard-rules.pro'`
</div>
<div class="line number20 index19 alt1">
` ``}`
</div>
<div class="line number21 index20 alt2">
` ``}`
</div>
<div class="line number22 index21 alt1">
`}`
</div>
<div class="line number23 index22 alt2">
`dependencies {`
</div>
<div class="line number24 index23 alt1">
` ``compile fileTree(dir: ``'libs'``, include: [``'*.jar'``])`
</div>
<div class="line number25 index24 alt2">
` ``compile ``'com.nineoldandroids:library:2.4.0+'`
</div>
<div class="line number26 index25 alt1">
`}`
</div>
<div class="line number27 index26 alt2">
`def siteUrl = ``'<a href="https://github.com/zhengxiaopeng/BounceProgressBar">https://github.com/zhengxiaopeng/BounceProgressBar</a>'` `// 项目的主页`
</div>
<div class="line number28 index27 alt1">
`def gitUrl = ``'<a href="https://github.com/zhengxiaopeng/BounceProgressBar.git">https://github.com/zhengxiaopeng/BounceProgressBar.git</a>'` `// Git仓库的url`
</div>
<div class="line number29 index28 alt2">
`group = ``"org.rocko.bpb"` `// Maven Group ID for the artifact,一般填你唯一的包名`
</div>
<div class="line number30 index29 alt1">
`install {`
</div>
<div class="line number31 index30 alt2">
` ``repositories.mavenInstaller {`
</div>
<div class="line number32 index31 alt1">
` ``// This generates POM.xml with proper parameters`
</div>
<div class="line number33 index32 alt2">
` ``pom {`
</div>
<div class="line number34 index33 alt1">
` ``project {`
</div>
<div class="line number35 index34 alt2">
` ``packaging ``'aar'`
</div>
<div class="line number36 index35 alt1">
` ``// Add your description here`
</div>
<div class="line number37 index36 alt2">
` ``name ``'Android BounceProgressBar Widget'` `//项目描述`
</div>
<div class="line number38 index37 alt1">
` ``url siteUrl`
</div>
<div class="line number39 index38 alt2">
` ``// Set your license`
</div>
<div class="line number40 index39 alt1">
` ``licenses {`
</div>
<div class="line number41 index40 alt2">
` ``license {`
</div>
<div class="line number42 index41 alt1">
` ``name ``'The Apache Software License, Version 2.0'`
</div>
<div class="line number43 index42 alt2">
` ``url ``'<a href="http://www.apache.org/licenses/LICENSE-2.0.txt">http://www.apache.org/licenses/LICENSE-2.0.txt</a>'`
</div>
<div class="line number44 index43 alt1">
` ``}`
</div>
<div class="line number45 index44 alt2">
` ``}`
</div>
<div class="line number46 index45 alt1">
` ``developers {`
</div>
<div class="line number47 index46 alt2">
` ``developer {`
</div>
<div class="line number48 index47 alt1">
` ``id ``'zhengxiaopeng'` `//填写的一些基本信息`
</div>
<div class="line number49 index48 alt2">
` ``name ``'Rocko'`
</div>
<div class="line number50 index49 alt1">
` ``email ``'zhengxiaopeng.china@gmail.com'`
</div>
<div class="line number51 index50 alt2">
` ``}`
</div>
<div class="line number52 index51 alt1">
` ``}`
</div>
<div class="line number53 index52 alt2">
` ``scm {`
</div>
<div class="line number54 index53 alt1">
` ``connection gitUrl`
</div>
<div class="line number55 index54 alt2">
` ``developerConnection gitUrl`
</div>
<div class="line number56 index55 alt1">
` ``url siteUrl`
</div>
<div class="line number57 index56 alt2">
` ``}`
</div>
<div class="line number58 index57 alt1">
` ``}`
</div>
<div class="line number59 index58 alt2">
` ``}`
</div>
<div class="line number60 index59 alt1">
` ``}`
</div>
<div class="line number61 index60 alt2">
`}`
</div>
<div class="line number62 index61 alt1">
`task sourcesJar(type: Jar) {`
</div>
<div class="line number63 index62 alt2">
` ``from android.sourceSets.main.java.srcDirs`
</div>
<div class="line number64 index63 alt1">
` ``classifier = ``'sources'`
</div>
<div class="line number65 index64 alt2">
`}`
</div>
<div class="line number66 index65 alt1">
`task javadoc(type: Javadoc) {`
</div>
<div class="line number67 index66 alt2">
` ``source = android.sourceSets.main.java.srcDirs`
</div>
<div class="line number68 index67 alt1">
` ``classpath += project.files(android.getBootClasspath().join(File.pathSeparator))`
</div>
<div class="line number69 index68 alt2">
`}`
</div>
<div class="line number70 index69 alt1">
`task javadocJar(type: Jar, dependsOn: javadoc) {`
</div>
<div class="line number71 index70 alt2">
` ``classifier = ``'javadoc'`
</div>
<div class="line number72 index71 alt1">
` ``from javadoc.destinationDir`
</div>
<div class="line number73 index72 alt2">
`}`
</div>
<div class="line number74 index73 alt1">
`artifacts {`
</div>
<div class="line number75 index74 alt2">
` ``archives javadocJar`
</div>
<div class="line number76 index75 alt1">
` ``archives sourcesJar`
</div>
<div class="line number77 index76 alt2">
`}`
</div>
<div class="line number78 index77 alt1">
`Properties properties = ``new` `Properties()`
</div>
<div class="line number79 index78 alt2">
`properties.load(project.rootProject.file(``'local.properties'``).newDataInputStream())`
</div>
<div class="line number80 index79 alt1">
`bintray {`
</div>
<div class="line number81 index80 alt2">
` ``user = properties.getProperty(``"bintray.user"``)`
</div>
<div class="line number82 index81 alt1">
` ``key = properties.getProperty(``"bintray.apikey"``)`
</div>
<div class="line number83 index82 alt2">
` ``configurations = [``'archives'``]`
</div>
<div class="line number84 index83 alt1">
` ``pkg {`
</div>
<div class="line number85 index84 alt2">
` ``repo = ``"maven"`
</div>
<div class="line number86 index85 alt1">
` ``name = ``"BounceProgressBar"` `//发布到JCenter上的项目名字`
</div>
<div class="line number87 index86 alt2">
` ``websiteUrl = siteUrl`
</div>
<div class="line number88 index87 alt1">
` ``vcsUrl = gitUrl`
</div>
<div class="line number89 index88 alt2">
` ``licenses = [``"Apache-2.0"``]`
</div>
<div class="line number90 index89 alt1">
` ``publish = ``true`
</div>
<div class="line number91 index90 alt2">
` ``}`
</div>
<div class="line number92 index91 alt1">
`}`
</div>
</div>
</td>
</tr>
</table>
配置好上述后需要在你的项目的根目录上的local.properties文件里(一般这文件需gitignore,防止泄露账户信息)配置你的bintray账号信息,_your_user_name_为你的用户名,_your_apikey_为你的账户的apikey,可以点击进入你的账户信息里再点击Edit即有查看API Key的选项,把他复制下来。 1 <div class="line number2 index1 alt1">
2
</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
`bintray.user=your_user_name`
</div>
<div class="line number2 index1 alt1">
`bintray.apikey=your_apikey`
</div>
</div>
</td>
</tr>
</table>
Rebuild一下项目,顺利的话,就可以在module里的build文件夹里生成相关文件了。这一步为止,就可以把你项目生成到本地的仓库中了,Android Studio中默认即在Android\sdk\extras\android\m2repository这里,所以我们可以通过如下命令(Windows中,可能还需要下载一遍Gradle,之后就不需要了)执行生成: 1 | <td class="code">
<div class="container">
<div class="line number1 index0 alt2">
`gradlew install`
</div>
</div>
</td>
</tr>
</table>
上传到Bintray#上传到Bintray需要gradle-bintray-plugin的支持,所以在最外层的build.gradle里添加构建依赖: 1 <div class="line number2 index1 alt1">
2
</div>
<div class="line number3 index2 alt2">
3
</div>
<div class="line number4 index3 alt1">
4
</div>
<div class="line number5 index4 alt2">
5
</div>
<div class="line number6 index5 alt1">
6
</div>
<div class="line number7 index6 alt2">
7
</div>
<div class="line number8 index7 alt1">
8
</div>
<div class="line number9 index8 alt2">
9
</div>
<div class="line number10 index9 alt1">
10
</div>
<div class="line number11 index10 alt2">
11
</div>
<div class="line number12 index11 alt1">
12
</div>
<div class="line number13 index12 alt2">
13
</div>
<div class="line number14 index13 alt1">
14
</div>
<div class="line number15 index14 alt2">
15
</div>
<div class="line number16 index15 alt1">
16
</div>
<div class="line number17 index16 alt2">
17
</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
`buildscript {`
</div>
<div class="line number2 index1 alt1">
` ``repositories {`
</div>
<div class="line number3 index2 alt2">
` ``jcenter()`
</div>
<div class="line number4 index3 alt1">
` ``}`
</div>
<div class="line number5 index4 alt2">
` ``dependencies {`
</div>
<div class="line number6 index5 alt1">
` ``classpath ``'com.android.tools.build:gradle:1.0.0'`
</div>
<div class="line number7 index6 alt2">
` ``classpath ``'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'`
</div>
<div class="line number8 index7 alt1">
` ``classpath ``'com.github.dcendents:android-maven-plugin:1.2'`
</div>
<div class="line number9 index8 alt2">
` ``// NOTE: Do not place your application dependencies here; they belong`
</div>
<div class="line number10 index9 alt1">
` ``// in the individual module build.gradle files`
</div>
<div class="line number11 index10 alt2">
` ``}`
</div>
<div class="line number12 index11 alt1">
`}`
</div>
<div class="line number13 index12 alt2">
`allprojects {`
</div>
<div class="line number14 index13 alt1">
` ``repositories {`
</div>
<div class="line number15 index14 alt2">
` ``jcenter()`
</div>
<div class="line number16 index15 alt1">
` ``}`
</div>
<div class="line number17 index16 alt2">
`}`
</div>
</div>
</td>
</tr>
</table>
Rebuild一下,然后执行如下命令(Windows中)完成上传: 1 | <td class="code">
<div class="container">
<div class="line number1 index0 alt2">
`gradlew bintrayUpload`
</div>
</div>
</td>
</tr>
</table>
上传完成即可在Bintray网站上找到你的Repo,我们需要完成最后一步工作,申请你的Repo添加到JCenter。可以进入这个页面,输入你的项目名字点击匹配到的项目,然后写一写Comments再send即可,然后就等管理员批准了,我是大概等了40分钟,然后网站上会给你一条通过信息,然后就OK了,大功告成。 
成功后就可以在其它项目里方便的使用你发布的项目了: 1 <div class="line number2 index1 alt1">
2
</div>
<div class="line number3 index2 alt2">
3
</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
`dependencies {`
</div>
<div class="line number2 index1 alt1">
` ``compile ``'org.rocko.bpb:library:1.0.0'`
</div>
<div class="line number3 index2 alt2">
`}`
</div>
</div>
</td>
</tr>
</table>
End#
|
|
|
|
|
💬 评论