gradle - 将属性添加到 JavaPlugin 的 SourceSets、Gradle

标签 gradle

我们正在尝试起草一个自定义 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/

相关文章:

java - 如何使用 gradle 对多个嵌入式服务器运行 spring-boot 集成测试

dependencies - gradle带时间戳的快照依赖项解析失败

android - 如何找到依赖的gradle实现路径?

kotlin - 即使使用默认目录结构,`gradlew run`也找不到主kotlin类

gradle - gradle任务-全部抛出错误

android - Gradle android插件,如何根据不同的产品风格复制和加载不同的动态库?

带有 gradle build classes.jar 的 Android Studio 是空的

android - 错误 : pathspec 'CI]"' did not match any file(s) known to git

gradle - 依赖同一依赖项的多个配置

android - 拆分后的apk仅上传到Google Play