为什么Gradle需要一个settings.gradle文件?

我要将我的Android项目从Ant转换为Gradle。

我的Eclipse工作区非常简单:

Workspace MyApp MyApp-AndroidLibrary 

当我在MyApp中添加build.gradle文件时,我想引用我的Android库项目:

 apply plugin: 'android' dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile project(':MyApp-AndroidLibrary') } 

当我运行gradle构build时,出现了一个错误“Project with path”:MyApp-AndroidLibrary'在根项目中找不到',我为此search了一下,发现我需要在我的工作区中设置一个“settings.gradle”文件目录,添加

 include ":MyApp" include ":MyApp-AndroidLibrary" 

这看起来对我来说太糟糕了,为什么Gradle需要一个settings.gradle文件 ,为什么不提取我在依赖关系中定义的项目呢?

什么include真正的手段? 如果我在工作区中安装了附加应用程序和其他共享库,结构可能如下所示:

 Workspace App1 App2 Library1(Used by App1 & App2) Library2(Used only by App1) Library3(Used only by App2) 

因为只有一个settings.gradle文件,我不得不将它们全部添加到settings.gradle中。 那味道不好。

是的,我可以重新组织结构,使Library2成为App1的子目录,而Library3成为App2的子目录,但是Library1呢?

对此有何评论?

你在问几个不同的问题。 这里有一些提示:

  • ':MyApp-AndroidLibrary'是一个逻辑项目path,根据settings.gradle提供的信息映射到物理path。
  • 多项目构build可以具有任意的目录结构,在settings.gradleconfiguration。 不需要移动目录,除非你想。
  • Eclipse工作区和Gradle构build是分离的边界。 您可以在同一工作区中有多个版本。
  • 使用从源代码构build的库时,可以将它们作为相同构build的一部分,也可以为它们单独构build。 在后一种情况下,您需要确保在应用程序之前构build库,并通过Maven或Ivy存储库交换工件。 这可以使用CI服务器和公司的Maven / Ivy存储库自动执行。 或者,您可以在您的机器上手动触发库的构build,并使用本地Maven / Ivy存储库。

有关更多信息,请查看Gradle用户指南 ,特别是关于多项目构build的章节。

以防万一(像我自己或高兴的人)仍然有这个问题,找不到解决scheme。 使用当前版本的Gradle,你可以这样做:

将文件settings.gradle移动到My-App目录,并用includeFlat 'MyApp-AndroidLibrary'replaceinclude 。 这应该解决这个问题。

还要比较这个问题,并参见“Gradle用户指南”中的这一部分 ,了解更多细节。