发布开源库到JCenter

JCenter简介

Maven是专门用于构建和管理Java相关项目的工具。Java世界中主要有三大构建工具:Ant、Maven和Gradle。经过这几年的发展,Ant差不多已经销声匿迹、Maven差不多也快黄了,而Gradle现在可是如日中天。

Jcenter是由JFrog公司提供的Bintray中的Java仓库。它是当前世界上最大的Java和Android开源软件构件仓库。所有内容都通过内容分发网络(CDN)使用加密https连接获取。Jcenter是Goovy Grape内的默认仓库,Gradle内建支持jcenter()仓库,Jcenter也非常易于在其他构建工具内进行配置。JCenter相比Maven Center构件更多,性能也更好。

  • 下载更快(JCenter通过CDN发送library)
  • 仓库更大更全(JCenter是全世界最大的Java仓库)
  • 操作更简单,界面更友好(上传Library傻瓜式操作)
  • 一键上传到 Maven Central(可直接通过JCenter把项目同步到Maven Central,避免了Maven Central难度大的问题)

Bintray账号

需要注册一个Bintray账号。

官网(企业):https://bintray.com/
个人:https://bintray.com/signup/oss

说明一下,一定要点击个人这个链接,官网的注册链接只能注册企业用户

创建Maven仓库

TypeMavenDefault LicensesApache-2.0协议,Description是项目描述

注意:Name可以写项目名或者其他含义的名字,之后配置需要用到这个Name

配置build.gradle

builde.grade(Project:project)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
buildscript {
repositories {
jcenter()
}
//dependencies表明项目依赖对应版本的Gradle构建工具
dependencies {
classpath 'com.android.tools.build:gradle:3.6.3'

//加上这两行
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5'
}
}

allprojects {
repositories {
jcenter()
}
}

至于最新版本号,大家可以去官网自行更改

builde.grade(Module:XXX)

添加apply plugin

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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//apply plugin表明应用的插件的类型,
apply plugin: 'com.android.library'

//添加这两行
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
android {
compileSdkVersion 26

lintOptions {
abortOnError false
}

defaultConfig {
minSdkVersion 16
targetSdkVersion 26
versionCode 1
versionName "1.0"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}

//项目主页
def siteUrl = 'https://github.com/shishaoyan/FireworksView'
//项目的git地址
def gitUrl = 'https://github.com/shishaoyan/FireworksView.git'
//发布到JCenter上的项目名字
def libName = "FireworksView"

//发布到组织名称名字,必须填写
//(cn.appblog.fireworkstextview)这样写是不好的,项目名会拼上去
//我手欠然后最后就是这样了,大家引以为戒
//compile 'cn.appblog.fireworkstextview:fireworkstextview:1.0.0'
group = "cn.appblog"
// 版本号,下次更新是只需要更改版本号即可
version = "1.0.0"
//上面配置后上传至JCenter后的编译路径是这样的: compile 'me.songning.CircleView:library:1.0.0'

//生成源文件
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}

//生成Javadoc文档
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

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

//拷贝javadoc文件
task copyDoc(type: Copy) {
from "${buildDir}/docs/"
into "docs"
}

//上传到JCenter所需要的源码文件
artifacts {
archives javadocJar
archives sourcesJar
}

