gradle - 未执行Gradle复制和筛选任务

标签 gradle

我们正在过滤xml文件,将某些标记替换为gradle属性。

但是当我们仅更改build.gradle文件中的属性时,不会执行过滤(即复制任务)。

我们应该如何修改脚本,以便每次或至少在修改模板和/或build.gradle时执行过滤。

我们有:

war.doFirst {
   delete 'src/main/webapp/WEB-INF/appengine-web.xml'

   copy {
        from 'build.gradle'
        from 'src/main/webapp/WEB-INF/'
        into 'src/main/webapp/WEB-INF/'
        include '*-template.*'

        rename { String fileName ->
            fileName.replace('-template', '')
        }

        expand(gaeApp: "$gaeApp", gaeAppVersion: "$gaeAppVersion")
    }
}

我只是在过滤工作的地方进行了一些测试。我很困惑...我确定有时候不会!

因此,在吸血鬼的好评之后,我们尝试了
war {
    inputs.file "build.gradle"

    exclude 'src/main/webapp/WEB-INF/appengine-web.xml'

    // filesMatching('src/main/webapp/WEB-INF/**/*-template.*') {
    filesMatching('**/*-template.*') {

        println "WAR template: $it"

       rename { it.replace '-template', '' }
       expand gaeApp: gaeApp, gaeAppVersion: gaeAppVersion
    }
}

一美元和一角钱给任何可以解释为什么filesMatching('src/main/webapp/WEB-INF/**/*-template.*')无法正常工作的人!

但是最大的问题是,即使filesMatching找到模板文件,放置在WAR中的appengine-web.xml也不是appengine-web-template.xml的已处理版本。

最佳答案

您需要将这些属性添加到任务的输入中,例如

war.inputs.property 'gaeApp', gaeApp
war.inputs.property 'gaeAppVersion', gaeAppVersion

以便gradle知道输入已更改,否则它不知道输入何时不同。

但是除此之外,您不应(不需要)在其中使用copy { }块。war任务本身是一个隐式副本规范,因此您应该能够执行以下操作
war {
    inputs.property 'gaeApp', gaeApp
    inputs.property 'gaeAppVersion', gaeAppVersion

    exclude 'src/main/webapp/WEB-INF/appengine-web.xml'

    filesMatching('src/main/webapp/WEB-INF/**/*-template.*') {
        rename { it.replace '-template', '' }
        expand gaeApp: gaeApp, gaeAppVersion: gaeAppVersion
    }
}

关于gradle - 未执行Gradle复制和筛选任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37119083/

相关文章:

java - Build.gradle中的运行时范围编译失败?

android - Gradle同步失败:索引2处的字符非法

spring - 为什么Gretty慢?

android - 使用预构建静态库的 Gradle

android - Jacoco - 如何在 jacoco Android gradle 中排除继承的类

unit-testing - 如何在单元测试中运行自定义gradle任务?

android - Android Gradle Sync错误

jetty - 在后台运行 JavaExec 任务,然后在构建完成时终止

android - 在 com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@5635bcd2 上找不到属性 'packageApplication'

android - Gradle Flavor 变量的抽象为