写点什么

Android 团队怎样搭建自己的开发仓库

发布于: 2021 年 05 月 09 日
Android团队怎样搭建自己的开发仓库

在前边组件化开发的相关文章中,我们提到了开发中我们可以把一些共有的功能库比如网络库、图片加载库、工具库等等提取封装后,作为基础(library)库来使用,这些库提取出来之后,要怎么使用呢?还需要每个开发人员把源码文件导入使用,显然这样的方式并不方便,而且不利于基础库的维护,那么我们能不能像依赖其他第三方库那样用 gradle 从仓库下载呢?答案是肯定的。我们可以搭建公司团队自己的 Maven 私有仓库。


Maven 的远程仓库分为中央仓库和私服仓库。中央仓库存放了世界各地用户上传的依赖包,比较出名的是 JCenter 和 Maven Central,开源的第三方依赖一般都会上传到这两个中央仓库,这样我们只用添加这两个中央仓库的链接地址,就可以下载各种我们需要的依赖了。在公司内部,搭建一个 Maven 仓库,可以上传平常开发中常用的开发库或者封装的代码,把公司内部不想开源的依赖包上传到私服仓库中,有更好保密性、安全性和统一性。


通过建立团队自己的开发仓库,可以统一开发人员的编码规范,统一开发框架,统一一些功能的使用等等,方便团队管理,也利于团队人员的相互配合等等。


下面根据我通过 Sonatypec 的 Nexus 创建 Maven 私有仓库做一些介绍,供大家参考...

使用 Nexus 搭建 Maven 私有仓库

下载运行 Nexus

去 Sonatypec 官网 下载软件包, 根据你的操作系统选择下载,这里以 windows 操作系统为例。



下载完成之后,我们解压压缩包到一个文件夹下(例如:D:\nexus-3.24.0-02-win64),里面包含 nexus-3.24.0-02 和 sonatype-work



然后进入到 D:\nexus-3.24.0-02-win64\nexus-3.24.0-02\bin 目录中



软件没有图形安装界面,我们需要进入命令行运行 nexus.exe



在安装 Nexus 前,请确保系统已经安装了 JDK1.8 及以上的 java 环境


然后可以用 nexus.exe /run 命令启动 Nexus:



使用 run 命令可以直接启动 Nexus,这样启动 Nexus 并没有将它安装到 windows 服务中,虽然简单,但是如果服务器重启,那么就需要人为干预。在当前命令行窗口中按住 CTRL-C 就可以关闭 Nexus。我们放在局域网服务器上,当服务器因为一些原因重启时,需要人工干预,显然是不太符合我们的要求的。


我们可以使用 nexus.exe /install nexus 命令,将 Nexus 安装到 windows 服务中,然后设置成自动启动,就可以在服务器重启后,自动启动私服了。


注意:运行该命令需要以管理员身份运行 cmd 命令行窗口(即在 windows 附件中,找到命令提示符->右键->以管理员身份运行)




这样就可以在 windows 服务中看到已经安装的 nexus 服务



这里我们可以启动/关闭服务,也可以设置服务是自动/手动



安装 nexus 服务成功并启动后,我们就可以访问 nexus 了。

访问 nexus

