2017-06-29 149 views
0

嘗試創建屬性文件(foo.properties)並將其添加到戰爭的根目錄。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) 

我需要創建build目錄?

對於戰爭,是否有一個輸出目錄爲webapp? (sourceSet:src/main/webapp) 最好直接在webapp outputDir下創建foo.properties

回答

2

你應該做

war { 
     from createProperties 
     ... 
} 

這將自動添加上createProperties任務隱式的依賴,所以不需要一個dependsOn。

對於這個工作,你需要指定乾淨像

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"); 
     ... 
    } 
} 

說明一個例子:

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' 
    } 
} 

現在的COMMANDE gradle clean bar,你會得到作爲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