Android Studio 教你5分钟搭建和使用Maven仓库
前言
由于公司项目众多,又都依赖相同的lib,导致lib有变动所有的被依赖者都需要重新导入,很繁琐。而用Maven管理最好不过了。
初识
我们都知道,Android Studio导入jar包非常方便,一行代码搞定
dependencies {
compile'com.facebook.fresco:fresco:1.0.1'
}
相信大家对该种写法一定不陌生,这里用到的就是Maven(仓库)概念。
定义
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。简单来说管理jar包的
创建Maven项目
新建一个android library,这个module就是要提供给别人的。在build.gradle
添加如下:
apply plugin: 'maven'
uploadArchives {
repositories.mavenDeployer {
repository(url: LOCAL_REPO_URL)
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = VERSION
}
}
gradle.properties文件配置属性
#MAVEN需要的配置
GROUP=com.test.android
POM_ARTIFACT_ID=testUI
VERSION=1.0.0
//这里 指定生成的Maven路径
LOCAL_REPO_URL=file:///Users/caojiaming/StudioProjects/maven/
点一下 同步 (Sync Project with Gradle Files)
在Android Studio 右侧的Gradle Projects 如图
![](https://img.haomeiwen.com/i6756253/cd04a6d4ae6e9916.jpeg)
一切正常的话会在gradle.properties
的LOCAL_REPO_URL
看到生成的文件,如图
![](https://img.haomeiwen.com/i6756253/48c6990249b27ea7.png)
至此本地已经发布成功,可以看到默认生成的是aar。接下来看一下如何引用
在需要此依赖的项目里build.gradle里添加
repositories {
maven {
url 'file:///Users/caojiaming/StudioProjects/maven/'
}
}
dependencies {
compile 'com.test.android:testUI:1.0.0'
}
有的gradle版本需要在版本后追加@aar(笔者没有遇到过)
dependencies {
compile 'com.test.android:testUI:1.0.0@aar'
}
compile的生成规则在前面配置的gradle.properties
的GROUP
、POM_ARTIFACT_ID
、VERSION
共同决定
以上都是在本地仓库玩的。但实际这并没什么用,至少你要发布到服务器上才会有切合实际的用处。这里先说一下发布到私有服务器上的步骤。
Nexus的搭建
什么是Nexus:Nexus Repository Manager是一个需要Java运行时环境的Java应用程序。运行Nexus Repository Manager时,您正在运行带有基于Web的用户界面的服务器应用程序。该应用程序本身与Eclipse Jetty servlet容器和Apache Karaf OSGi容器一起运行。更详细的介绍请参阅官方文档
下载地址:https://www.sonatype.com/download-oss-sonatype
启动Nexus服务
打开终端命令行依次输入
cd /Users/caojiaming/StudioProjects/nexus-3.3.2-02-mac/nexus-3.3.2-02/bin
(懒得配置环境变量)
./nexus start
你会看到Starting nexus
提示,证明服务已经启动
浏览器输入:http://localhost:8081
![](https://img.haomeiwen.com/i6756253/5d500685994323e8.jpeg)
点击Sigin in
账号:admin 密码admin123
![](https://img.haomeiwen.com/i6756253/52eff33e9ac3446b.jpeg)
然后按照上图操作copy远程库的地址,稍后会用到
重新配置 gradle.properties
RELEASE_URL=http://127.0.0.1:8081/repository/maven-releases/
SNAPSHOT_URL=http://127.0.0.1:8081/repository/maven-snapshots/
NAME=admin
PASSWORD=admin123
还记得刚刚点击的copy吗,替换文中的地址即可。
在library module新建maven_push.gradle
apply plugin: 'maven'
apply plugin: 'signing'
configurations {
deployerJars
}
repositories {
mavenCentral()
}
// 判断版本是Release or Snapshots
def isReleaseBuild() {
return !VERSION.contains("SNAPSHOT");
}
// 获取仓库url
def getRepositoryUrl() {
return isReleaseBuild() ? RELEASE_URL : SNAPSHOT_URL;
}
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment {
MavenDeployment deployment -> signing.signPom(deployment)
}
pom.version = VERSION
pom.artifactId = POM_ARTIFACT_ID
pom.groupId = GROUP
repository(url: getRepositoryUrl()) {
authentication(userName: NAME, password: PASSWORD) // maven授权信息
}
}
}
}
// 进行数字签名
signing {
// 当 发布版本 & 存在"uploadArchives"任务时,才执行
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}
在build.gradle
开头添加
apply from: 'maven_push.gradle'
Gradle任务窗口再次点击
![](https://img.haomeiwen.com/i6756253/cd04a6d4ae6e9916.jpeg)
打开nexus查看上传文件
![](https://img.haomeiwen.com/i6756253/fe484d6de21ff720.jpeg)
如何引用
之前提到过本地maven,替换url即可
repositories {
maven {
url 'file:///Users/caojiaming/StudioProjects/maven/'
}
}
替换后
repositories {
maven {
url 'http://127.0.0.1:8081/repository/maven-releases/'
}
}
compile无需改变,因为GROUP
、POM_ARTIFACT_ID
、VERSION
均无变化
到此全部工作完成。
附录:工作流程(画的不好你打我啊!)
![](https://img.haomeiwen.com/i6756253/654740819e62e7d2.jpeg)
如果有任何问题,欢迎留言吐槽。