2017-06-29 10 views
0

プロパティファイル(foo.properties)を作成し、それをwarのルートに追加しようとしています。gradleプロジェクトビルドディレクトリが存在しません

apply plugin: 'war' 

task createProperties { 
    FileOutputStream os = new FileOutputStream("${project.buildDir}/foo.properties"); 
    ... 
} 

war { 
    dependsOn createProperties 
    from "${project.buildDir}/foo.properties" 
    ... 
} 

何が悪かったのか:

A problem occurred evaluating project ':app'. 
> E:\app\build\build.properties (The system cannot find the path specified) 

私は、ビルドディレクトリを作成する必要がありますか?

戦争の場合、webappの出力ディレクトリはありますか? (sourceSet:src/main/webapp) foo.propertiesは、webapp outputDirのすぐ下に作成する方がよいでしょう。

答えて

2

あなたは、これは自動的にcreatePropertiesタスク、そうDEPENDSONが不要に暗黙の依存関係を追加します

war { 
     from createProperties 
     ... 
} 

を行う必要があります。このため

は、あなたがきれいに

task createProperties { 
    outputs.file("$buildDir/foo.properties") 
    doLast { 
     FileOutputStream os = new FileOutputStream("$buildDir/foo.properties"); 
     ... 
    } 
} 

のようなあなたのcreatePropertiesの出力を指定する必要があります。しかし、実際にあなたがきれいに見えると再現性を構築するための優れているタイプWritePropertiesのタスクを、使用する必要があります動作するように。このような何かを:

task createProperties(type: WriteProperties) { 
    outputFile "$buildDir/foo.properties" 
    property 'foo', 'bar' 
} 

あなたの特性は、あなたにもなるように、タスクの入力として動的な部分を設定する必要があります(そうしないと、単にファイルを手動で作成することができ、私が想定している)、動的ではなく静的に計算されている場合タスクの最新のチェックが正しく機能し、入力が変更されたためにタスクが必要なときにのみ実行されます。

+0

$ buildDirと$ {project.buildDir}の違いは何ですか?ありがとう。 – eastwater

+0

これはありません。電話を受ける必要はありません。 '$ {project.buildDir}'を使うこともできますが、この文脈では本当に同じです。 – Vampire

0

このようにしてみてください。例と

task createProperties { 
    doFirst { 
     FileOutputStream os = new FileOutputStream("${project.buildDir}/foo.properties"); 
     ... 
    } 
} 

説明:commande gradle clean barのための今

task foo { 
    println 'foo init line' 
    doFirst { 
     println 'foo doFirst' 
    } 
    doLast { 
     println 'foo doLast' 
    } 
} 

task bar { 
    println 'bar init line' 
    doFirst { 
     println 'bar doFirst' 
    } 
    doLast { 
     println 'bar doLast' 
    } 
} 

、あなたがotputとして取得します:

foo init line 
bar init line 
:clean 
:foo 
foo doFirst 
foo doLast 
:bar 
bar doFirst 
bar doLast 

cleanステップあなたのケースでは、initステップの後に行った、foo.propertiesはeです見つけようとする前に立ち往生した。

+0

このプロジェクトでは、$ project.buildDirは$ buildDirと同じではありませんか? – LazerBanana

+1

同じスコープ、同じ値、 'project.'はここでは省略できます – ToYonos

関連する問題