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

Gradle和Shadow插件-在shadowJar任务后将其他文件(.jar文件)复制到最终jar

农明辉
2023-03-14

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

我想做的是:我想复制额外的代码。jar文件从工具文件夹(位于我的build.gradle旁边)放入由shadowJar任务生成的最终jar。

问题:如何扩展任务(shadowJar)以将其他文件复制到生成的jar文件中。


共有1个答案

方航
2023-03-14
匿名用户

Gradle shadow插件的文档中,在shadow Jar中嵌入Jar文件一节中回答了这个问题:

[...] shadow无法区分配置为依赖项的jar文件和资源文件夹中包含的jar文件。这意味着在资源目录中找到的任何jar都将与任何其他依赖项一样合并到影子jar中。如果您打算将jar嵌入其中,则必须将jar重命名为不以结尾。在影子任务开始之前。

不幸的是,这既适用于作为依赖配置一部分的JAR,也适用于使用来自复制规范的复制JAR(这是因为影子Jar任务扩展了jar任务;这反过来又是一个复制任务,因此支持复制规范)。

因此,只能通过重命名来嵌入JAR。如果必须命名它。jar在优步jar中,我认为唯一的选择是三步解决方案:

  1. 创建优步JAR并通过重命名嵌入JAR;e、 g.使用后缀。邮政编码
shadowJar
{
    from("${dirThatContainsSomeJARs}")
    {
        include '*.jar'
        rename '(.+).jar', '$1.zip'
    }
}

 类似资料:
  • 我有一个Windows文件夹结构和文件,如下所示 c:\源文件\file1.txt c:\源文件夹\subfolder1\file2.txt c:\源文件夹\子文件夹2\file3.txt 我想复制所有文件到目标文件夹,如下所示 c:\DestinationFile\file1.txt c:\DestinationFile\file2.txt c:\DestinationFile\file3.tx

  • 我有一个META-INF文件夹,其中有persitence.xml和orm.xml。当我用下面的gradle构建一个jar文件时,这些文件不会包含在jar中。如何将这些文件复制到jar中?

  • 问题内容: 我尝试构建jar,然后将其复制到另一个文件夹。 但是我找不到一个问题。copyJarToBin任务尝试复制旧的jar。如果我删除项目中的/ build文件夹并运行buildApp()任务,则任务createJar()将生成.jar文件,但copyJarToBin()找不到该.jar文件。 你可以帮帮我吗? 谢谢。 问题答案: 罪魁祸首是您的任务。做的时候 您可以在配置期间使用该方法复制

  • 问题内容: 我运行以下命令: MyException在dependency.jar中。我也尝试用-classpath替换-cp。我做错了什么? 问题答案: 如果使用,则将忽略这些选项。如果在类路径上需要额外的jar文件,则应在清单中指定以下内容: (然后,您可以使用来运行程序。)

  • 我正在尝试制作一个.jar文件(这是我第一次),我很困惑。我了解如何使用命令提示符创建一个简单的jar文件,但对于我的程序,我导入了JavaMail API和我创建的另一个库(名为ArrayLibrary,其中填充了排序方法)。我如何在一个jar文件中创建这些?