我正在尝试创建一个使用Angular2的Web应用程序。构建的一部分。负责编译打字稿并将其添加到战争中的级别如下:
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
}
}
这将打字稿编译器的输出添加到战争档案中的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')
,将其闭合而不是相反的方式)。如何添加在War File中的JS目录中以.js结尾的文件?
from
方法取字字符串,而不是文件对象。
war{
into("js"){
from fileTree(dir: './src/main/typescrypt/').matching{
include('**/*.js)
}.files.stream().map{
File->file.toString()
}.collect(Collectors.toSet())
}