前言
提到Maven,Java开发者再熟悉不过了,它是一款依赖管理、用于构建的工具。在Android Studio里面,gradle支持jcenter()、mavenCentral() ,新版本的Android Studio默认使用jcenter()。AS团队从对开发者的友好程度上选择了jcenter。然而,很多中大型企业在内部搭建了Maven的私有仓库,为企业内部的开发人员提供便捷的包管理服务。
jcenter:https://bintray.com/
Sonatype MavenCentral:https://issues.sonatype.org/secure/Dashboard.jspa
可能是因为国内墙的原因,尝试在Jcenter上发布包,未果,总体上体验还不是那么尽如人意。
在AS里面,打开Project的build.gradle,可以看到默认使用的是jcenter如下:
buildscript {
repositories {
jcenter()
}
}
allprojects {
repositories {
jcenter()
}
}
配置Library
私有Maven地址:https://maven.bingosoft.net
创建一个Library工程,例如bingosso-client。我们的目标是将该工程开发出的包提交到Maven。
接下来,打开Module对应的build.gradle文件,增加如下配置:
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
snapshotRepository(url: MAVEN_REPO_SNAPSHOT_URL) {
authentication(userName:MAVEN_USERNAME, password: MAVEN_PASSWORD)
}
repository(url: MAVEN_REPO_RELEASE_URL) {
authentication(userName:MAVEN_USERNAME, password: MAVEN_PASSWORD)
}
pom.project {
version '0.1.0'
artifactId 'bingosso-client'
groupId 'com.bingo.sso.android'
packaging 'aar'
description 'bingosso for android platform'
}
}
}
}
从上面的配置,可以看出,build.gradle是通过uploadArchives这个节点的配置来对接Maven仓库的。上面用到的一些变量配置在gradle.properties里面:
#Maven仓库的URL
MAVEN_REPO_RELEASE_URL=https://maven.bingosoft.net/content/repositories/releases/
MAVEN_REPO_SNAPSHOT_URL=https://maven.bingosoft.net/content/repositories/snapshots/
#Maven用户名
MAVEN_USERNAME=xxxx
#登录nexus oss的密码
MAVEN_PASSWORD=xxxx123
关于snapshot和release
Maven中的仓库分为两种,snapshot快照仓库和release发布仓库。snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。定义一个组件/模块为快照版本,只需要在pom文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写)。在Android Studio中,无需直接面对pom文件,在AS中是自动生成的,只需要设置上面的version即可(例如1.2.0-SNAPSHOT)
执行uploadArchives
打开Android Studio左边的Gradle选项卡,双击uploadArchives即可:
之后会看到如下现象:
上传过程中遇到的问题
在执行上面的过程中可能会遇到问题,例如SSL的安全问题等。已经记录在此:http://blog.youkuaiyun.com/seafishyls/article/details/56846225
Gradle使用私有仓库的包
打开需要引用该仓库的Project对应的build.gradle,如下设置:
allprojects {
repositories {
jcenter()
maven{
url 'https://maven.bingosoft.net/content/repositories/releases/'
}
}
}
再打开Module对应的build.gradle,增加如下配置:
dependencies {
compile 'com.bingo.sso.android:bingosso-client:0.1.0'
}
发布SNAPSHOT
发布snapshot(快照),顾名思义,它是经常变动的,或者叫做hotfix,使用者在同步的时候可以随时拿到最新的改动(release无法拿到拿到最新改动的代码)。发布快照只需要对版本号做处理:
version '0.1.0-SNAPSHOT' //注意必须是大写,否则发布不成功
同时,需要在引用的build.gradle里面添加如下配置:
configurations.all {
resolutionStrategy.cacheChangingModulesFor 1, 'minutes'
}
引用的时候就变成这样:
dependencies {
compile 'com.bingo.sso.android:bingosso-client:0.1.0-SNAPSHOT'
}
整个过程还算比较顺利,有不对的地方欢迎指正!