Gradle transitive = true
究竟做了什么?从Gradle documentation不清楚 . 这是在 build.gradle
中的 compile
的上下文中 . 在我的情况下,我'm depending Android'的崩溃 .
compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') {
transitive = true;
}
几个Gradle文档(here和here)暗示"transitive"默认为true . 然而,删除 transitive = true
导致传递的依赖性没有被引入(特别是 KitGroup
) .
class file for io.fabric.sdk.android.KitGroup not found
文档说它默认为true,但实际行为似乎正好相反 .
我正在运行Gradle 2.2.1 . 也许2.2和2.4之间的行为发生了变化?
Edit :相关Transitive dependencies not resolved for aar library using gradle
6 回答
您正在使用
@aar
表示法 .这意味着您只想下载aar工件,而不是依赖项 .
你可以查看documentation的这一部分:
检查
1.4.1.2. Artifact only notation
部分:如果要下载依赖项,请使用
@aar
表示法,添加transitive=true
.我希望省略@aar它应该工作而不添加传递属性 .
我的猜测是你手动引用的Crashlytics工件将依赖关系指定为不可传递(
transitive=false
),这样你就不会看到相反的行为了 . 例如,一些开发者可能不想提供所有Google Play服务或Crashlytics可能使用的任何其他内容 .因此,通过删除它,Gradle不再引入依赖项,并且无法构建 . 如果需要,您可以手动指定该依赖项 .
话虽这么说 - 我认为手头上更大的问题是你不应该直接引用Crashlytics神器 - 你应该使用Fabric,并因此拉入Crashlytics:https://dev.twitter.com/fabric/android/integrating
更一般地说:在
crashlytics
库上设置transitive = false
会导致gradle忽略crashlytics
(= "transient libraries")所需的所有库,而不会下载和链接它们 .您必须手动将所需的库添加到项目中,或者依赖其他依赖项添加的其他临时库 .
gradle的默认值为
transitive = true
.示例和完整说明:http://www.devsbedevin.com/android-understanding-gradle-dependencies-and-resolving-conflicts/
设置是否应解析此依赖项,包括或排除其传递依赖项 . 属于此依赖项的工件可能会依赖于其他工件 . 后者称为传递依赖 .
Gradle默认遵循传递依赖 . 如果要为特定库关闭它,请使用传递标志 .
将transitive标志的值更改为false可防止下载传递依赖项,因此您必须自己添加所需的任何内容 . 如果您只需要一个模块jar,而没有任何其他依赖项,那么您也可以指定它 .
transitive
控制传递性 . Gradle通常默认为可传递,除非它没有传递性和分类器的错误,请参阅https://issues.gradle.org/browse/GRADLE-3188 .