Skip to content

Repo清单格式

EastWoodYang edited this page Oct 23, 2019 · 5 revisions

repo清单描述了项目工程的组织结构以及内部模块的依赖关系。

目录


XML文件结构

清单XML文件大致符合DTD(文档类型定义)结构:

<!DOCTYPE manifest [
 <!ELEMENT manifest (default?,
                     project*,
                     module*)>

 <!ELEMENT default EMPTY>
 <!ATTLIST default fetch             CDATA #IMPLIED>
 <!ATTLIST default push              CDATA #IMPLIED>

 <!ELEMENT project (include*)>
 <!ATTLIST project origin            CDATA #IMPLIED>

 <!ELEMENT include EMPTY>
 <!ATTLIST include name              IDREF #REQUIRED>

 <!ELEMENT module (dependencies*)>
 <!ATTLIST module name               ID #REQUIRED>
 <!ATTLIST module branch             CDATA #IMPLIED>
 <!ATTLIST module origin             CDATA #IMPLIED>
 <!ATTLIST module path               CDATA #IMPLIED>
 <!ATTLIST module substitute         CDATA #IMPLIED>
 
 <!ELEMENT dependencies ANY>

]>

以下是各元素及其属性的介绍。

manifest 元素

文件的根元素。

default 元素

最多指定一个default元素。

fetch 属性: Git “fetch” URL的前缀,它将与project元素或module元素的origin拼接成用于“git clone”项目的实际URL地址。

push 属性: Git “push” URL的前缀,它将与project元素或module元素的origin拼接成用于“git push”项目的实际URL地址。该属性为可选项; 如果未指定,则“git push”将使用与fetch属性相同的URL。

project 元素

最多指定一个project元素。

project元素描述了根项目的远程Git仓库地址。根项目必须要有Gradle项目最基本的项目结构,且包含repo.xml

.
├── build.gradle
├── repo.xml
└── settings.gradle

其中settings.gradle和build.gradle应引用Gradle Repo相应的插件。

origin 属性: 远程Git仓库的URL。URL可采用相对地址的方式与default元素拼接成实际URL地址(e.g. ${fetch}/${origin}.git),也可直接配置完整的URL。

module 元素

可以指定一个或多个module元素。

每一个module元素代表了项目工程中的一个模块,用于描述该模块的远程Git仓库地址、使用的本地分支以及其他相关配置。

name 属性: 模块的名称,且唯一。模块的名称须与模块文件夹名称保持一致。

local 属性: 模块相对于根项目的路径。不可位于根项目路径之外。如果未指定,则默认位于根项目目录之下。模块对应的路径格式为${root_project}/${local}/${name}

origin 属性: 远程Git仓库的URL。URL可采用相对地址的方式与default元素拼接成实际URL地址(e.g. ${fetch}/${origin}.git),也可直接配置完整的URL。

branch 属性: Git 分支的名称。如果未指定,则与project分支保持一致。

substitute 属性: 被替换的依赖。具体查看 DependencySubstitutions:substitute

include 元素

可以指定一个或多个include元素。

定义哪些模块与根项目在同一个Git仓库。

name 属性: 取自module模块的name值。

dependencies 元素

最多指定一个dependencies元素。 用于声明模块间的依赖关系。

其子元素的节点名称取自 Gradle Dependency Configurations 中定义的值。比如:

<?xml version='1.0' encoding='UTF-8'?>  
<manifest>  
	...
    <module name="app">  
        <dependencies>  
            <api name="mylibrary2" />
            <debugApi name="mylibrary2" />
            <implementation name="mylibrary2" />
            ... 
        </dependencies>  
    </module>   
    ...
</manifest>

子元素 name属性: 取自module模块的name值。

repo-local.xml

位于根项目目录下($root_project/repo-local.xml)。在本地清单中只支持module元素和dependencies元素。比如:

<?xml version='1.0' encoding='UTF-8'?>  
<manifest>

    <module name="xxx">  
        <dependencies>  
            <implementation name="xxx" />  
        </dependencies>  
    </module>
    
    <module name="xxx" origin="xxx.git" />  
    
</manifest>