【问题标题】:Why do I have to specify both 'runtime' and 'compile' for the same dependency?为什么我必须为同一个依赖项同时指定“运行时”和“编译”?
【发布时间】:2011-06-09 06:33:27
【问题描述】:

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

根据 Gradle 文档,运行时配置扩展编译配置,因此使用 runtime 添加依赖项肯定意味着隐含的 compile 依赖项?

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

compile 'oauth.signpost:signpost-core:1.2.1.2'
runtime 'oauth.signpost:signpost-core:1.2.1.2'

要让应用程序同时编译,请在运行时查看 Signpost 类。

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

【问题讨论】:

    标签: configuration dependency-management gradle


    【解决方案1】:

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

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

    【讨论】:

    • 我明白了——多么奇怪。只是想了解这是如何工作的。看看gradle.org/0.9.1/docs/userguide/…,这是否意味着图 20.2 中的任何配置都是具有入站箭头的所有配置的组合?以经典的“继承”方式考虑“扩展”,人们会假设相反。
    • 在用户指南图 20.2 中,任何配置都是所有 outbound 路径的组合,例如testRuntime 包括来自runtimecompile 的所有内容,因为出站箭头显示testRuntime 扩展了runtime
    • 我也是这么想的,但是按照同样的逻辑,runtime 将包含compile 配置,反之亦然。这与您在回答中所说的完全相反!
    • 哦,我想我现在明白了。我认为我的错误是我将配置视为“行为”而不是“集合”。 “延伸”这个词让我感到困惑。在这里扩展实际上意味着“超集”。因此,如果我向compile 添加一些内容,那么它也将对依赖runtime 的任何内容可见,因为它是compile 的超集。因此,仅向运行时添加某些内容对于使用 compile 配置的任何任务都是不可见的。这有意义吗?
    • 太好了,你明白了!也许,我的回答不够清楚)
    猜你喜欢
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多