问题标签 [fatjar]

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 回答
172 浏览

java - Maven - 从 JAR 文件加载资源?

在使用 Maven 将资源捆绑到 JAR 文件中时,我感觉我遗漏了一些关键的东西。我的目录结构是标准的 Maven 目录结构。

使用 IDE 时,我引用了资源文件\main\resources\public\images\path ,它工作正常,但是当 Maven css js 和图像不起作用并且站点看起来很糟糕时。如果我查看 jar,我会找到所有的 css、js 和图像。当我尝试在浏览器中打开 css 链接时,出现 404 错误。这是我的 pom.xml https://shrib.com/#XGISjWGN7QRfa2EIZD4r。在eclipse中它工作正常。我Spark.staticFiles.location("public");用来加载资源。

0 投票
1 回答
173 浏览

vert.x - 如何让 HOCON 配置文件格式在部署为 fat jar 的 Vert.x 中工作?

我想在部署为 fat jar 的 Vert.x 应用程序中使用HOCON格式进行配置。我面临着与这个类似问题中描述的相同的问题

但是我应用了gradle插件“io.vertx.vertx-plugin”(v1.0.1)并成功地将线路io.vertx.config.hocon.HoconProcessor放入 META-INF/services/io.vertx.config.spi.ConfigProcessorjar中。

我仍然得到例外。在 jar 中正确捆绑 HoconProcessor 类还需要什么?

0 投票
1 回答
2904 浏览

gradle - gradle:在制作 fatJar 时排除依赖项

关于如何从 fatJar 中排除单个文件有很多重复的答案。通常,该文件被排除在 META-INF 中,并且它们被排除是因为文件名冲突,或者因为它是从依赖项 libarar Jar 文件复制的签名,该签名对新创建的 Jar 文件无效。

maven 示例: 如何判断哪个签名的 jar 导致 maven-shade-plugin 失败?

gradle 示例: Removing Jar Signatures in Gradle Build

但是,这些解决方案仅单独删除了有问题的文件。

我们如何制作一个排除特定依赖库(而不是该库中的单个文件)的 fatJar?

例如,在问题36226033中,很容易排除从 BouncyCastle 复制过来的签名,但是有没有办法bcprov-jdk15on-*.jar完全排除依赖库,以便用户必须拥有可用的库才能执行生成的 fat Jar?

事实证明这不起作用:

使用exclude('**/bcprov-jdk15on-1.62.jar'),该 jar 文件的内容仍会复制到生成的 fat jar 中。

谢谢。动机是将我的 Java 应用程序发送到提供自己的安全库 BouncyCastle 的系统(例如 Debian Linux),而不是嵌入该安全库的未签名副本。

0 投票
1 回答
43 浏览

osgi - 将整个 JDK8 包含在 OSGI 包中并部署在运行在 JDK 9(或更高版本)环境中的 OSGI

我曾担任过一些基于 OSGI 的 AEM 开发人员,这就是我的基本(而且有点过时)想法的来源。在一份新工作和完全与 AEM 无关的项目中,这是我需要做的。

  • 基于 JDK8 兼容的 3rd 方库构建服务库
  • 将它们部署为 tomcat 上的 spring web-app,在 JDK9 或更高版本上运行。

3rd 方库是许可软件,由于某些法律僵局而无法升级。由于 Java API 问题,在 JDK9 上直接部署失败。

理论是将整个 JDK8 运行时包含为捆绑依赖项,并将其作为 OSGI 捆绑包部署在兼容 JDK9+ 的 OSGI 运行时框架上。

这是我为捕捉主要思想而创建的一个小图表: 在此处输入图像描述

这可能有效吗?理论上这是成立的,因为每个 OSGI 包都使用自己的类加载器,因此第 3 方库不应该因为 Java API 问题而中断。此外,计划是使用 Maven 创建一个胖(超级)罐子。

另一个困扰我的问题:创建一个包含 JDK 的 uber-jar 甚至是一件事吗?我以前创建过 uber-jar,但不确定如何包含 JDK。其中的某些部分似乎不正确。有什么建议吗?

感谢大家!

0 投票
2 回答
924 浏览

spring-boot - 从 jar 运行时,Spring-boot jersey 崩溃,找不到文件异常。从源代码运行它没有任何问题

当我从 Idea 运行它时,效果很好。我使用gradle bootJar. 当我运行它时,我得到:

我知道这是一个与扫描罐子内的球衣问题有关的问题,我已经在网上尝试了所有可能的解决方案,我可以找到 fe:

无法从 spring-boot jersey 运行生成的 jar

https://www.ivankrizsan.se/2016/12/06/jersey-and-spring-boot-standalone-jar-files/

https://github.com/spring-projects/spring-boot/issues/7496

https://github.com/spring-projects/spring-boot/issues/3260

Spring Boot 和 Jersey 产生 ClassNotFound

https://github.com/jersey/jersey/pull/196

https://github.com/spring-projects/spring-boot/issues/1345

尝试从 jar 文件运行时,Spring Boot 应用程序不会运行

我什至添加了: https://docs.spring.io/spring-boot/docs/1.5.x/reference/htmlsingle/#howto-extract-specific-libraries-when-an-executable-jar-runs来构建文件。

我的项目是多模块的。它由

Api 仅与 jaxrs 接口有关,服务器是带有球衣的 spring boot。这里有详细的文件列表:

我还删除了 api 项目,并将其所有类移至服务器项目,但错误仍然存​​在。

