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

时间:2014-01-05 07:51:06

标签: java android eclipse maven 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”,我用Google搜索,发现我需要设置“settings.gradle”文件在我的工作区目录中,添加

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

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

include的真正含义是什么?如果我在工作区中有anotoher应用程序和其他一些共享库,该结构可能如下所示:

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呢?

对此有何评论?

2 个答案:

答案 0 :(得分:13)

你问了几个不同的问题。以下是一些提示:

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

有关更多信息,请查看Gradle User Guide,尤其是有关多项目构建的章节。

答案 1 :(得分:0)

以防万一(像我自己或者很开心的人)仍然遇到这个问题但无法找到解决方案。使用当前版本的Gradle,您可以执行此操作:

将文件settings.gradle移至目录My-App,并将include替换为includeFlat 'MyApp-AndroidLibrary'。这应该可以解决问题。

同时比较this question并参阅Gradle用户指南中的this section以获取更多详细信息。