问题标签 [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 回答
157 浏览

java - 运行时来自另一个 jar 的 Uber jar 的依赖项

问题:我的 Uber Jar / Fat jar 太大。包含的依赖项使我的 jar 大小超过 20 MB。因此,将文件上传到我正在开发的测试 VPS 通常需要几秒钟的时间。我的目标是减小 jar 文件的大小,以便我可以快速上传和测试我的代码。我的代码本身只有 500 kb 左右。由于我需要 jar 大小为 20 MB 的依赖关系。

尝试的解决方案:我知道在 gradle 中,compileOnly 范围是“在编译时需要其 API 但其实现由消费库、应用程序或运行时环境提供的依赖项”。所以我想尝试用一个空的主类创建一个空的 uber jar,但它具有我项目使用的所有依赖项。然后,我的想法是我将在运行时使用这个 uber jar 从我的实际代码 jar 中访问我的项目所需的依赖项。

问题:现在的问题是,我不知道如何在运行时将这个 uber jar 中的“实现”提供给包含我的代码的“thin jar”。我该如何解决这个问题?我知道这是可能的,因为根据我在 Minecraft 插件开发方面的背景,我知道其他插件 jar 中的方法的“实现”确实是在运行时提供的。这允许插件 jar 的大小更小。

0 投票
1 回答
121 浏览

java - Unable to build FatJAR using the shadowJar plugin in Gradle

I have tried pretty much everything and for some reason, no JAR file gets built under my build folder.

Here is build.gradle:

Can anybody help me out with this?

For extra context, here is the output from the console when I run the build.gradle script:

0 投票
1 回答
60 浏览

java - 在没有 Kotlin 依赖项的情况下编译 Java JAR?

我有带有 JAR 可执行文件作为输出的 Kotlin 项目。是否有可能只有这个最终的 JAR Java?我的意思是,如果我可以将 Kotlin 编译成纯 Java,那么我不需要在我的 JAR 中包含 Kotlin 依赖项,因为它们非常大(几乎没有代码 = 800kB)

在此处输入图像描述

0 投票
1 回答
46 浏览

java - 为什么我的 java api 不适用于 gradle 'from components.java' 但与 'from components.kotlin'

使用存储库https://repo.theprogramsrc.xyz/repository/maven-public/如果您导入工件xyz.theprogramsrc:simplecoreapi:0.0.1.1-SNAPSHOT并尝试导入类 xyz.theprogramsrc.simplecoreapi.global.module.Module,您会注意到 IDE 无法识别导入,但依赖项位于依赖项列表。

现在,如果您使用该版本尝试相同的操作,0.0.1.2-SNAPSHOT您会注意到现在您可以使用导入。

有什么不同?第 124 行,from components.java不工作,但from components.kotlin工作,我的问题是,如果我使用components.kotlin它不包含阴影或实现,只有源代码,但如果我使用components.java它包含所有内容,但 ide 将无法识别进口。我认为这可能是 Kotlin 和 shadowjar 的问题......

这是我的项目供参考:GitHub:TheProgramSrc/SimpleCoreAPI

编辑

我刚刚确认这个问题是 IntelliJ 问题,为什么?我真的不知道,一旦在我创建的问题中可用,我将在此处发布答案:

https://youtrack.jetbrains.com/issue/IDEA-284719

0 投票
0 回答
25 浏览

scala - 使用 Gradle 构建 shadowJar 时复制文件夹

我正在使用 Gradle 构建一个包含所有依赖项的 ShadowJar。我正在定义另一个目录config作为资源而不是src/main/resources.

我的build.gradle代码块将目录下的config子目录作为资源包含在 jar 中。

现在在构建之后,目录的子目录config包含在带有子目录路径的 jar 中。

我们可以将这些子目录重命名/复制到不同的路径吗?我想qa/application.conf搬进/demo_app/qa/application.conf

我尝试在其中包含以下任务,build.gradle但它不起作用。

任何帮助,将不胜感激。!

0 投票
0 回答
17 浏览

java - 检查 FatJar/ShadowJar 中使用的版本

因此,由于 log4j-issue 非常广泛,我想知道如何确定 shadowjar 中当前使用的版本。

我正在使用com.github.jengelman's shadow v5.2 创建一个胖 jar,但无法确定使用了哪个版本的 log4j 或来自多个 .jar(poi、saxon、junit)的任何其他类。当然我有原始 .jar 的 fat jar 是由什么制成的,但我仍然想知道是否有办法显示打包到 shadow jar 中的依赖项,或者是否有办法确定它们的版本完整的罐子完成了。

到目前为止,我找不到任何方法来查看 jar 中使用了哪个版本的类,不幸的是,在打包 jar 时似乎也无法列出所有版本。

检查版本的实际原因是影子 jar 的影子文件夹中的 log4j。因此,在我对原始 jar 进行 .class 文件的一些字节差异之前,我希望有一个更好的解决方案可以将它们记录在构建过程中,所以有没有其他方法可以查看哪些版本的依赖关系在里面?

0 投票
1 回答
63 浏览

java - 为什么 shadowJar minimise() 没有删除所有未使用的依赖项?

我正在尝试从一个项目中生成两个不同的 jar,该项目是一个 monorepo,其中包含对这个世界上许多伟大事物的依赖关系,所以不用说我不希望这些可执行 jar 具有大尺寸,而是希望它们只包含他们实际使用的类。

我按照这里的说明进行操作https://imperceptiblethoughts.com/shadow/configuration/minimizing/

为了测试shadowJar任务是否真的有效,我创建了一个简单的 Main java 文件,它实际上只使用了 java SDK。

并添加了实际的影子 jar 任务并将其指向一个主类

它正确生成了 uber jar(我能够简单地运行它java -jar ...),但是文件的大小是 10Mb。

然后我生成了一个没有minimize()部分的新版本,它是 15Mb。

我在这里做错了什么吗?也许我对这个工具期望太高,而proguard(设置起来很乏味)是唯一的方法吗?

0 投票
0 回答
7 浏览

android - 对本地 .jar 文件使用 kapt 不起作用

我正在尝试kapt为我的 Android Studio 项目使用本地 jar 而不是外部 repo 依赖项来进行测试。具体来说,我正在尝试对 Dagger 2 使用注释处理。我已经下载了com.google.dagger:dagger:2.16(dagger-2.16.jar) 和com.google.dagger:dagger-compiler:2.16(dagger-compiler-2.16.jar) 的 jar 文件并将它们添加到应用程序的库中。

但是,我的应用程序的 build.gradle 中的以下代码不会生成 java 代码(这里,我正在寻找 DaggerComponent)

虽然以下确实有效。

我试过用ShadowJar一个胖罐子来消费它kapt,但是注释处理仍然没有发生。

谁能告诉我为了实现这一目标应该改变什么?