Gradle Repo:一个能管理多个Git仓库,又能快速切换分支的Gradle插件

栏目: 编程工具 · 发布时间: 6年前

内容简介:项目组件化过程中,会根据App框架、业务情况划分出各个独立的模块。通常把各个模块的代码管理分开,各自有独立Git仓库。 这样有个好处是可以按需clone部分模块的代码,再组装成一个可运行的工程。比如,业务组的同学开发某个Feature的时候,只需clone业务层部分模块的代码,不需要中间层、基础层方面的模块代码(业务层模块引用中间层、基础层模块打包上传Maven的aar)。但在实际操作中产生的问题:Gradle Repo是基于Gradle写的一个插件,用于管理多个Git仓库,支持方便快捷的切换分支。在根项

项目组件化过程中,会根据App框架、业务情况划分出各个独立的模块。通常把各个模块的代码管理分开,各自有独立Git仓库。 这样有个好处是可以按需clone部分模块的代码,再组装成一个可运行的工程。比如,业务组的同学开发某个Feature的时候,只需clone业务层部分模块的代码,不需要中间层、基础层方面的模块代码(业务层模块引用中间层、基础层模块打包上传Maven的aar)。

但在实际操作中产生的问题:

  • 创建创建工程初期,怎么方便的clone各个Git仓库 ?手动一个一个clone显然不合适。

  • 在工程目录结构中,各模块势必会处在根项目中,怎么避免在提交根项目时把各模块也提交了?使用 git submodule ?

Gradle Repo:一个能管理多个Git仓库,又能快速切换分支的Gradle插件
  • 如何从Feature A分支切换到Feature B分支 ?Android Studio 提供了Common branch的切换功能。但不同分支对应的模块不一时,是无法顺利切换过去的。
Gradle Repo:一个能管理多个Git仓库,又能快速切换分支的Gradle插件

介绍 Gradle Repo

Gradle Repo是基于Gradle写的一个插件,用于管理多个Git仓库,支持方便快捷的切换分支。在根项目中会有一份配置清单repo.xml,用于描述模块来源、工程结构以及依赖关系。

主要做了三件事情:

  • 从各个远程仓库clone代码到指定目录路径下。通过Git的exclude而不是submodule。
  • 动态include模块,并模块间的依赖关系。
  • 切换至指定分支。

使用方式

  1. 分别在根项目 settings.gradlebuild.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'
  2. 在根项目下创建一个repo.xml配置清单。例如:

    Gradle Repo:一个能管理多个Git仓库,又能快速切换分支的Gradle插件

Repo 配置清单

repo.xml 样例

<?xml version='1.0' encoding='UTF-8'?>
<manifest>
 
    <project origin="https://github.com/EastWoodYang/gradle-repo.git"
        branch="master" >
 
        <include name="mylibrary3"/>
 
    </project>
 
    <module name="app" origin="./gradle-repo-app.git">
        <dependencies>
            <api name="mylibrary2"/>
            <implementation name="mylibrary"/>
            <apiDebug name="mylibrary"/>
        </dependencies>
    </module>
 
    <module name="mylibrary" origin="https://github.com/EastWoodYang/gradle-repo-mylibrary.git"/>
 
    <module name="mylibrary2" origin="./gradle-repo-mylibrary2.git"/>
 
    <module name="mylibrary3" />
 
</manifest>

project 节点

必须且只有一个project节点,用于描述根项目。

origin
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仓库操作。

Gradle Repo:一个能管理多个Git仓库,又能快速切换分支的Gradle插件
Gradle Repo:一个能管理多个Git仓库,又能快速切换分支的Gradle插件

常见问题

是不是不需要在settings.gradle中include模块了 ?

是的,插件会自动include模块。

怎么切换到其他Feature分支?

只需修改一下repo.xml project 中的branch,然后同步一下即可。
 注意!修改前确保代码已经commit或stash。尽量不要使用Android Studio右下角那个Git分支管理工具。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

XML Hacks

XML Hacks

Michael Fitzgerald / O'Reilly Media, Inc. / 2004-07-27 / USD 24.95

Developers and system administrators alike are uncovering the true power of XML, the Extensible Markup Language that enables data to be sent over the Internet from one computer platform to another or ......一起来看看 《XML Hacks》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具