//配置maven库,生成POM.xml文件
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
//项目描述,随意填
name 'Input text with fireworks.'
url siteUrl
licenses {
license {
//开源协议
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
//开发者的个人信息
id 'yezhou'
name 'Joe.Ye'
email 'yezhou@gmail.com'
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}

//上传到JCenter
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

bintray {
user = properties.getProperty("bintray.user") //读取 local.properties 文件里面的 bintray.user
key = properties.getProperty("bintray.apikey") //读取 local.properties 文件里面的 bintray.apikey
configurations = ['archives']
pkg {
//注意:这里的repo值必须要和你创建Maven仓库的时候的名字一样
repo = "ssy"
//发布到JCenter上的项目名字
name = libName
//项目描述
desc = 'Input text with fireworks'
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}

javadoc {
options{
//如果你的项目里面有中文注释的话,必须将格式设置为UTF-8,不然会出现乱码
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
}
}

local.properties

将user和key写到这个文件之中。

1
2
3
4
5
ndk.dir=/Users/shishaoyan/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/shishaoyan/Library/Android/sdk
##下面这两个
bintray.apikey=96020ddcf836**********c8e78568e9cf99a68
bintray.user=yezhou

用户API Key获取方法:

Jcenter控制台用户基本信息中心 -> 点击Edit -> API Key

执行命令

(1)打开Android Studio底部工具栏的Terminal,输入命令:

Windows:

1
gradlew install

Mac:

1
./gradlew install

BUILD SUCCESSFUL说明执行成功。

(2)上传到Bintray

Windows:

1
gradlew bintrayUpload

Mac:

1
./gradlew bintrayUpload

如果因为网络的原因失败,科学上网即可。

Add to JCenter

上传成功后,点击我们的Respository,可以看到刚刚上传的库,再点进去,左下角发现我们想要的依赖脚本:

1
compile 'cn.appblog:fireworkstextview:1.0.0'

先别急着引用,库还没有发布呢?点击右边的Add to JCenter按钮,再直接点击Send发送即可,发布成功后才可使用

需要等待几个小时审核,也可能是一两天,因为时差的原因和别的原因都可能导致慢一些

库的命名规范

1
2
3
4
5
//这两个都可以使用,但是存在命名规范的问题
//前缀 cn.appblog.fireworkstextview 多余的失误
compile 'cn.appblog.fireworkstextview:fireworkstextview:1.0.0'
//Library命名单词错误的失误
compile 'cn.appblog:fireworkstextview:1.0.0'

不知道大家有没有发现一个错误:fireworkstextview这个单词是创建项目的时候打错的,本来应该是FireworksView

我们在配置的时候并没有再出现这个词而是用的FireworksView,那么从这个错误中我们会知道,冒号后面的名字是项目名字。我们设置libName作用的地方如下图所示。而不是我们冒号后的名字。所以命名一定要一致。

1
2
//发布到JCenter上的项目名字
def libName = "FireworksView"

从GitHub导入发布

终于把步骤全部走完了。我们感觉貌似有点麻烦啊。有没有另外一种方式呢?答案是有的。

1、新建一个仓库

2、可以看到Import from GitHub(前提是已经关联Github账号)直接可以引用Public的项目,私有的是需要Bintray账号付费升级的

3、选择我们的项目

4、点击Add to JCenter发布,报错

1
Failed to send a message: Empty packages are not allowed in JCenter.

这是因为我们只是import了github的项目信息,真正需要的四个文件并没有别上传,所以我们需要把这四个文件上传,也就是我们之前配置所生成的文件。具体文档:https://www.jfrog.com/confluence/display/BT/Manually+Uploading+Files+to+a+Version

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
//生成源文件
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}

//生成Javadoc文档
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

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

// 配置maven库,生成POM.xml文件
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
//项目描述,随意填
name 'Input text with fireworks.'
url siteUrl
licenses {
license {
//开源协议
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
//开发者的个人信息
id 'yezhou'
name 'Joe.Ye'
email 'yezhou@gmail.com'
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}

5、创建一个新的版本号

6、上传相关文件

Target Repository Path cn.appblog.fireworkstextview/1.0.0
Attached Files fireworkstextview-1.0.0.pom
fireworkstextview-1.0.0.aar
fireworkstextview-1.0.0-sources.jar
fireworkstextview-1.0.0-javadoc.jar

7、然后就有了Maven build setting就可以Add to JCenter

总结

1、全代码配置,一劳永逸,其实也没有那么麻烦,每行代码都有它的含义,以后别的项目再用的话只需要修改变的地方即可,别的地方都可以复用。

2、手动界面操作,github导入,在一定程度上减少了代码的配置,但是还是需要配置生成文件的代码,不过有很多坑,需要看帮助文档才能趟过去。

从坑少的角度来看,还是方案一:全代码配置。减少了错误的发生和一些莫名其妙的问题,虽然手动界面操作很直观,但是坑不少。

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :