问题标签 [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.
gradle - Gradle:shadowJar 将依赖项排除在外
在尝试创建胖 jar 时,shadowJar 会遗漏很多依赖项。我从工作 pom.xml 创建了一个 build.gradle 文件。Maven 可以毫无问题地构建一个胖罐子。阅读 Gradle 关于构建 fat jar 的信息,shadowJar 插件似乎是推荐的方法。但是,我的 Gradle fat jar 给出了以下运行时错误:
显然,我的远罐子缺少了一些东西。果然,org/apache/hadoop/fs/PathId 和整个依赖目录都丢失了。尽管 pom.xml 没有明确包含 'org.apache.hadoop:hadoop-common' 依赖项,但我明确地将工件作为依赖项添加到我的 build.gradle 文件中,但仍然没有乐趣。
回答几个问题:
- 存储库中是否有 hadoop-common 工件?是的。
- 工件的命名版本是否在存储库中?是的
- 类 PathId 是存储库中的工件吗?工件的“jar xf”表示“是”。
由于 Maven fat jar 完美运行,并且 unjaring Maven fat jar 显示 PathId 类(以及 Gradle fat jar 中缺少的其他类),那么我的 build.gradle 文件和/或 shadowJar 插件和/或 Gradle 有问题。
build.gradle文件:
我的 build.gradle 文件做错了什么?
- 梯度 4.9
- 操作系统:Linux 3.10.0-514.el7.x86_64 amd64
- JVM:1.8.0_151(甲骨文公司 25.151-b12)
gradle - Gradle 和 Shadow 插件 - 在 shadowJar 任务之后将附加文件(.jar 文件)复制到最终 jar
问题描述:
我正在使用 Gradle Shade 插件,一切正常,并将资源文件复制到最终的 jar 中。但是,正如文档所说,它不能将其他.jar
文件作为资源包含在内,因为它无法将它们与依赖项区分开来。它会解开它们而不是。
我想做什么:
我想将文件夹(位于我旁边)中的额外.jar
文件复制到任务生成的最终文件中。tools
build.gradle
jar
shadowJar
问题:
如何扩展任务(shadowJar
)以将其他文件复制到生成的 jar 文件中。
gradle - 配置影子插件以构建仅包含依赖项的胖 jar
是否可以配置影子插件来构建仅具有项目依赖项的 uber jar?理想情况下我想跑步
并让它在我的build/libs/文件夹中生成两个 jar -
1) 一个只有项目类文件/资源的超薄 jar
2) 一个包含所有项目依赖项的胖 jar
gradle - Gradle,shadowJar:在任务中使用重定位
我有以下任务:
我想将所有类从 com/myCompany/project/event/** 重新定位到 com/myCompany/relocated/project/event/** (以便某些应用程序使用我的 jar 并拥有 com.myCompany.project.event 包定义将避免任何可能的冲突)
我发现它可以使用影子插件来完成,我尝试添加
在这个任务下,但它似乎不起作用。有人知道我应该在哪里添加这一行吗?
gradle - Ktor 和 Kotlin 多平台的胖 jar 问题
我有一个针对 Android 和 iOS 的 kotlin 多平台项目,并且最近集成了 ktor,以便共享库可以加载 Web 资源。它在 iOS 上运行,但在 Android 上出现此错误:
java.lang.NoClassDefFoundError: Failed resolution of: Lio/ktor/client/HttpClientJvmKt
我猜我的构建管道正在创建一个不包含 ktor 需要的所有依赖项的 jar。所以我正在尝试使用 gradle shadow 插件(com.github.jengelman.gradle.plugins:shadow:2.0.4
)制作一个胖罐子。这是我的任务:
jar 从 300Kb 跃升至 8.5Mb。
结果是一个新的错误:More than one file was found with OS independent path 'kotlinx/coroutines/CoroutineExceptionHandler.kotlin_metadata'
您会注意到我已尝试从 中排除文件shadowJar
,但它不起作用。
java - Gradle 5 的多个依赖版本
es4hadoop
对于 Apache Spark ,我需要支持同一库的 2 个不同版本(以支持旧版本) 。
- 版本
6.2.2
(https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch-spark-13_2.10/6.2.2) - 版本
6.3.2
(https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch-spark-13_2.10/6.3.2)
两个版本具有相同的依赖项(scala-lang 和 Spark)。
完全不确定它的命名,但我想要类似的东西:
所以我可以在同一个项目/JVM中使用新旧弹性搜索库。
我已经知道可以relocate
使用插件进行库shadowJar
,但是可以重新定位特定版本吗?
gradle - 运行时类路径中不存在 Gradle Shadow 插件依赖项
shadow
我使用Gradle Shadow Plugin 添加的范围配置依赖项:
依赖{影子“org.apache.flink:flink-java:$flinkVersion”}
根据文档,这个依赖不应该出现在影子 JAR 中(这是真的),它应该在编译类路径上(with 也是真的),但我对配置没有这种依赖runtimeClasspath
。我究竟做错了什么?
apache-spark - Gradle:在不丢失传递依赖的情况下遮蔽番石榴
我有一个多模块 Gradle 项目。一个模块(A)包含与数据库相关的类;另一个 (B) 包含 Spark 应用程序并依赖于 A。
Spark 依赖于 Guava 14.x。我的数据库类依赖于 Guava 28.x。
我需要能够在我的数据库模块中使用 Guava 28.x,并将该模块声明为 Spark 模块中的项目依赖项。
在模块 A 中对 Guava 进行着色(和重新定位)非常简单:
但是,当我将模块 A 声明为 B 中的依赖项时,例如:
最终出现在 B 上的JAR 是 AruntimeClasspath
的无阴影JAR。
当我指定带阴影的 JAR 时,例如:
A 的传递依赖项在 B 上均不可用runtimeClasspath
。
我的目标是在模块 A 中仅对Guava 进行着色和重新定位,以最小化 JAR 大小和构建时间。然后我需要阴影 JAR 以及 B 上可用的 A 的传递依赖项runtimeClasspath
。
java - 如何在没有影子插件的情况下创建 Micronaut 的 fat-jar?
最初是通过公司回购设置新的 Micronaut 项目的障碍,现在更多的是对嵌入式服务器如何引导的好奇心。我有一个带有gradle插件的Micronaut CLI 生成的项目,当我使用 -com.github.johnrengelman.shadow
build.gradle -
当我用任务和插件替换shadow
插件/任务时,我可以创建一个可执行的 fat-jar ,但它失败并出现以下错误 -jar
java
build.gradle -
- 我想了解的是嵌入式服务器 bean 是如何被注入影子插件的,而不是其他的?
- 如何在
fat-jar
不使用com.github.johnrengelman.shadow
gradle 插件的情况下创建嵌入式 Netty 服务器?
java - 着色弹性搜索高级java rest客户端
我可以遮蔽高级别的客户端吗?基本上我想在我的项目中使用最新的 Elastic Search Rest 客户端 (7.4) 和 Lucene 5.3.0 (Legacy)。
低级客户端(链接)是可能的,我想知道它是否可用于高级客户端。