使用gradle任务提取zip中的单个jar

时间:2019-02-08 07:36:16

标签: gradle

我正在尝试从一个zip文件中提取一个jar文件,该文件位于zip文件中,如下图所示。

<policies>
  <inbound>
    <log-to-eventhub logger-id ='contoso-logger'>
      @( string.Join(",", DateTime.UtcNow, context.Deployment.ServiceName, context.RequestId, context.Request.IpAddress, context.Operation.Name) )
    </log-to-eventhub>
  </inbound>
  <outbound>
  </outbound>
</policies>

这是任务:-

test.zip /web-inf /lib /result1.jar

但是我正在使用具有task unzip(type: Copy){ group "testgroup" def zipFile = file("$buildDir/test.zip") def tree = zipTree(zipFile) from(tree.matching { include "**/result1.jar"}) into "$builddir/dir" includeEmptyDirs = false } 之类的文件夹结构的jar文件。我只希望jar文件,而不是文件夹(/web-inf/lib/result1.jar)。

请更正gradle任务中的错误。

1 个答案:

答案 0 :(得分:0)

等级Copy DSL提供了一种方法eachFile (Closure closure),您可以使用该方法对要复制/提取的每个文件执行操作,请参见Copy DSL

根据您的情况,您可以使用此方法重命名文件(从路径中删除父目录):

task unzip(type: Copy) {
    group "testgroup"


    from( zipTree(file("test.zip")).matching { include "**/result1.jar"  } )
    into "$buildDir/dir"

    def parentDir = "web-inf/lib"
    eachFile { fcp ->
        fcp.path = fcp.path.replaceFirst("^$parentDir", '')
    }
    includeEmptyDirs = false
}