【问题标题】:Perform an action on each file during installApp phase of Gradle build在 Gradle 构建的 installApp 阶段对每个文件执行操作
【发布时间】: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 重新创建它时,这会如何发生?

标签: java build gradle


【解决方案1】:

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

applicationDistribution copySpec 而不是installApp 任务上调用eachFile

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

我怀疑这就是你想要做的,从那时起它也将被 dist 任务使用。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      相关资源
      最近更新 更多