2017-06-29 151 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