【发布时间】:2014-03-02 00:15:25
【问题描述】:
这是我正在使用的最小 build.gradle 文件。
apply plugin: 'application'
installApp {
eachFile {
println "$it.name"
loadProperties(it)
}
}
我正在尝试将属性加载到位于src/dist/bin 的属性文件中的一些占位符中。如果属性文件位于 src/main/resources 中,并且我将 installApp 替换为 processResources,则此技术工作正常,这是我在构建中的另一个项目中所做的。
println 没有打印任何内容,因此占位符没有被替换是有道理的,但我不明白为什么它没有遍历 installApp 任务正在复制的所有文件。
使用 gradle 1.10 以 ./gradlew clean installApp 运行。
看来 installApp 任务没有运行传递给 eachFile 函数的闭包。这是演示此行为的完整 build.gradle 文件
apply plugin: "application"
mainClassName = "test.Test"
installApp {
eachFile {
println "$it.name"
}
}
我跑gradle clean installApp -i
并在 installApp 部分获取
:installApp (Thread[main,5,main]) started.
:installApp
Executing task ':installApp' (up-to-date check took 0.011 secs) due to:
Output file /Users/joshbrackett/Documents/workspace/gtest/build/install/gtest has changed.
Output file /Users/joshbrackett/Documents/workspace/gtest/build/install/gtest/bin/gtest has been removed.
Output file /Users/joshbrackett/Documents/workspace/gtest/build/install/gtest/lib/gtest.jar has been removed.
:installApp (Thread[main,5,main]) completed. Took 0.748 secs.
【问题讨论】:
-
如果没有打印,很可能没有安装文件。也许任务已经是
UP-TO-DATE了。 -
@PeterNiederwieser - 我已经更新了我的问题,包括我正在清理。我什至手动删除了安装目录以确保文件(启动脚本/属性文件)正在移动,但属性文件仍然有占位符。
-
我真的不明白你是如何尝试进行替换的。无论如何,如果
println没有生效,我唯一合乎逻辑的结论是没有同步任何内容。 -
@PeterNiederwieser 感谢您提供帮助。为简化起见,我们可以忘记未更新的属性。我认为我们可以同意应该打印文件名。当与 installApp 一起使用时,就好像 eachFile 函数没有被调用或者传递的闭包没有被执行。正如我之前在问题中提到的,这在使用 processResources 时有效。关于您的第二个陈述,当我可以删除安装目录并使用启动脚本和 jar 重新创建它时,这会如何发生?