由于公司项目多,且都依赖于一个公共Library,导致Library有变动所有的被依赖者都需要重新修改、构建,很繁琐。而用Maven管理,只需添加如下的一行代码到模块的build.gradle文件中,就可以轻松解决问题了。
//adnroid 3.0以下使用compile,3.0及其以上可以使用api/implementation
//api/implementation的区别可以自行百度
dependencies {
implementation 'com.android.library:lib:+'
}
以下为笔者本地配置,用的是Mac系统
配置Nexus
-
下载Nexus 官网地址
笔者下载的是 nexus-2.14.8-01-bundle版本 -
解压后,即可以在安装目录下看到两个文件夹,主要是Nexus运行环境和存储Library。上传的Library会存放在下图storage下对应的文件夹中。
-
命令行cd到nexus-2.14.8-01-bundle/bin目录下,使用命令
nexus start
启动Nexus。
-
如果启动成功,打开网页,访问 http://localhost:8081/nexus/
默认用户名admin,密码admin123 -
登陆后,在左侧边栏点击
Repositories
。点击Add
,选择Hosted Repository
添加私有仓库。
-
填写自己的
Repository ID
,Repository Name
,把Deploymen Policy
勾选为Allow Redeploy
,然后其他默认就可以,点击保存。
然后在列表中就可以找到我们的库在本地的地址http://localhost:8081/nexus/content/repositories/lib/
,这个地址在后面会用到
配置Gradle
- 在需要发布的模块下新建一个
nexus_maven_push.gradle
,与build.gradle
同层级
-
nexus_maven_push.gradle
中主要配置的内容有:url
,authentication
以及pom.project
里面的信息
apply plugin: 'maven'
configurations {
deployerJars
}
repositories {
mavenCentral()
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: "http://localhost:8081/nexus/content/repositories/lib/") {
authentication(userName: "admin", password: "admin123")
}
pom.project {
name 'test'
version '1.0.0'
artifactId 'lib'
groupId 'com.android.library'
packaging 'aar'
description 'library for android'
}
}
}
}
- 在该模块下的
build.gradle
文件最后,添加
apply from: 'nexus_maven.gradle'
-
在项目同步之后,就可以上传了
选择uploadArchives,如果项目没有什么问题的话,则会提示BUILD SUCCESSFUL。
刷新网页,可以看到Library已经成功上传
Library使用
- 在项目的
build.gradle
里面声明私服的地址:
allprojects {
repositories {
maven {
url 'http://localhost:8081/nexus/content/repositories/lib/'
}
jcenter()
google()
}
}
- 在需要使用该模块的
build.gradle
文件中,添加项目依赖。
dependencies {
implementation 'com.android.library:lib:+'
}
使用+
是为了同步时,都会获取到最新的版本。当然固定版本号也是可以的。
dependencies {
implementation 'com.android.library:lib:1.0.0'
}
- 这里的组成和提交的
pom.project
的信息有关。
注意:上传所用Android Studio的Gradle版本,需要与下载所用的一致。
关于Gradle缓存
在执行过一次Gradle的同步之后,Gradle会把对应的Library的文件下载在本地,之后会直接使用。所以当我们删除旧的Library,用同样的pom.project信息重新上传一个新的Library时,执行Gradle同步,并不会更新最新的Library下来。这个时候可以到仓库存储路径下把对应的Library文件删除。
一般来说,
Mac系统默认下载到:/Users/(用户名)/.gradle/caches/modules-2/files-2.1
Windows系统默认下载到:C:\Users(用户名).gradle\caches\modules-2\files-2.1