在Gradle构建的installApp阶段期间对每个文件执行操作

时间:2014-03-02 00:15:25

标签: java build gradle

这是我正在使用的最小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.

2 个答案:

答案 0 :(得分:1)

我已经复制了你的问题。我怀疑这是一个错误。在我们进一步调查的同时,这是一个对我有用的解决方法。

eachFile copySpec而不是applicationDistribution任务进行installApp来电。

applicationDistribution.eachFile {
   println "$it.name"
}

我怀疑这是你想要做的事情,从那以后它也会被dist任务使用。

顺便说一下,您可能还会发现感兴趣expand方法http://www.gradle.org/docs/current/javadoc/org/gradle/api/file/CopySpec.html#expand(java.util.Map)

答案 1 :(得分:1)

这显然在Gradle 2.3中再次发生了变化。现在使用applicationDistribution无效,您需要使用installDist