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

时间:2017-03-12 07:45:31

标签: gradle war

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

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{
    into("js"){
        from fileTree(dir: './src/main/typescrypt/').matching{
            include('**/*.js)
        }.files
    }
}

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

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

1 个答案:

答案 0 :(得分:0)

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

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