Gradle: Jar 任务不包含扩展名未知的文件

Gradle: Jar Task doesn't include Files with unknown extensions

我正在尝试为我的自定义编程语言构建 library.jar。该库包含用该语言编写的 Java 类 和 类。我已经设法编译编译器,运行 它在这些 类 上并在名为 dbin.

的文件夹中生成输出文件
- src
  - ...
- build
  - ...
- dbin
  - Foo.class
  - Custom.dyo   // <- the new file type
- build.gradle

我想要实现的是将 dbin 目录中的所有文件复制到 Jar 文件中,我尝试使用以下脚本:

task buildLib(type: Jar, dependsOn: [ 'classes', 'compileDyvilLibrary' ]) {
    from sourceSets.library.output

    // Include Compiler Output
    from fileTree(dir: 'dbin', includes: [ '**/*.class', '**/*.dyo' ])

    baseName = 'dyvil-library'
}

问题是,虽然明确包含,但 jar 文件不包含任何 .dyo 个文件。

from 行在配置时执行,(即在任何任务 运行 之前)如果文件不存在于您在 fileTree 时指定的目录位置实例化后它将不包含任何文件。

您可以尝试通过使 from 方法执行延迟计算来解决此问题:

from { fileTree(dir: 'dbin', includes: [ '**/*.class', '**/*.dyo' ]) }

您可能还想试试这个语法:

from ('dbin') {
    include '**/*.class'
    include '**/*.dyo'
}