为什么我必须为同一个依赖项指定'runtime'和'compile'?

Mat*_*ias 13 configuration dependency-management gradle

我依赖于编译和运行我的应用程序所需的一些工件.

根据Gradle文档,运行时配置扩展了编译配置,因此使用runtime隐含compile依赖项确定添加依赖关系?

至少这是我的假设,但它不起作用.当仅依赖于使用的工件时runtime,我的项目不再编译.我真的必须:

compile 'oauth.signpost:signpost-core:1.2.1.2'
runtime 'oauth.signpost:signpost-core:1.2.1.2'
Run Code Online (Sandbox Code Playgroud)

为应用程序编译在运行时查看Signpost类.

我错过了什么吗?那看起来不对......

Nik*_*sov 21

几乎是正确的.实际上,运行时配置扩展了编译配置(docs).这意味着,在运行时配置(docs)中可以使用添加到编译配置的任何依赖项.

compile 'oauth.signpost:signpost-core:1.2.1.2' 将足以在运行时和编译中获得此工件.

  • 哦,我想我现在明白了.我认为我的错误是我认为配置是"行为"而不是"设置"."延伸"这个词让我感到困惑.在这里扩展实际上意味着"超集".因此,如果我向`compile`添加一些内容,那么依赖于`runtime`的任何东西都可以看到它,因为它是`compile`的超集.因此,使用`compile`配置的任何任务都不会看到只向运行时添加内容.那有意义吗? (8认同)
  • 我明白了 - 多奇怪.只是想了解它是如何工作的.查看http://www.gradle.org/0.9.1/docs/userguide/userguide_single.html#sec:java_plugin_and_dependency_management,这是否意味着图20.2中的任何配置都是具有入站箭头的所有配置的组合?考虑到经典"继承"方式中的"延伸",人们会假设相反. (2认同)
  • 这也是我的想法,但是通过遵循相同的逻辑,`runtime`将包括`compile`配置,反之亦然.这与你在答案中所说的完全相反! (2认同)