Gradle - 复制/重命名文件 - 为所有文件制作 0 文件大小/字节

Posted

技术标签:

【中文标题】Gradle - 复制/重命名文件 - 为所有文件制作 0 文件大小/字节【英文标题】:Gradle - Copying / Renaming file - making 0 file size / bytes for all files 【发布时间】:2014-01-15 14:03:58 【问题描述】:

我正在使用 Gradle build 来编译 Java。

在构建过程中,我获得了成功的构建交付物,但我想添加一些额外的文件,这些文件只是 Gradle build 构建的“.war”文件中存在的一些文件的副本或重命名。

以下代码是我正在使用的。我想做的是: 1. 解压缩 build/tmp/warApplication 文件夹中的 .war 文件 2. 复制/重命名文件,即 oldname-1.2.3 到 newname-1.2.3 3. 将 oldname.war.properties 文件复制/重命名为 newname.war.properties 4. 将 oldname.jar.properties 文件复制/重命名为 newname.jar.properties 5. 对 build/tmp/warApplication 文件夹内的所有数据进行战争,并创建原始 .war 文件(即 projectname.war)

问题: 1. unwar 步骤完成后,我看到在 tmp/warApplication 文件夹下,树中的所有文件都有有效的文件大小。 2. warApplication.doLast - 有效,即它不会给出任何错误消息。 3. 完成所有复制/重命名步骤后,我看到 tmp/warApplication 文件夹树或子树级别下的文件大小现在为 0 字节。

我错过了什么?如何将大小为 X 字节的文件 A 复制到相同 X 字节的文件 B。

// add a few extra files
warApplication.doLast 
   def tempWarDirU = new File("$buildDir/tmp/warApplication")
   tempWarDirU.mkdirs()
   ant.unwar(src: "$buildDir/thidsWar/$thidsProjectName.war",
            dest: "$buildDir/tmp/warApplication")

   println ""
   println "--- Inside warApplication - last stage ---"
   println ""
   copy 
      from "$buildDir/tmp/warApplication"
      into "$buildDir/tmp/warApplication"
      rename (/([a-z]+)-([0-9]+\.[0-9]+.+)/, 'newname-$2')
   
   copy 
      from "$buildDir/tmp/warApplication/WEB-INF/classes"
      into "$buildDir/tmp/warApplication/WEB-INF/classes"
      rename (/([a-z]+)\.war\.([a-z]+)/, 'newname.war.$2')
   
   copy 
      from "$buildDir/tmp/warApplication/WEB-INF/classes"
      into "$buildDir/tmp/warApplication/WEB-INF/classes"
      rename (/([a-z]+)\.jar\.([a-z]+)/, 'newname.jar.$2')
   

   ant.jar ( update: "true", destfile: "$buildDir/thidsWar/$thidsProjectName_1.war") 
      fileset(dir: "$buildDir/tmp/warApplication",includes: '*/**')
   
   println ""
   println ""

【问题讨论】:

【参考方案1】:

感谢 Pete N,一个更简单的解决方案。

task renABCToXYZ 
    doLast 
        file("ABC").renameTo(file("XYZ"))
    

【讨论】:

我不知道 Pete N 是谁,但这太棒了。当我将我们从 Gradle 3.3 升级到 4.8.1 时,我的旧重命名废话停止工作。【参考方案2】:

不得不提到“包含”部分。没有它,它会将所有文件复制到树中的 0 字节中。

   copy 
      from "$buildDir/tmp/warApplication"
      into "$buildDir/tmp/warApplication"
      include "$thidsProjectName-$project.version"
      rename (/([a-z]+)-([0-9]+\.[0-9]+.+)/, 'newname-$2')
   
   copy 
      from "$buildDir/tmp/warApplication/WEB-INF/classes"
      into "$buildDir/tmp/warApplication/WEB-INF/classes"
      include "$thidsProjectName.war.properties"
      rename (/([a-z]+)\.war\.([a-z]+)/, 'newname.war.$2')
   
   copy 
      from "$buildDir/tmp/warApplication/WEB-INF/classes"
      into "$buildDir/tmp/warApplication/WEB-INF/classes"
      include "$thidsProjectName.jar.properties"
      rename (/([a-z]+)\.jar\.([a-z]+)/, 'newname.jar.$2')
   

【讨论】:

以上是关于Gradle - 复制/重命名文件 - 为所有文件制作 0 文件大小/字节的主要内容,如果未能解决你的问题,请参考以下文章

批处理:批量重命名父文件夹下所有子文件夹里的文件

bat批处理文件夹下所有子文件夹下最后一个的文件重命名?

如何在 Android Studio 3.4 中复制和重命名项目?

bat脚本照片复制重命名?

linux 下文件重命名/移动/复制命令(转)

java如何重命名所有包名