我正在尝试创建一个使用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目录中?
答案 0 :(得分:0)
from
方法接受字符串,而不是文件对象。
war{
into("js"){
from fileTree(dir: './src/main/typescrypt/').matching{
include('**/*.js)
}.files.stream().map{
File->file.toString()
}.collect(Collectors.toSet())
}