问题标签 [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.
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 的大小更小。
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:
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 问题,为什么?我真的不知道,一旦在我创建的问题中可用,我将在此处发布答案:
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
但它不起作用。
任何帮助,将不胜感激。!
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 文件的一些字节差异之前,我希望有一个更好的解决方案可以将它们记录在构建过程中,所以有没有其他方法可以查看哪些版本的依赖关系在里面?
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(设置起来很乏味)是唯一的方法吗?
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
,但是注释处理仍然没有发生。
谁能告诉我为了实现这一目标应该改变什么?