为什么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.gradle
configuration。 不需要移动目录,除非你想。 - 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用户指南”中的这一部分 ,了解更多细节。
- Android:将search查询返回到当前活动
- LocationRequest setInterval(long millis)和LocationRequest setFastestInterval(long millis)之间的区别
- 有没有办法确定以厘米或英寸的Android物理屏幕高度?
- 完全禁用Android应用程序中的LogCat输出?
- 在onReceive BroadcastReceiver中启动Activity
- Android:点击生成随机颜色?
- android – 如何设置评分栏是不可点击和触摸HTC手机
- AdapterView的onItemClickListener和OnItemSelectedListener之间的区别
- 如何垂直alignment文本?