在 gradle 中添加源文件扩展名



我试图告诉 gradle 扩展名为 *.dsl 的文件应该编译为 groovy 文件,所以我添加了一个带有包含模式的源代码集并更改了编译任务包含属性:

sourceSets {
   ...
   dsl_scripts {
      groovy {
         include '**/*.dsl'
      }
   }
}
compileDsl_scriptsGroovy.includes = ['**/*.dsl']

但是当我在调试模式下运行构建时,它会跳过所有*.dsl文件,并显示以下消息:

Skipping task ':compileDsl_scriptsGroovy' as it has no source files

以下行成功输出我尝试编译的所有文件:

println sourceSets.dsl_scripts.allSource.matching({include '**/*.dsl'}).getFiles()

我做错了什么?

编辑:我在 gradle 源代码中找到了以下代码片段:

FileCollection groovyJavaOnly = spec.getSource().filter(new Spec<File>() {
    public boolean isSatisfiedBy(File element) {
       return element.getName().endsWith(".groovy") || element.getName().endsWith(".java");
    }
});
spec.setSource(new SimpleFileCollection(groovyJavaOnly.getFiles()));

是否可以覆盖?

似乎是一个gradle错误 http://issues.gradle.org/browse/GRADLE-2372

为了使 gradle groovy 编译任务编译扩展名不是 .java.groovy 的文件,需要将新的扩展名添加到sourceSets和编译任务的groovyOptions.fileExtensions中。

例如,要使compileTestGroovy任务编译扩展名为.dummy的文件,除了 .java.groovy 之外,还需要进行以下更改:

sourceSets.test.groovy.filter.include('**/*.dummy')
compileTestGroovy {
    groovyOptions.fileExtensions = ['java', 'groovy', 'dummy']
}

最新更新