在Gradle中,transitive = true究竟做了什么(w.r.t. crashlytics)?

Gradle到底做了什么?从Gradle文档中看不出来。这是在 的上下文中。在我的情况下,我依赖于Android的crashlytics。transitive = truecompilebuild.gradle

compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') {
    transitive = true;
}

几个 Gradle 文档(此处此处)暗示“可传递”默认为 true。然而,删除会导致传递依赖关系不被引入(特别是)。transitive = trueKitGroup

class file for io.fabric.sdk.android.KitGroup not found

文档说它默认为true,但实际行为似乎恰恰相反。

我正在运行 Gradle 2.2.1。也许行为在2.2和2.4之间发生了变化?

编辑使用 gradle 为 aar 库解析的相关传递依赖关系


答案 1

您正在使用表示法。
这意味着您只想下载项目,而不下载可传递依赖项。@aaraar

您可以在官方文档中的 Gradle 中查看依赖关系管理。特别:

仅项目表示法创建模块依赖项,该依赖项仅下载具有指定扩展名的项目文件。现有的模块描述符将被忽略

如果要下载依赖项,请使用表示法,则应添加@aartransitive=true

我希望省略@aar它应该可以在不添加传递属性的情况下工作。


答案 2

更一般地说:在库上进行设置会导致 gradle 忽略(=“瞬态库”)所需的所有库,并且不下载和链接它们。transitive = falsecrashlyticscrashlytics

您必须手动将所需的库添加到项目中,或者依赖于其他依赖项添加的其他瞬态库。

gradle 的默认值为 。transitive = true

此处的示例和完整说明:http://www.devsbedevin.net/android-understanding-gradle-dependencies-and-resolving-conflicts/


推荐