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

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

东门玺
2023-03-14

我有一个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文件?

共有1个答案

仇正平
2023-03-14

zipTree上的Gradle文档:

创建一个新的文件树,其中包含给定ZIP文件的内容。给定的zipPath路径根据Project.file(java.lang.Object)进行评估。

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

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

from zipTree(shadowJar.outputs.files.singleFile)

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

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

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

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

from shadowJar.outputs.files.collect{ zipTree(it) }
 类似资料:
  • 可能是一个简单的问题,但我找不到一种方法来列出应用在build.gradle文件中的插件引入了哪些任务。所以,说你的build.gradle就是: 有没有一个简单的方法可以让gradle列出那个插件引入的所有任务? PS2:我不是问任务的依赖性。我的问题不一样,相当清楚。我应用的每个插件都引入了自己的一些任务(不必在意什么取决于什么)。问题是第一时间新推出的任务是哪些?

  • A task is special because knowing when a task is about to exit is useful in these circumstances: Frameworks know when to render the UI. Measuring enter/leave allows knowing total script/task time. Exi

  • 本文向大家介绍如何使用R编写文本并将其输出为文本文件?,包括了如何使用R编写文本并将其输出为文本文件?的使用技巧和注意事项,需要的朋友参考一下 我们可以使用writeLines和fileConn函数来做到这一点。 示例 我们可以这样做,并按照以下方式在R中查看这些文件- 您可以在系统的文件文件夹中找到这些文件。

  • 在类型中定义了不同数量的任务,因此可以定义任务,但不能自动启动。例如说: 以这种方式定义的一些任务返回值。我需要一种方法来‘传递’这些任务的结果到后续任务的参数,以同样的方式定义。所以,我想写: 任务按定义的顺序处理,每个任务在处理下一个任务之前完成。任务的结果仅用于后续任务。 在使用响应对可运行代码的请求时,如下所示。创建一个新的WPF项目,并将一个按钮添加到默认网格中。然后清除mainWind

  • 问题描述: 我正在使用Gradle Shade插件,它一切正常,它将资源文件复制到最终的jar。但是,正如文档所说,它不能包含其他文件作为资源,因为它无法将它们与依赖项区分开来。它解压缩它们是ntead。 我想做的是:我想复制额外的代码。jar

  • 7.15. 其他任务 这里有一些简单的任务,你可以自己解决: 把模板文件存放在tmpl/目录,页面数据存放在data/目录。 增加一个处理函数(handler),将对根目录的请求重定向到/view/FrontPage。 修饰页面模板,使其成为有效的HTML文件。添加CSS规则。 实现页内链接。将[PageName]修改为<a href="/view/PageName">PageName</a>。(