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

2022-09-01 02:44:45

我将把我的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构建时,有一个错误“在根项目中找不到路径为':MyApp-AndroidLibrary'的项目”,我为此进行了谷歌搜索,发现我需要在我的工作区目录中设置一个“settings.gradle”文件,以添加

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

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

这到底意味着什么?如果我在工作区中有anotoher应用程序和其他一些共享库,则结构可能如下所示:include

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

因为只有一个 settings.gradle 文件,所以我不得不将它们全部添加到 settings.gradle 中。这闻起来并不好闻。

是的,我可以重新组织结构,使库 2 成为 App1 的子目录,将库 3 作为 App2 的子目录,但是库 1 呢?

对此有何评论?


答案 1

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

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

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


答案 2

以防万一人们(如我自己或格拉德曼)仍然有这个问题,找不到解决方案。使用当前版本的 Gradle,您可以执行以下操作:

将文件移动到该目录,并将 替换为 。这应该可以解决问题。settings.gradleMy-AppincludeincludeFlat 'MyApp-AndroidLibrary'

还要比较此问题,并查看 Gradle 用户指南中的此部分,了解更多详细信息。


推荐