难以为现有存储库布局设置Gradle多项目构建
我正试图为我的项目布局已经由我决定的情况设计一个Gradle多项目构建。我有这样的想法:难以为现有存储库布局设置Gradle多项目构建,gradle,Gradle,我正试图为我的项目布局已经由我决定的情况设计一个Gradle多项目构建。我有这样的想法: -->Shared\ ---->SharedComponent1\ ------>build.gradle ------>src\ ... ---->SharedComponent2\ ------>build.gradle ... -->Product1\ ---->ProductComponent1\ ------>build.gradle ----
-->Shared\
---->SharedComponent1\
------>build.gradle
------>src\
...
---->SharedComponent2\
------>build.gradle
...
-->Product1\
---->ProductComponent1\
------>build.gradle
---->ProductComponent2\
------>build.gradle
...
---->build\
------>settings.gradle
rootProject.name = 'Product1'
rootProject.projectDir = new File( "${ProjectsRoot}" )
include 'Shared:SharedComponent1'
include 'Shared:SharedComponent2'
include 'Product1:ProductComponent1'
include 'Product1:ProductComponent2'
gradle -PProjectsRoot=c:\my\project\root\dir projects
My settings.gradle如下所示:
-->Shared\
---->SharedComponent1\
------>build.gradle
------>src\
...
---->SharedComponent2\
------>build.gradle
...
-->Product1\
---->ProductComponent1\
------>build.gradle
---->ProductComponent2\
------>build.gradle
...
---->build\
------>settings.gradle
rootProject.name = 'Product1'
rootProject.projectDir = new File( "${ProjectsRoot}" )
include 'Shared:SharedComponent1'
include 'Shared:SharedComponent2'
include 'Product1:ProductComponent1'
include 'Product1:ProductComponent2'
gradle -PProjectsRoot=c:\my\project\root\dir projects
当我在build文件夹中运行Gradle时,如下所示:
-->Shared\
---->SharedComponent1\
------>build.gradle
------>src\
...
---->SharedComponent2\
------>build.gradle
...
-->Product1\
---->ProductComponent1\
------>build.gradle
---->ProductComponent2\
------>build.gradle
...
---->build\
------>settings.gradle
rootProject.name = 'Product1'
rootProject.projectDir = new File( "${ProjectsRoot}" )
include 'Shared:SharedComponent1'
include 'Shared:SharedComponent2'
include 'Product1:ProductComponent1'
include 'Product1:ProductComponent2'
gradle -PProjectsRoot=c:\my\project\root\dir projects
我得到:
:projects
------------------------------------------------------------
Root project
------------------------------------------------------------
Root project 'build'
No sub-projects
To see a list of the tasks of a project, run gradle <project-path>:tasks
For example, try running gradle :tasks
BUILD SUCCESSFUL
:项目
------------------------------------------------------------
根项目
------------------------------------------------------------
根项目“生成”
无子项目
要查看项目的任务列表,请运行gradle:tasks
例如,尝试运行gradle:tasks
建设成功
i、 e.它找不到我试图构建的项目。
我想用Gradle的多项目支持做的事情可能吗?还是我找错树了?几点提示:
- Gradle严格地将逻辑项目层次结构(Gradle将构建组织成项目逻辑层次结构的方式)与物理目录布局分开。几乎任何映射都是可能的。(我想到的一个例外是,不能让两个项目共享同一个项目目录。)
- 要实现自定义目录布局,您必须为所有项目设置
,而不仅仅是根项目。您应该使用相对路径,例如projectDir
和rootProject.projectDir=new File(settingsDir,../foo”)
。这里,project(“:sub1”).projectDir=new File(rootDir,“bar”)
指的是包含settingsDir
的目录,settings.gradle
是rootDir
的缩写rootProject.projectDir
- 要以常规方式配置项目,可以递归遍历
。请注意,(根)Project.children
和settings.gradle
分别使用不同的类型来表示项目和build.gradle
- 必须从包含
的目录或其子目录调用Gradle。因此,从可用性的角度来看,最好将settings.Gradle
放入目录层次结构的根目录中settings.gradle
有关更多信息,请参阅和《Gradle用户指南》中的章节。有关完整性,解决上述特定示例的
设置.Gradle
如下所示:
rootProject.name = 'Product1'
def projectTreeRootDir = new File( "${ProjectsRoot}" )
// Shared components
def sharedRootDir = new File( projectTreeRootDir, 'Shared' )
include ':SharedComponent1'
project( ':SharedComponent1' ).projectDir = new File( sharedRootDir, 'SharedComponent1' )
include ':SharedComponent2'
project( ':SharedComponent2' ).projectDir = new File( sharedRootDir, 'SharedComponent2' )
// Product components
includeFlat 'ProductComponent1', 'ProductComponent2'
显然,这并不能扩展到大量的子项目,使用上面Peter提供的提示可以做得更好。太好了,Peter,谢谢。这就解决了我对它的工作原理的一大堆误解。我将在下面发布另一个答案,展示最后一个对我有用的例子,以防其他人在同一领域遇到困难。很高兴它有所帮助。更正:根据文档,设置脚本中还提供了一个带有-P的属性集。我已经相应地编辑了我的答案。有一件事帮了我很大的忙,那就是认识到settings.gradle应该只存在于根项目中。下面是一个适用于gradle2.2.1但不适用于android studio 1.0.2的工作示例: