gpt4 book ai didi

gradle - 如何将其他 Gradle 任务的输出文件引用为 ziptree?

转载 作者:行者123 更新时间:2023-12-03 03:42:31 25 4
gpt4 key购买 nike

我有一个 ShadowJar 和一个 Proguard 任务,它们在我的 Gradle 构建中生成两个 jar 文件。

task obfuscate(type: ProguardTask) {
outjars ..
}

shadowJar {
...
}

task release(type: Jar) {
from shadowJar
from obfuscate
classifier 'all'
}

我的问题是,在这种情况下,发布 jar 文件包含影子 jar 和混淆的 jar 文件,作为 jar 本身中的两个文件。我想将它们作为 zipTree 输入。

我的问题是我不知道如何将任务引用转换为该任务实际输出的 zipTree。

我的尝试引导我从 zipTree(shadowJar.outputs.getFiles()) 但这仍然失败:

> Cannot convert the provided notation to a File or URI: task 'shadowJar' output files.
The following types/formats are supported:
- A String or CharSequence path, for example 'src/main/java' or '/usr/include'.
- A String or CharSequence URI, for example 'file:/usr/include'.
- A File instance.
- A URI or URL instance.

如何正确引用前面任务的输出jar文件?

最佳答案

zipTree 上的 Gradle 文档:

Creates a new FileTree which contains the contents of the given ZIP file. The given zipPath path is evaluated as per Project.file(java.lang.Object).

因此,zipTree 只能处理单个文件,但是outputs.files 提供了一个文件集合。这揭示了两个选项:

您可以承担提供仅包含一个文件的文件集合的任务。在这种情况下,您可以简单地采用您的方法并使用 getSingleFile 方法:

from zipTree(shadowJar.outputs.files.singleFile)

只要您使用类型为Jar 的任务,这应该不会造成任何问题,因为这种类型的任何任务都只会创建一个jar 文件。但是,如果您使用其他可能有多个输出文件的任务类型(例如自定义任务),getSingleFile 方法将失败。

第二种方法是遍历每个输出文件,将其解压缩并通过 from 添加显示的内容:

shadowJar.outputs.files.each { outFile ->
from zipTree(outFile)
}

我不太确定以下是否有效,但也许它是一个更像 Gradle 风格的解决方案:

from shadowJar.outputs.files.collect{ zipTree(it) }

关于gradle - 如何将其他 Gradle 任务的输出文件引用为 ziptree?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43768991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com