gradle 如何仅将 javascript 文件添加到 war 文件中的目录

gradle how to add only javascript files to a directory in the war file

我正在尝试创建一个使用 angular2 的 Web 应用程序。 build.gradle中负责编译打字稿并添加到war中的部分如下:

public class TsCompileTask extends DefaultTask {
    File projectDir;

    @OutputDirectory
    File outputDir;

    @TaskAction
    void compile() {
        println "compiling TypeScript files..."
        project.exec {
            executable = "tsc"

            args "-p"
            args projectDir
            args "--outDir"
            args outputDir.toString()
        }
    }
}

public class npmInstallTask extends DefaultTask {
    File projectDir

    @TaskAction
    void compile(){
        println "installing npm packages"
        project.exec {
            workingDir = projectDir.path
            executable = "npm"
            args "install"
        }
    }
}

task tsCompile(type:TsCompileTask) {
    projectDir = file('./src/main/typescript')
    outputDir = file("$buildDir/ts")
}

war{
    into("js"){
        from tsCompile.outputs
    }
}

这会将 typescript 编译器的输出添加到 war 存档中的 js 目录,但不会添加依赖项,这些依赖项位于 node_modules.

目录中

我尝试使用以下 gradle 片段仅将 typescript 目录中的 JavaScript 文件添加到 war:

war{
    into("js"){
        from fileTree(dir: './src/main/typescrypt/').matching{
            include('**/*.js)
        }.files
    }
}

但是,这包括目录下的所有文件。

我已经尝试了上述的几种变体(例如,使用 fileTree('./src/main/typescript').include('**/*.js') 将 into 置于 from 的闭包中,而不是相反)。如何才能将.js结尾的文件添加到war文件的js目录下?

from 方法接受字符串,而不是文件对象。

war{
    into("js"){
        from fileTree(dir: './src/main/typescrypt/').matching{
            include('**/*.js)
        }.files.stream().map{
        File->file.toString()
    }.collect(Collectors.toSet())
}