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

gradle如何只将javascript文件添加到war文件的目录中,gradle,war,Gradle,War,我正在尝试创建一个使用angular2的web应用程序。build.gradle中负责编译类型脚本并将其添加到war的部分如下所示: public class TsCompileTask extends DefaultTask { File projectDir; @OutputDirectory File outputDir; @TaskAction void compile() { println "compiling TypeSc

我正在尝试创建一个使用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目录,但不会添加目录节点_模块中的依赖项

我尝试使用以下gradle代码段将typescript目录中的JavaScript文件仅添加到thw 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())
}

我强烈建议停止重新发明轮子。使用angular cli构建angular项目。这将生成一个dist目录,其中包含所有绑定的优化工件。使用以下gradle插件将angular cli构建(以及节点和npm安装)集成到gradle项目中:@JBNizet我可以尝试在这个特定项目中使用angular cli,但我要问的是如何在许多其他情况下使用angular cli。这与gradle无关。您需要您的JavaScript构建(使用webpack、gulp,无论您想要什么),以生成一个包含您想要嵌入到war中的所有人工制品的目录。Gradle只需要将此目录嵌入war中。@JBNizet我尊重您关于如何制作角度项目的知识,并且正在应用您的建议,但是使用Gradle获取具有特定后缀的所有文件并将其放入工件中的功能看起来仍然非常有用。你知道我会怎么做吗?这个特殊的项目使用angular解决了这个问题,但我可以很容易地看到这个问题出现在其他情况下。