问题标签 [shadowjar]

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 投票
1 回答
384 浏览

java - gradle shadowJar 任务找不到类 org.apache.tools.zip.ZipOutputStream

我遇到了构建我的项目的问题。它曾经可以正常工作,但是当我现在构建它时,它在 shadowJar 任务上失败,并且找不到类异常。没有添加任何依赖项。它曾经与 Gradle 3.3 一起使用,但现在当我尝试使用 gradle 4.10 时,它一直失败并出现以下错误。此外,如果我删除行“mergeServiceFiles('META-INF/services')”,则不会发生此异常。

这是我的任务定义

错误是:

0 投票
0 回答
62 浏览

java - 如何使用 ShadowJar 创建 Jar 文件

最近发现了 gradle 并且真的很难使用ShadowJar

尽管反复阅读它,因为我是一个缓慢的学习者(几周后才弄清楚如何添加 gradle 依赖项,但仍然对如何配置 ShadowJar 感到困惑)它一直显示错误

输入

输出

我偶然发现了将以下内容添加到 gradle build

它仍然会抛出错误,因为我完全被困了大约一个星期我希望有人可以帮助我

0 投票
1 回答
335 浏览

java - “发现任务':shadowJar'(类型'ShadowJar')的配置有问题。” 无法创建不和谐的机器人 jar

我正在尝试制作一个不和谐的机器人并用影子罐子导出罐子。

这是我的项目结构

当我尝试执行它时得到这个错误:(它说我没有设置属性 mainClassName,但我做了)

FAILURE:构建失败并出现异常。

  • 出了什么问题:发现任务':shadowJar'(类型'ShadowJar')的配置有问题。

没有为属性“mainClassName”指定值。

  • 尝试:使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。

  • 例外是:org.gradle.internal.execution.WorkValidationException:发现任务':shadowJar'(类型'ShadowJar')的配置有问题。在 org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:71) 在 org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:78) 在 org.gradle。 internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:78) 在 org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34) 在 org.gradle.internal.execution.steps.legacy。 MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:39) 在 org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:40) 在 org.gradle.internal.execution.steps.LoadExecutionStateStep。gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182) at org.gradle.execution.plan.DefaultPlanExecutor$ ExecutorWorker.run(DefaultPlanExecutor.java:124) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48 ) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) 原因:org.gradle.api.InvalidUserDataException:没有为属性“mainClassName”指定值。在 org.gradle.internal.execution.steps 的 org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:71)。

  • 在https://help.gradle.org获得更多帮助

1 秒内构建失败

0 投票
0 回答
71 浏览

elasticsearch - Elastic Search gradle 无法构建 shadowJAR

我是弹性搜索的新手。我昨晚下载了源代码,这样我就可以编译并查看代码,如果我觉得可以的话,也许可以贡献一下。我几乎可以在 OpenSuse 15.2 上编译它,只是我一直在运行以下有关 sql-cli:ShadowJar 的错误:

有人有任何想法吗?我查看了报告的错误部分,并在网上搜索过,但我没有看到任何类似问题的提及

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 投票
0 回答
68 浏览

java - Is it possible to shade single packages in Java/Gradle?

Hello StackOverflow community,

I'm trying to run a Discord bot inside of a Minecraft (Spigot) plugin. Every time I try to do so, I get the following error:

This error seems to indicate, that the package JDA isn't loaded, while building the .jar file. One way to fix this issue is by using ShadowJar, to create one fat .jar file. Unfortunately, this isn't ideal, because of the eventual size of the .jar. Using ShadowJar, the plugin will end up being 7000+KB, which greatly exceeds the maximum filesize of most Minecraft plugin sharing sites.

So, in short, I need to find a way to shade only some of the packages.

I've been unable to figure out how to do this using search, so I'm hoping this post will find its way to the right people.

For reference, I'm using the latest version of IntelliJ. I'm making the plugin using Gradle. Here's the code (so far), and the build.gradle file:

0 投票
1 回答
54 浏览

java - 基于任务的 Gradle 条件依赖

我有一些通用的 jdbc 相关代码,我想将它们单独打包到一个可运行的 jar 中,其中已包含所需的 jdbc 库,因此每种数据库类型都有一个单独的可运行 jar。源将保持不变,但打包的 jdbc jar 会有所不同。

例如 jdbc-app-postgres.jar 将只包含 postgres jdbc jar,而 jdbc-app-mysql.jar 将包含 mysql jdbc jar。

是否可以使用 gradle 处理任务或其他任何事情?

似乎应该可以使用自定义 shadowJar 任务和自定义配置,但据我所知,自定义 shadow jar 任务无法正确使用包含的完整依赖项(例如:https ://github.com/约翰伦格尔曼/影子/问题/448

理想情况下,解决方案看起来像,但任何对我有用的东西

0 投票
0 回答
45 浏览

android - 将影子 jar 设置为依赖项时,在 Android 库项目中发现重复的类,无法通过排除或选择优先解决?

这是我要包含的依赖项:

我看到了大约 100 个重复的类——其中一些包括 jena 和 jetty,尽管这是唯一的依赖项(除了 android 特定的那些)。另外,不应该排除组阻止这些依赖项来自安全性吗?

同样,这是一个影子罐子——我应该以不同的方式处理它吗?

谢谢!

0 投票
0 回答
179 浏览

java - :compileJava 在本地项目()依赖项上的多模块项目上一直失败“错误:包 xyz 不存在”

我正在尝试制作一个 MultiProject 项目,其中 1 个被共享(我在下面将其称为 Common)和 3 个其他项目,我只调用了 AB 和 D。我试图让它们编译成“胖 jars”(或所有的 jars其中包含的依赖项)通过 Shadow 插件。

我还想声明我对 gradle 很陌生。我正在使用:IntelliJ IDEA 2021 Gradle 6.8 Java 11

我的项目是这样布置的:

我在所有项目(Common 除外)上遇到的错误是它没有成功运行:compileJava。

当您在项目上运行 :shadowJar 或 :jar 命令时,它会成功完成 Common 项目的任务,然后立即使项目上的 :compileJava 任务失败。

我不相信它是影子插件,因为它发生在 :shadowJar 甚至运行之前。我尝试过使缓存无效以及重新导入和重做 build.gradle 文件,但没有成功。

我不确定格式化 build.gradle 文件的最佳方式,但在朋友的一些指导下,这就是它们的样子。

/build.gradle

/settings.gradle

/Subproject.A/build.gradle , /Subproject.Common/build.gradle & /Subproject.D/build.gradle

/Subproject.B/build.gradle

感谢您提供的任何帮助/指导。(即使只是为了整个gradle,因为我还在学习)

0 投票
0 回答
67 浏览

java - 如何为不依赖的胖 JAR(影子)生成 POM?

我正在构建一个模块,gradle sub-app:build它在./dist文件夹中创建了一个pom.xml. POM 包含所有依赖项,即使它们都包含在 JAR 中。我希望我pom.xml<dependencies>部分是空的,因为在运行 JAR 时我不需要下载这些东西。

这是一个 Spring Boot 应用程序。我正在使用影子 JAR 来创建胖 JAR。难道我做错了什么?