我们正在尝试起草一个自定义 Gradle 插件来使用我们的建模语言 Umple 。我们希望使其尽可能“符合人体工程学”,并允许在“sourceSet”级别指定属性。
例如,
sourceSets {
main {
umple {
foo = 'bar'
}
}
}
umple { // defaults
foo = 'baz'
}
我们尝试向源集添加扩展,并尝试按照 Scala 和 Antlr 插件的工作方式对方法进行建模。但是,我们无法弄清楚如何向 sourceSet 闭包应用程序添加额外的属性。如有任何帮助,我们将不胜感激。
最佳答案
// TODO: take inspiration from https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/java/org/gradle/api/tasks/GroovySourceSet.java
public interface UmpleSourceSet {
SourceDirectorySet getUmple();
UmpleSourceSet umple(Closure configureClosure);
UmpleSourceSet umple(Action<? super SourceDirectorySet> configureAction);
SourceDirectorySet getAllUmple();
}
// TODO: take inspiration from https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/java/org/gradle/api/internal/tasks/DefaultGroovySourceSet.java
public class DefaultUmpleSourceSet implements UmpleSourceSet { ... }
// TODO: take inspiration from https://github.com/gradle/gradle/blob/89b1c11a160c5f597c6c1ca50f01cf57e43c8356/subprojects/plugins/src/main/java/org/gradle/api/plugins/GroovyBasePlugin.java#L88
public class UmplePlugin implements Plugin<Project> {
private final SourceDirectorySetFactory sourceDirectorySetFactory;
@Inject
public UmplePlugin(SourceDirectorySetFactory sourceDirectorySetFactory) {
this.sourceDirectorySetFactory = sourceDirectorySetFactory;
}
public void apply(Project project) {
project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().all(new Action<SourceSet>() {
public void execute(SourceSet sourceSet) {
DefaultUmpleSourceSet umpleSourceSet = new DefaultUmpleSourceSet(((DefaultSourceSet) sourceSet).getDisplayName(), sourceDirectorySetFactory);
new DslObject(sourceSet).getConvention().getPlugins().put("umple", umpleSourceSet);
umpleSourceSet.getUmple().srcDir("src/" + sourceSet.getName() + "/umple");
}
}
}
}
关于gradle - 将属性添加到 JavaPlugin 的 SourceSets、Gradle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42912317/