Plugins 在Gradle中设置作为编译配置父级的配置

Plugins 在Gradle中设置作为编译配置父级的配置,plugins,gradle,Plugins,Gradle,我在插件中添加了自定义配置 Configuration customCompile = project.configurations.create("customCompile") .setVisible(false).setTransitive(true) 我想做一些像 configuration.compile.addExtendsFrom(customCompile) 因此,在我的插件中,我可以隔离某些依赖项以添加到我正在运行的东西的类路径中(使用“project.co

我在插件中添加了自定义配置

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类的继承相反的含义。有更好的方法吗?

a.extendsFrom(b)
类似于“a从b继承”,您只需执行
配置。compile.extendsFrom(customCompile)
。(不是
addextensfrom
getextensfrom

我认为它与继承相反的原因是因为我认为“instanceof”是如何工作的。如果a.extendsfrom(b),我希望project.configurations.a是子类“a”的列表,project.configurations.b包括b和a。无论如何,我想这是一个主观的解释。这对我很有用。你的解释与继承相反。:-)ExtendFrom实际上类似于(多重)继承。我的意思是,类型“B”的列表可以引用(类型a和B)而不是类型“a”(类型a)的列表,但这似乎意味着所有B类型依赖都是B的成员(而不是B的实例),这是有意义的。