问题标签 [gradle-shadow-plugin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
339 浏览

java - jar中的Gradle Shadow重复文件名

我正在尝试从 Ant 构建迁移到 Gradle 构建。我正在使用 Shadow ( com.github.jengelman.gradle.plugins:shadow:5.2.0) 来构建我的项目。我的项目包括 3 个 Apache Axiom 依赖项:

Shadow 配置如下所示:

当这些 jar 使用我的 Ant 项目构建时,我最终在 jar 中有 2 个axiom.xml文件。META-INF两者是不同的。

蚂蚁公理.xml

当我使用 Shadow 构建时,我最终得到了两个axiom.xml文件中的后者。第一个文件被后者覆盖。

Gradle axiom.xml

这会导致运行时错误。如何让 Shadow 包含重复文件名的文件,而不仅仅是覆盖它们?

0 投票
1 回答
1497 浏览

gradle - 配置 Gradle Shadow 插件以创建仅具有一个重定位依赖项的库 jar

我的用例:

使用Gradle Shadow 插件构建一个带有重新定位的 Google Guice 依赖项的 Java 库(可能是每个其他的 dep),以避免下游项目中的依赖项问题,但保留其他依赖项的原样。这意味着下游项目仍然通过 Maven 存储库获取这些依赖项,因为它们是在库 pom.xml 中定义的。

我认为这是使用这个插件的主要原因之一,重新定位依赖项,但仍然像以前一样为您提供作为普通库的项目。对我来说,配置我的用例并不是很直观。我只想启用重定位而不创建fatjar。

我的示例项目按预期工作,但我不喜欢我需要将依赖项定义为shadow和两次implementation

shadow => 依赖项作为运行时依赖项添加到已发布的 pom 中(参见代码

implementation => 用于编译项目本身的依赖项,例如在您的 IDE 中。

你知道更好的方法吗?

更新

我的示例项目中的配置适用于 Guice 依赖项,因为它按预期重新定位,但缺少传递依赖项。当然这会导致 ClassNotFoundExecption (在我的真实项目中),因为 Guice 没有找到自己依赖的类。

0 投票
1 回答
227 浏览

java - 如何使用带有 maven-publish 和 shadow 插件的 Gradle 重命名正在发布的 jar 文件?

基本上我想要做的是将一个 jar 文件发布到具有特定名称的 GitHub 包。我现在拥有的是:

但是从这个我得到some-project-1.1.0-all.jar,我想得到some-project-1.1.0.jar但似乎无法找到方法。更改任务似乎不会影响罐子archiveFileName,只影响罐子。shadowJarpublishingbuild

0 投票
0 回答
25 浏览

java - Gradle shadow 插件更改重定位依赖项中的字符串文字

我正在使用 Gradle shadow 插件将一些依赖项重新定位到捆绑的 jar 中。

例如,在我的build.gradle我有以下内容:

relocate 'io.netty','thirdparty.io.netty'

我发现受这种阴影影响的字符串文字会导致 netty 依赖项出现一些运行时错误。

以下字符串文字在原始依赖项中定义:

在阴影 jar 中,此字符串文字更改为:

有什么办法可以防止这种更改字符串文字的行为吗?

0 投票
0 回答
21 浏览

java - 为什么我的沙盒模块在运行 shadowJar 任务时不能正确继承重定位的包名称?

我正在开发一个图书馆。它不是通常隐藏依赖项,而是在编译时下载二进制文件,重新定位它们,然后将它们加载到类路径中。但是,问题是如果我重新定位在运行时下载的 JAR,我还需要重新定位我的库路径以便将路径同步在一起。

例如,如果我的依赖项之一是:uk.co.caprica.vlcj,并且我将该特定的 jar 依赖项重新定位到com.github.pulsebeat02.vlcj,我还需要将该重新定位到我自己的项目中。

我尝试使用该shadowJar任务。

  • 我的父模块名为minecraftmedialibrary-parent.
  • 我的主要 API 模块名为minecraftmedialibrary-api.
  • 我也有单独的模块,每个模块代表不同的抽象/实现。
  • 我会将这些抽象和 API 组合在一起形成一个minecraftmedialibrary模块。
  • 对于测试,我会使用一个名为 的沙盒模块deluxemediaplugin,它测试代码(并且依赖于模块minecraftmedialibrary)。

运行 shadowJar 时,我注意到-all构建文件夹中的 jarminecraftmedialibrary具有正确的重定位依赖项,其中所有包名称都已正确更改。但是,对于我的deluxemediaplugin模块,当它使用该库时,会导致大量没有类定义的异常。更仔细地查看沙盒 jar,似乎重新定位的路径不会从库中携带(并且包名称与原始路径相同)。以下是一些显示问题的图像(来自 JD-GUI):

minecraftmedialibrary反编译代码

deluxemediaplugin反编译代码

有谁知道允许重新定位的路径保留在库代码中而不是离开原始路径的可能解决方案?

0 投票
1 回答
177 浏览

gradle - jar后Gradle没有运行复制任务

我正在尝试做这样的事情:

到目前为止,我已经尝试了各种教程,包括这个答案的所有形式,但没有奏效。唯一有效的是调用一个单独的任务,但我想知道为什么我的构造是错误的,为什么我不能在 jar 或 shadowJar 任务之后运行一些东西。

0 投票
1 回答
36 浏览

java - 运行时未添加 NetBeans Gradle 影子依赖项

我已将 Gradle 项目导入 NetBeans 12.4。该项目使用影子插件并将 JDBC 驱动程序设置为影子排除依赖项:

当我点击 NetBeans 中的“运行”或“调试”按钮时,程序在尝试加载 JDBC 驱动程序时失败。如何告诉 NetBeans 或 Gradle 在运行时包含“影子”依赖项?

0 投票
2 回答
481 浏览

java - 使用 Maven 发布插件从 pom 中排除依赖项?

我使用以下插件:

我的依赖:

我的发布块:

当我运行publishToMavenLocal任务时,我可以看到结果pom.xml包含我不想要的依赖项。

假设它是:

我如何配置publications块以摆脱pom.xml(和模块)文件中的这种依赖关系?

0 投票
1 回答
75 浏览

gradle - kotlin multiplatform shadow fat jar 和 runShadow 任务?

我有一个相当标准的 kotlin 多平台 (mpp) build.gradle.kts,它使用应用程序插件和com.github.johnrengelman.shadow

我成功创建了一个java -jar可执行的胖罐子:

但现在我在如何让应用程序gradle run任务分别让影子gradle runShadow任务正确执行而苦苦挣扎。

有人有什么想法(kotlindsl)吗?

0 投票
1 回答
544 浏览

java - java.nio.file.NoSuchFileException:Uber Jar 无法找到 src/main/resources 文件夹文件

我正在使用 gradle build 构建 uber jar,我使用的插件是 https://github.com/johnrengelman/shadow

我的文件src/main/resources夹中有一个 json 文件,我在下面的代码中使用它

当我运行 uber Jar 时,面临以下问题

我的 build.gradle 看起来像这样