一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。
在写文章之前先吊书袋子了一下,告诉大家软件设计中的低耦合,所以我们会把一个个模块分开,模块之前相互独立,即插即用,这个书袋子吊的还可以吧。

所以maven在一个大型系统是经常见到的,如各个模块做成独立的压缩文件如jar,放在服务器上,所有需要的都可以直接DownLoad到本地,拿来用,这是一种很爽的体验吧。
所以Maven使我们解决依赖的一种最常用的方法,当然了你也可以通过maven来构建项目。但是这不是我们的重点,我们要讲的是对于android开发者如何上传自己的项目到JCenter(一个供程序员玩耍的Maven仓库),世界上所有的程序员都可以通过JCenter上传自己的项目或者下载别人的项目来使用。
 | 准备工作
注册
JCenter作为一个规模相当大的中心仓库,我们需要到https://bintray.com/#,去注册的账号,若你有账号跳过这一步。注册一般通过邮箱验证,试下登录是否注册成功。
获取API key
 注册完成后我们需要查看自己的key,进入到https://bintray.com/profile/edit,看到有个API KEY输入密码就可以见到,下面会用到这个key。
认识GAV
为了确定你的包唯一,我们使用GAV来保证,如下面的配置:
| 12
 3
 4
 5
 
 | <dependency>    <groupId>org.apache.struts</groupId>
 <artifactId>struts2-core</artifactId>
 <version>2.0.11</version>
 </dependency>
 
 | 
groupId 是你的Group的唯一标示
artifactId  你的项目名称
version   项目的版本    
所以你要确定自己的groupId和artifactId。
配置gradle上传maven的配置
在更项目的build.gradle添加如下几句:
| 12
 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
 
 |  dependencies {……
 classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
 classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
 ……
 }
 ```
 
 
 ### 准备脚本和配置
 新建一个发布到Jcenter的gradle脚本到你的library,这个脚本是单独处理和JCenter上传的操作
 
 
 bintray.gradle文件
 ```apply plugin: 'com.github.dcendents.android-maven'
 apply plugin: 'com.jfrog.bintray'
 
 Properties properties = new Properties()
 properties.load(project.file('bintray.properties').newDataInputStream())
 def siteUrl = properties.getProperty("bintray.siteUrl")
 
 def desc = properties.getProperty("bintray.descrip")
 
 
 group = properties.getProperty("bintray.group")
 version = properties.getProperty("bintray.version")
 
 def giturl = properties.getProperty("bintray.vcs")
 def userid = properties.getProperty("bintray.userid")
 def username = properties.getProperty("bintray.username")
 def useremail = properties.getProperty("bintray.useremail")
 
 def licensename = properties.getProperty("bintray.licensename")
 def licenseurl = properties.getProperty("bintray.licenseurl")
 install {
 repositories.mavenInstaller {
 
 pom {
 project {
 packaging 'aar'
 
 name desc
 
 url siteUrl
 
 licenses {
 license {
 name licensename
 url licenseurl
 }
 }
 
 developers {
 developer {
 id userid
 name username
 email useremail
 }
 }
 scm {
 connection giturl
 developerConnection giturl
 url siteUrl
 }
 }
 }
 }
 }
 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 sourcesJar
 
 }
 bintray {
 user = properties.getProperty("bintray.user")
 key = properties.getProperty("bintray.key")
 configurations = ['archives']
 pkg {
 repo = "maven"
 name = properties.getProperty("bintray.name")
 websiteUrl = properties.getProperty("bintray.siteUrl")
 vcsUrl = properties.getProperty("bintray.vcs")
 licenses =[properties.getProperty("bintray.licenses")]
 publish = true
 
 }
 }
 
 | 
你看到的那些bintray.licenses都是我们需要新建另外一个配置文件的:
bintray.properties文件
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | bintray.key= #填写刚才获取[API key](#apikey)中的keybintray.user=#填写刚才登录时的昵称
 
 bintray.userid=
 bintray.username=#需要显示在maven中的作者昵称
 bintray.useremail=#需要显示在maven中的作者邮箱
 
 bintray.licensename=The Apache Software License, Version 2.0
 bintray.licenseurl=http:
 
 bintray.group=#项目的groupId
 bintray.name=#项目名称
 bintray.version=#项目版本号
 bintray.siteUrl=#项目的对应网站
 bintray.vcs=#项目的地址如githun等代码托管的链接
 bintray.licenses=#开源协议如mit等
 bintray.descrip=项目描述
 `
 
 | 
准备妥当了,需要把gradle脚本放到你的libray的build.gradle,因为项目执行会去执行build.gradle,我们把刚才的bintray.gradle
apply from: “bintray.gradle”
整个项目结构我们可以这么看
library
–main
   –java
–build.gradle 在结尾记得加apply from: “bintray.gradle”
–bintray.gradle
–bintray.properties
上传
./gradlew clean bintrayUpload
这样就可以上传到jcenter上,去你的jcenter账号下看看有没有文件上传成功吧。
申请同步到jcenter
会看到左侧使我们可以使用的GAV

右侧是我们需要自己填写同步到jcenter的,否则只是私有库不能直接通过jcenter访问。