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

问题

Gradletransitive = true究竟是什么?从577711786尚不清楚。这是在compilewithinbuild.gradle的背景下。在我的情况下,我依赖于Android的崩溃。

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

几个Gradle文档(here和4118115544)暗示"传递"默认为true。然而,删除了未传入的传递依赖关系的transitive = true结果(特别是KitGroup)。

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

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

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

编辑:RelatedTransitive dependencies not resolved for aar library using gradle


#1 热门回答(99 赞)

你正在使用@aarnotation。
这意味着你只想下载aar工件,而不是依赖项。
你可以查看documentation的这一部分:
检查1.4.1.2. Artifact only notation部分:

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

如果要下载依赖项,请使用@aarnotation,你应该添加transitive=true

我希望省略@aar它应该工作而不添加传递属性。


#2 热门回答(5 赞)

我的猜测是你手动引用的Crashlytics工件将依赖项指定为不敏感(transitive=false),这样你就不会被迫默认带来这些依赖项。这就是为什么你会看到相反的行为。例如,一些开发人员可能不想提供所有Google Play服务或Crashlytics可能使用的任何其他内容。

因此,通过删除它,Gradle不再引入依赖项,并且无法构建。如果需要,你可以手动指定该依赖项。

话虽这么说 - 我认为手头上更大的问题是你不应该直接引用Crashlytics神器 - 你应该使用Fabric,并因此拉入Crashlytics:https://dev.twitter.com/fabric/android/integrating


#3 热门回答(1 赞)

设置是否应解析此依赖关系,包括或排除其传递依赖关系。属于此依赖项的工件可能会依赖于其他工件。后者称为传递依赖。