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

vir*_*sir 39 java eclipse android gradle maven

我将把我的Android项目从Ant转换为Gradle.

我的Eclipse工作区非常简单:

Workspace
     MyApp
     MyApp-AndroidLibrary
Run Code Online (Sandbox Code Playgroud)

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

apply plugin: 'android'

dependencies {
     compile fileTree(dir: 'libs', include: '*.jar')
     compile project(':MyApp-AndroidLibrary')
}
Run Code Online (Sandbox Code Playgroud)

当我运行gradle构建时,出现错误"带路径的项目':在根项目中找不到MyApp-AndroidLibrary",我搜索了这个,发现我需要在工作空间中设置"settings.gradle"文件目录,添加

include ":MyApp"
include ":MyApp-AndroidLibrary"
Run Code Online (Sandbox Code Playgroud)

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

究竟是什么include意思?如果我在工作区中有anotoher应用程序和其他一些共享库,结构可能如下所示:

Workspace
     App1
     App2
     Library1(Used by App1 & App2)
     Library2(Used only by App1)
     Library3(Used only by App2)
Run Code Online (Sandbox Code Playgroud)

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

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

对此有何评论?

Pet*_*ser 14

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

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

有关更多信息,请查看Gradle用户指南,尤其是有关多项目构建的章节.

  • 只是想知道为什么他们决定在settings.gradle的*单独的*文件?为什么不把这些信息也放在build.gradle中?也许在设置{...}部分左右......是否有技术原因? (8认同)
  • `settings.gradle`中的信息告诉Gradle哪些子项目是此构建的一部分,它们的逻辑和物理路径是什么,它们的构建脚本是如何命名的等等.它不会,也不能告诉Gradle子项目之间的依赖关系是. (6认同)
  • 我仍然不确定为什么没有默认行为(与大多数情况下的目录结构匹配),这会使很多用例更简单. (2认同)