gradle项目构建目录不存在
gradle project build directory does not exist
正在尝试创建属性文件 (foo.properties) 并将其添加到 war 的根目录。
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)
我需要创建构建目录吗?
对于war,有webapp的输出目录吗? (资源集:src/main/webapp)
最好直接在 webapp outputDir 下创建 foo.properties
。
这样试试:
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'
}
}
现在命令 gradle clean bar
,你将得到 otput :
foo init line
bar init line
:clean
:foo
foo doFirst
foo doLast
:bar
bar doFirst
bar doLast
clean
步骤在初始化步骤之后进行,因此在您的情况下,foo.properties
在尝试找到之前被删除。
你应该做
war {
from createProperties
...
}
这将自动添加对 createProperties 任务的隐式依赖,因此不需要 dependsOn。
为此,您需要像
一样清楚地指定 createProperties
的输出
task createProperties {
outputs.file("$buildDir/foo.properties")
doLast {
FileOutputStream os = new FileOutputStream("$buildDir/foo.properties");
...
}
}
但实际上您应该使用 WriteProperties
类型的任务,它看起来更干净并且更适合可重现的构建。像这样:
task createProperties(type: WriteProperties) {
outputFile "$buildDir/foo.properties"
property 'foo', 'bar'
}
如果您的属性是动态计算的而不是静态计算的(我假设是这样,否则您可以简单地手动创建文件)您还应该将动态部分设置为任务的输入,以便任务是最新的检查工作正常,任务仅在必要时 运行 因为某些输入已更改。
正在尝试创建属性文件 (foo.properties) 并将其添加到 war 的根目录。
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)
我需要创建构建目录吗?
对于war,有webapp的输出目录吗? (资源集:src/main/webapp)
最好直接在 webapp outputDir 下创建 foo.properties
。
这样试试:
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'
}
}
现在命令 gradle clean bar
,你将得到 otput :
foo init line
bar init line
:clean
:foo
foo doFirst
foo doLast
:bar
bar doFirst
bar doLast
clean
步骤在初始化步骤之后进行,因此在您的情况下,foo.properties
在尝试找到之前被删除。
你应该做
war {
from createProperties
...
}
这将自动添加对 createProperties 任务的隐式依赖,因此不需要 dependsOn。
为此,您需要像
一样清楚地指定createProperties
的输出
task createProperties {
outputs.file("$buildDir/foo.properties")
doLast {
FileOutputStream os = new FileOutputStream("$buildDir/foo.properties");
...
}
}
但实际上您应该使用 WriteProperties
类型的任务,它看起来更干净并且更适合可重现的构建。像这样:
task createProperties(type: WriteProperties) {
outputFile "$buildDir/foo.properties"
property 'foo', 'bar'
}
如果您的属性是动态计算的而不是静态计算的(我假设是这样,否则您可以简单地手动创建文件)您还应该将动态部分设置为任务的输入,以便任务是最新的检查工作正常,任务仅在必要时 运行 因为某些输入已更改。