摘要:通常把各个模块的代码管理分开,各自有独立仓库。介绍是基于写的一个插件,用于管理多个仓库,支持方便快捷的切换分支。切换至指定分支。使用方式分别在根项目和引用对应的插件在根项目下创建一个配置清单。模块的远程仓库,支持相对路径。
背景和问题
项目组件化过程中,会根据App框架、业务情况划分出各个独立的模块。通常把各个模块的代码管理分开,各自有独立Git仓库。
这样有个好处是可以按需clone部分模块的代码,再组装成一个可运行的工程。比如,业务组的同学开发某个Feature的时候,只需clone业务层部分模块的代码,不需要中间层、基础层方面的模块代码(业务层模块引用中间层、基础层模块打包上传Maven的aar)。
但在实际操作中产生的问题:
创建创建工程初期,怎么方便的clone各个Git仓库 ?手动一个一个clone显然不合适。
在工程目录结构中,各模块势必会处在根项目中,怎么避免在提交根项目时把各模块也提交了?使用 git submodule ?
如何从Feature A分支切换到Feature B分支 ?Android Studio 提供了Common branch的切换功能。但不同分支对应的模块不一时,是无法顺利切换过去的。
Gradle Repo是基于Gradle写的一个插件,用于管理多个Git仓库,支持方便快捷的切换分支。在根项目中会有一份配置清单repo.xml,用于描述模块来源、工程结构以及依赖关系。
主要做了三件事情:
从各个远程仓库clone代码到指定目录路径下。通过Git的exclude而不是submodule。
动态include模块,并模块间的依赖关系。
切换至指定分支。
使用方式
分别在根项目settings.gradle和build.gradle引用gradle-repo对应的插件
settings.gradle: buildscript { ... dependencies { classpath "com.eastwood.tools.plugins:gradle-repo:1.0.0" } } apply plugin: "gradle-repo-settings" build.gradle: buildscript { ... dependencies { classpath "com.eastwood.tools.plugins:gradle-repo:1.0.0" } } apply plugin: "gradle-repo-build"
在根项目下创建一个repo.xml配置清单。例如:
Repo 配置清单 repo.xml 样例project 节点
必须且只有一个project节点,用于描述根项目。
origin : 远程Git仓库URL
branch: 分支名称
module 节点可以定义多个module节点,每个module表示一个具有独立Git仓库的模块。
name: 模块名称,目录名称需一致且唯一;必须项。
local: 相对于根项目的路径,clone的路径为 root project / local / name,缺省时路径为 root project / name。
origin: 模块的远程Git仓库URL,支持相对路径。
branch: 模块分支名称。缺省时,同project节点的branch。
include 节点是project的子节点,可以定义多个include节点。用于表示哪些模块和根项目同一个git仓库。
name: 模块名称
dependencies 节点是module的子节点,可以定义多个dependencies节点。仅用于描述模块于模块之间的依赖关系。
其子节点的名称需和 Gradle Dependency Configurations 中定义的一致。
name: 模块名称
Android Studio 插件 Gradle Repo方便对repo.xml修改后进行sync和绑定远程git仓库操作。
常见问题是不是不需要在settings.gradle中include模块了 ?
是的,插件会自动include模块。
怎么切换到其他Feature分支?
只需修改一下repo.xml project 中的branch,然后同步一下即可。 注意!修改前确保代码已经commit或stash。尽量不要使用Android Studio右下角那个Git分支管理工具。结语
项目已经上传至GIthub,可直接clone体验一下,打开时会自动clone其他两个模块。
欢迎star交流,Github 项目地址:https://github.com/EastWoodYang/Gradle-Repo
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/14270.html
摘要:是该的版本号,我们来看看如何申明依赖上述的代码是基于语法的,所以其完整的表述应该是这样的为你的仓库预定义为了方便,会默认预定义三个仓库和以及本地仓库。第二行,我们告诉,我们想得到最新的版本,并且其最小的版本号是第三行,我们告诉得到最新的。 这一系列暂不更新,相关技术讨论,请移步微信群,谢谢,希望大家多多支持! showImg(https://segmentfault.com/img/b...
摘要:持续集成正是针对这一类问题的一种软件开发实践。持续集成的原则业界普遍认同的持续集成的原则包括需要版本控制软件保障团队成员提交的代码不会导致集成失败。 第一集 hudson+gradle+git+maven(非必选)持续集成编译,打包,发布到仓库集成 前言 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的...
摘要:你可以这样指定版本号来引用的替换为你的分支名例如刷新缓存注意会缓存内容,所以有时候你可能无法获取某个分支上的最新。可以通过插件来帮助你管理你的版本号如果你尚未有任何关于如何进行命名的概念的话。支持动态版本号。所以你可以使用这样的版本号。 JitPack.io 是一个 GitHub 开源代码库的便捷发布渠道。它可以让你的 Android/Java 代码库自动完成发布,从而令使用者能够最便...
摘要:源码下载概要是为了方便管理多个库而开发的脚本。源码包含数百个库,仅仅是下载这么多库就是一项繁重的任务,所以在下载源码时,就引入了。并不会直接将改动合并后远程的库,而是需要先得到批准。查看改动内容决定是否批准合入代码的操作,都是通过完成。 源码下载 概要 repo是Android为了方便管理多个git库而开发的Python脚本。repo的出现,并非为了取代git,而是为了让Android...
摘要:创建一个新的项目由于本人已经不使用,所以肯定是使用。使用编译脚本使用了大神开发的脚本,大神是等流行开源库的作者。所以建议尽量不要依赖,或者参考最后面两个建议的做法。 由于本人精力有限,如果内容有更新可能无法及时更新其他渠道的内容,请移步简书 查看文章 2014年中的时候,当时国内使用 Android Studio 的人还没有很多,很多人还没处理尝鲜的时候我开始把公司的项目迁移到 And...
阅读 3117·2021-11-24 09:39
阅读 1668·2021-11-17 09:33
阅读 549·2021-10-13 09:39
阅读 3051·2021-10-12 10:12
阅读 3389·2021-09-23 11:20
阅读 4627·2021-09-22 15:51
阅读 985·2019-08-30 13:11
阅读 3465·2019-08-30 10:59