服务启动后就可以通过浏览器访问,默认端口为 8081,可以通过服务器 IP 加端口号直接访问(http://<server_host>:8081)



默认账号为 admin,密码为 admin123。登录之后我们可以在用户中心修改密码。

maven 仓库类型

maven 仓库类型只有 3 中,分别是: hosted、proxy、group


  • hosted:宿主类型 内部项目的发布仓库,专门用来存储我们自己生成的 jar 文件,aar 文件。我们自己上传的开发库,就是上传到该类型下的仓库中。

  • proxy:代理类型 从远程中央仓库中寻找数据的仓库,如可配置阿里云 maven 仓库。

  • group:组类型 Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库。简单来说: group = hosted+proxy



如上图所示,maven-public 就是默认创建的组仓库。

版本类型

  • release:专用于部署发布版本的 jar 或 aar,对应 maven-release 宿主仓库。

  • snapshot:专用于部署快照版本的 jar 或 aar,都是以-SNAPSHOT 结尾,pom 中 version 需以-SNAPSHOT(必须大写)结尾,对应 maven-snapshot 仓库。

  • mixed:可包含 release 和 snapshot 版本

权限管理

数据权限:repository 权限有两种类型:


  • repository admin

  • repository view 每种类型又有 5 种权限标识,分别是:add,browse、delete、edit、read。 可以根据需要进行账户配置。

上传 library 库到仓库

我们在本地开发,封装后开发库之后,怎么上传到仓库呢,这里以一个简单的例子为例。我在本地新建了一个 Autobio_Android 的 Android 工程,这里我们再新建一个 Android Library 的 module(名字为 utilcode),这个模块就是我们封装开发完后要上传到仓库中,供其他人使用的 library 库,或者 aar 文件。



要上传到仓库,还是利用 gradle 自动化构建的一些东西。

一、在工程的 gradle.properties 文件中,配置需要使用全局信息


如上图所示,我们可以配置 maven-releases 仓库(一般是存放开发比较成熟稳定的库)的地址和 maven-snapshots 仓库(一般存放处于开发阶段的,可能会随时更改的库)的地址;还有 NEXUS 的用户名和密码;一般一个公司一个团队的 groupId 都是一样的,所以这里也配置一下 GROUP_ID。


GROUP_ID:比如我们依赖第三方库 implementation 'io.reactivex.rxjava2:rxjava:2.1.12',这个 rxjava 库的 GROUP_ID 就是 io.reactivex.rxjava2,我们添加依赖库就是:GROUP_ID:artifactId:版本号。

二、在要上传的 library 模块的 build.gradle 文件中添加配置上传代码

这里为了整洁性,就把这部分代码单独提出来,在 utilcode 模块下新建一个 upload_nexus.gradle 的 gradle 文件,具体代码如下:


apply plugin: 'maven'
afterEvaluate { project ->
uploadArchives { repositories { mavenDeployer { snapshotRepository(url: MAVEN_SNAPSHOT_URL) { authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD) }
repository(url: MAVEN_URL) { authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD) }
pom.project { version '0.0.2-SNAPSHOT' groupId GROUP_ID artifactId 'util-code' packaging 'aar' description 'dependences lib' } } } } task androidJavadocs(type: Javadoc) { source = android.sourceSets.main.java.srcDirs classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) } task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { classifier = 'javadoc' from androidJavadocs.destinationDir } task androidSourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.sourceFiles }
//解决 JavaDoc 中文注释生成失败的问题 tasks.withType(Javadoc) { options.addStringOption('Xdoclint:none', '-quiet') options.addStringOption('encoding', 'UTF-8') options.addStringOption('charSet', 'UTF-8') } artifacts { archives androidSourcesJar archives androidJavadocsJar }}
复制代码



upload_nexus.gradle 编写完之后,我们把该文件引入 utilcode 模块的 build.gradle 中,如下图所示:


三、上传 library 开发库模块

配置已经完成,打开 Android Studio 中打开右侧的 Gradle 侧边栏,打开 这个 module library,可以看到 uploadArchives,这就是刚才创建的上传 Task,点击即可完成上传



如果 uploadArchives Task 执行成功,在 Nexus 仓库中就可以看到上传的内容了。点击左侧导航栏 Browse - maven-snapshot 就可以看到我们上传的开发库了,如下图所示:


在项目中使用上传的开发库

上传到仓库中了之后,我们在项目中如何使用呢?,他的使用和我们添加依赖使用第三方库是一样的。

一、项目根路径的 build.gradle 添加仓库地址

二、在应用模块 app 的 build.gradle 中添加开发库地址


用户头像

还未添加个人签名 2020.10.09 加入

Android领域,打工人

评论

发布
暂无评论
Android团队怎样搭建自己的开发仓库