问题
Gradletransitive = true
究竟是什么?从577711786尚不清楚。这是在compile
withinbuild.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 赞)
你正在使用@aar
notation。
这意味着你只想下载aar工件,而不是依赖项。
你可以查看documentation的这一部分:
检查1.4.1.2. Artifact only notation
部分:
仅工件表示法创建模块依赖项,该依赖项仅下载具有指定扩展名的工件文件。忽略现有模块描述符。
如果要下载依赖项,请使用@aar
notation,你应该添加transitive=true
。
我希望省略@aar它应该工作而不添加传递属性。
#2 热门回答(5 赞)
我的猜测是你手动引用的Crashlytics工件将依赖项指定为不敏感(transitive=false
),这样你就不会被迫默认带来这些依赖项。这就是为什么你会看到相反的行为。例如,一些开发人员可能不想提供所有Google Play服务或Crashlytics可能使用的任何其他内容。
因此,通过删除它,Gradle不再引入依赖项,并且无法构建。如果需要,你可以手动指定该依赖项。
话虽这么说 - 我认为手头上更大的问题是你不应该直接引用Crashlytics神器 - 你应该使用Fabric,并因此拉入Crashlytics:https://dev.twitter.com/fabric/android/integrating
#3 热门回答(1 赞)
设置是否应解析此依赖关系,包括或排除其传递依赖关系。属于此依赖项的工件可能会依赖于其他工件。后者称为传递依赖。