gradle项目构建目录不存在
尝试创建属性文件(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
。
你应该做
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'
}
如果你的属性是动态而不是静态计算(我假设,否则,你可以简单地手动创建的文件),您也应该设置动态部分作为任务的输入,从而使任务最新检查工作正常,并且只有在必要时才运行该任务,因为某些输入已更改。
尝试这样的:
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在尝试被发现之前发生了骚动。
$ project.buildDir与$ buildDir不一样吗? – LazerBanana
同样的作用域,相同的值,'project.'在这里可以省略 – ToYonos
$ buildDir和$ {project.buildDir}之间有什么区别?谢谢。 – eastwater
没有,你只是不需要限定通话。你可以使用'$ {project.buildDir}',在这种情况下它们确实是相同的。 – Vampire