这是我的球衣 conf 课:

我的选择已经不多了。请帮助我。

0 投票
0 回答
428 浏览

scala - 通过 RestClusterClient 发送作业时出现 ClassNotFoundException

当我手动将它上传到我的集群(使用 UI)时,我有一个运行良好的 flink 作业。

但是当我尝试通过 RestClusterClient 部署它时,它给我一个 ClassNotFoundException 失败(我确实看到该作业出现在集群上,并且失败了)。

以下是jobmanager的日志:

有问题的类确实不是 jar 中的包(它是一个 scala 匿名函数类)。 在此处输入图像描述

但是……为什么与使用完全相同的胖罐子的 RestClusterClient 相比,手动启动作业时运行良好?

另外,在将 flink 日志级别设置为 DEBUG 时,我在 IntelliJ 中看到很多日志,如下所示:

...这似乎表明至少“驱动程序”在本地运行,而任务被发送到集群(另一种解释是集群将所有日志发送回 RestClusterClient,我发现它没有链接)

你知道是什么原因造成的吗?我怎样才能让它发挥作用?

在此先感谢您的帮助。

此致,

劳伦特。

0 投票
1 回答
336 浏览

java - Apache FOP 无法通过 fatJar 中的 URI 找到外部图像

我正在尝试使用 Apache FOP 2.2 生成 PDF,但在使用完整 URI 时遇到了一些问题,例如
file:///Users/mac/Desktop/image.png.
这是 myTemplate 的一部分。

和我的剧本

我正在使用 Kotlin,但这并不重要。我通过 IDEA 渲染得很好,但是当我使用 shadowJar Gradle 插件创建胖 Jar 时,我得到了
SEVERE: Image not found. URI: file:///Users/mac/Desktop/image.png. (No context info available)

为什么我不能在 fatJar 中使用 URI 以及如何修复它?

UPD

我发现我的问题与 ImagePreloader 有关。例外

但它只是在 Jar 里面!怎么可能?

0 投票
0 回答
395 浏览

scala - 创建一个Fat jar来打包多个jar

我正在使用 Databricks 集群来执行 spark 应用程序。
我的应用程序对几个库有一些依赖,但现在这些库不能通过 Databricks 安装新库选项使用。
我知道通过 Fat jar 或 Uber jar 我可以添加多个库并将其传递给集群。
我还知道要创建一个胖 jar,你必须提供一个主类,所以我在本地系统中编写了一个简单的程序,并将依赖项添加到 build.sbt 文件中。
我正在使用“sbt assembly”命令来创建 fat jar。
请注意,我没有在示例程序中使用该库。

我的目标是创建一个胖 jar,它继承其中所有必需的 jar,以便我的其他基于 Spark 的应用程序可以通过这个胖 jar 访问这些库。

我做了以下步骤。

'示例程序'

'构建.sbt'

'汇编.sbt'

但我不确定我所做的一切是否正确,是否有助于在 Databricks 集群中执行我的 spark 程序。

Q1)一个库可能依赖于另一个库,所以如果我在 SBT 中提到了库名称,那么它会加载其他依赖库吗?
Q2)如果我不使用现有程序的库,它是否可用于集群的其他程序。
Q3)在集群中安装 Fat jar 后-我如何访问库..我的意思是我将通过哪个名称访问库..导入命令...

抱歉,如果我的问题如此愚蠢。谢谢

0 投票
1 回答
1134 浏览

java - 当从 Fat-JAR/Uber-JAR 运行代码时,异常 `java.lang.IllegalStateException: zip file closed`

我的软件有问题,在构建和运行它作为使用 Maven 构建的 FatJAR/UberJar 时。在这种情况下,我收到此错误:

但是,当直接从 IntelliJ 启动时,该软件可以正常工作。

我在这里创建了一个最小的示例来重现错误:

https://github.com/michaelmell/bugfix_003-ImageJFunctions_show-call-fails-in-UberJar

这个问题在某种程度上与这个调用有关(请参阅 Git 存储库以获取完整代码):

我怀疑我需要调整阴影pom.xml,但我对配置太陌生。有关如何构建 JAR 和完成着色的详细信息,请参阅pom.xml和。deploy.sh

我还使用 IntelliJ 进入了 JAR,并在依赖项中设置了一个断点URLImageSource::getDecoder来检查失败的 URL。这是:

它存在于 JAR 文件中:icons/imagej-256.png. 请注意,这是一个图标,它是 imagej 依赖项的一部分(不是我介绍的)。

我真的不知道接下来要尝试什么,并欢迎任何建议!

0 投票
0 回答
134 浏览

java - 如果两个文件同名和包,fat jar(spring boot)如何解析类路径

我正在使用 gradle 脚本构建一个 spring boot fat jar。

我的胖罐子有两个库,其中包括 -

  1. 开源.jar
  2. open-source-modified.jar (在此我对早期 jar(#1) 中的文件进行了一些更新,这些文件具有相同的名称和相同的包结构)

两个 jar 都存在于 gradle 依赖部分中,例如

如何确保在启动应用程序(java -jar fatjar)时加载 open-source-modified.jar 中的修改文件,而不是 open-source.jar 中具有相同名称和包的文件。

如果它不是一个 fatjar,我们可以通过构造类路径并将 modified.jar 放在类路径中的实际 jar 之前来实现相同的目的。但是我们如何使用 fatjar 实现相同的目标?