当前位置: 首页 > 知识库问答 >
问题:

Gradle中的复制任务在第一次尝试时说“最新”

安高翰
2023-03-14

我有一个复制任务试图复制在“依赖”任务中提取的文件。目标文件夹包含从属性文件检索的时间戳。

task copyFilesToBuild(type: Copy, dependsOn:unzipExtFile) {
    def tmpTimestampFile = file("$buildDir/tmp/timestamp.properties")
    if (tmpTimestampFile.exists()) {
        stampProp = new Properties()
        stampProp.load(new FileInputStream(tmpTimestampFile))
        def timestampFromFile=stampProp.getProperty('propfileTimestamp')
        def unzippedExtFilesDir = file("$buildDir/tmp/unzipped/static/js/app")
        def appBuildDir = file("$buildDir/apptmp/war/app/app_$timestampFromFile/sub")
        from unzippedExtFilesDir
        into appBuildDir
    }
}   

第一次在我的构建中(在清理之后),它说“最新”(调试输出说它跳过任务,因为它没有源文件。)

我尝试添加闭包来推迟计算(来自{unzippedExtFilesDir}),并尝试将任务主体放在doFirst中,但都没有任何效果。我还尝试在'from'语句中直接使用dependsOn任务名(unzipExtFile),但也不起作用。

第二次运行构建时,这个任务确实会运行,所以它似乎是配置和执行之间的时间问题,但我没有什么想法了。欢迎提出任何建议。

共有1个答案

方和顺
2023-03-14

在任何任务运行之前,代码在配置时读取时间戳。(通过添加println语句可以看到这一点。)因为此时不存在时间戳文件(特别是在第一次运行时),所以没有配置源位置(from...),并且由于没有任何可复制的内容,任务被视为最新的。将整个时间戳逻辑放入inte块(放入{...;appBuildDir})应该可以解决这个问题。

 类似资料:
  • 我正在使用以下项目结构 子模块包含在设置中。gradle,并在内部版本中配置。根项目的渐变。 我有3个任务要做 (每个子项目都有这个) (这是每个子项目都需要自己工作的打包机制) (这只需要调用一次) 我想能够打电话 $gradle部署 build.gradle

  • 问题内容: 我的复制任务设置如下: 而且我收到以下错误: 我觉得这只是一个语法问题,有什么提示吗? 问题答案: 按组排除: 按模块排除: 按文件名排除: 排除文件: 您可以按组和模块排除,但需要进入这样的配置排除。 然后它将限制复制之前的配置。 并记住确保该目录存在 也许不是排除所有其他文件而是添加jar?

  • 我正在尝试这样做: 到目前为止,我已经尝试了各种教程,包括这个答案中的所有形式,但都不起作用。唯一有效的是调用一个单独的任务,但我想知道为什么我的构造是错误的,为什么我不能在jar或影子Jar任务之后运行一些东西。

  • 我试图将jBPM 5.4集成到现有的servlet中。 servlet在JBoss 7.1中运行良好,但在我添加一个与jBPM相关的API时,由于抛出异常而失败。(我使用了安装中的评估样本作为模板。)我向servlet的doPost()中添加了: 执行此语句后,将引发以下异常: 20:51:06394错误[org.apache.catalina.core.ContainerBase.[jboss.

  • 我正在从事一个spring boot项目,以自动化与gradle的集成测试。我最近开始在一家新企业工作,我的同事们按如下方式运行集成测试:在构建中。gradle文件有一个集成测试任务 启动任务后,应用程序开始在指定端口运行,然后打开postman,导入集合并运行测试。 我的工作是找到一种方法来跳过额外的点击,即自动运行邮递员集合。第一个想法是使用postman-run gradle插件,但由于企业

  • 我在用Gradle。我有两个任务:“A”和“B”。我想让任务“A”调用任务“B”。我怎么能这么做? 是否可以简单地从现有任务中调用另一个任务?