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 如图

《Android Studio 教你5分钟搭建和使用Maven仓库》 637C25F6-14B9-4806-87C0-AD168C58C9FA.jpeg

一切正常的话会在gradle.propertiesLOCAL_REPO_URL看到生成的文件,如图

《Android Studio 教你5分钟搭建和使用Maven仓库》 B1EBC676-E11D-46F2-B078-AF02DFCF3168.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.propertiesGROUPPOM_ARTIFACT_IDVERSION共同决定

以上都是在本地仓库玩的。但实际这并没什么用,至少你要发布到服务器上才会有切合实际的用处。这里先说一下发布到私有服务器上的步骤。

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

《Android Studio 教你5分钟搭建和使用Maven仓库》 5C400B43-7CC5-4E20-B8BB-2F9E411819AF.jpeg

点击Sigin in
账号:admin 密码admin123

《Android Studio 教你5分钟搭建和使用Maven仓库》 DDEF1D41-F74F-4133-95CE-F93523AAF9B8.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任务窗口再次点击

《Android Studio 教你5分钟搭建和使用Maven仓库》 637C25F6-14B9-4806-87C0-AD168C58C9FA.jpeg

打开nexus查看上传文件

《Android Studio 教你5分钟搭建和使用Maven仓库》 BDC9765A-4897-4D2A-A210-A232C21E34B9.jpeg

如何引用

之前提到过本地maven,替换url即可

repositories {
    maven {
        url 'file:///Users/caojiaming/StudioProjects/maven/'
    }
}

替换后

repositories {
    maven {
        url 'http://127.0.0.1:8081/repository/maven-releases/'
    }
}

compile无需改变,因为GROUPPOM_ARTIFACT_IDVERSION均无变化
到此全部工作完成。

附录:工作流程(画的不好你打我啊!)

《Android Studio 教你5分钟搭建和使用Maven仓库》

如果有任何问题,欢迎留言吐槽。

参考连接:
Android Studio上传项目到Maven仓库
Maven私有仓库搭建和使用

    原文作者:CaoJiaming
    原文地址: https://www.jianshu.com/p/d6f6aec8903c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