2017-03-12 9 views
0

私はangular2を使用するWebアプリケーションを作成しようとしています。次のように写し(typescript)をコンパイルし、戦争に追加する責任build.gradleの一部である:gradleどのようにwarファイル内のディレクトリにjavascriptファイルを追加する

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ディレクトリにtypescriptですコンパイラの出力が追加されますが、それはしていませんノードnode_modulesにある依存関係を追加します。

私はtypescriptですがdirectoryintoのTHW戦争からのみJavaScriptファイルを追加するには、次のGradleスニペットを使用しようとしました:

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

しかし、これはディレクトリの下のすべてのファイルが含まれています。

私は上記のいくつかのバリエーションを試しました(例えば、fileTree('./src/main/typescript').include('**/*.js')を使用して、別の方法の代わりにfromのクロージャーを使用しています)。 .jsで終わるファイルのみをwarファイルのjsディレクトリに追加するにはどうすればよいですか?

+2

私は、ホイールの再発明をやめることを強くお勧めします。角度のあるプロジェクトを作成するには、angle-cliを使用します。バンドルされ、最適化されたすべての成果物を含むdistディレクトリが生成されます。次のgradleプラグインを使用して、gradclプロジェクトにangle-cliビルド(とノードとnpmのインストール)を統合してください:https://github.com/srs/gradle-node-plugin –

+0

@JBNizetこの特定のプロジェクトですが、どうやってやるべきかを尋ねるのは、他の状況がたくさん**あります。 –

+0

これは実際にグラデル関連ではありません。あなたはあなたの戦争に埋め込むすべてのアーティファクトを含むディレクトリを生成するためにあなたのJavaScriptビルド(必要なwebpack、gulp、wheteverを使用して)が必要です。 Gradleはこのディレクトリを戦争の中に埋め込む必要があります。 –

答えて

0

fromメソッドはファイルオブジェクトではなく文字列を取ります。

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