【问题标题】:Setting a configuration that lives as a parent of the compile configuration in Gradle在 Gradle 中设置作为编译配置的父级的配置
【发布时间】:2014-02-22 02:28:35
【问题描述】:

我为我的插件添加了自定义配置

Configuration customCompile = project.configurations.create("customCompile")
        .setVisible(false).setTransitive(true)

我想做类似的事情

configuration.compile.addExtendsFrom(customCompile)

所以在我的插件中,我可以隔离某些依赖项以添加到我正在运行的东西的类路径中(使用`project.configurations.customCompile)。我希望它们也保留在常规编译路径上。

我做的是这样的:

Configuration compile = project.configurations.getByName('compile')
Set updated = WrapUtil.asSet(compile.getExtendsFrom()) // returns a immutable set
updated.add(customCompile)
compile.setExtendsFrom(updated)

它有效,但感觉有点复杂,extendsFrom 似乎与我习惯于使用 java 类的继承含义相反。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: plugins gradle


    【解决方案1】:

    a.extendsFrom(b) 类似于“a 继承自 b”,您可以简单地使用 configurations.compile.extendsFrom(customCompile)。 (不是addExtendsFromgetExtendsFrom。)

    【讨论】:

    • 我认为它与继承相反的原因是因为我认为“instanceof”会起作用。如果 a.extendsfrom(b),我希望 project.configurations.a 是子类“a”的列表,并且 project.configurations.b 包括 b 和 a。无论如何,我想这是一个主观的解释。这对我有用。
    • 您的解释与继承相反。 :-) extendsFrom 实际上类似于(多重)继承。
    • 我的意思是在“B”类型列表可以引用(A 和 B 类型)与“A”类型列表(A 类型)的上下文中,但这似乎是意思是所有 B 类型的依赖都是 B 的成员(不是 B 的实例),这是有意义的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 2021-03-01
    相关资源
    最近更新 更多