问题标签 [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 投票
0 回答
95 浏览

java - 运行胖 JAR 时包含运行时 JAR

很确定这是一个重复的问题,但找不到我正在寻找的答案。

我正在尝试使用 WebHook 扩展独立运行 WireMock。两者都打包为 JAR 文件。第一个,wiremock-jre8-standalone-2.28.1.jar是一个可运行的胖罐子,当我输入时它就像一个魅力:

WebHook extensions ( wiremock-webhooks-extension-1.0.0.jar) 是一个包含类的普通 JAR org.wiremock.webhooks.Webhooks。我正在尝试以这种方式运行 WireMock:

我收到以下错误:

我从这个问题中得到的是,如果-jar在命令行上指定,将-cp被忽略并MANIFEST改为使用。所以我试过了

但得到:

当然,HttpClient 是 WireMock 依赖项的一部分。WireMock 独立 JAR 清单如下:

我想运行胖 JAR,将外部 JAR 添加到类路径,但没有忽略原始依赖项。我怎样才能做到这一点?

0 投票
0 回答
54 浏览

spring-boot - spring boot-multi module fat jar

无法创建包含所有子模块 jar 的 Spring Boot 多模块项目的胖 jar。单个胖 jar 需要是可执行的。尝试使用 maven-shade-plugin 和 spring-boot-maven-plugin。它不会生成单个 fat jar,而是生成多个模块 jar。

0 投票
0 回答
81 浏览

java - pom.xml 有效(找不到或加载主类/没有主清单属性)

我已经为此花费了几个小时,但我无法完成它。对于 Maven/JavaFX 应用程序,我正在尝试获取可执行 jar。但是,每当我使用其依赖项构建它并执行它时,java -jar Kvn-jar-with-dependencies.jar我都会遇到以下错误之一:

执行 Fat Jar 时:

  • 错误:无法找到或加载主类 com.qohelet.kvn.MainApp

执行显然不包含依赖项的 Jar 时

  • 没有主要清单属性,在 Kvn.jar 中

我使用 netbeans 8.2 进行开发(这是可以与 OpenJDK 1.8.0 一起运行的最后一个版本),我可以随时使用(或者更好,Netbeans 使用它)运行我的项目:

由于 mvn 更改为 ssh 导致获取依赖项出现问题,但我之前什至没有安装 maven,它仍然有效。(Maven 依赖项因 501 错误而失败),现在项目标头中的地址之一包含 https 而不是 http,但我认为这不是什么大问题。

目前 pom.xml 看起来像这样,这是https://maven.apache.org/plugins/maven-assembly-plugin/usage.html的编辑版本:

这个版本给了我提到的错误。

我发现了一个不同的建议,其中 -Section 的设置就像显然工作了一段时间一样,但由于某些原因,它似乎没有被建议,因为 Netbeans 抱怨:

问题:项目问题:项目的主神器是通过maven-shade-plugin处理的,可解析方式:org.netbeans.modules.maven.problems.ProblemReporterImpl$MavenProblemResolver@a5534d unresolved

几个月前,该项目仍然可以使用以下 -Section 构建,但这主要是反复试验的结果,直到我得到工作结果:

我不确定我是否正确解释了这一点,但这可能是由于 Java 的版本更改造成的吗?SO提供了很多答案,但我无法得到任何工作。

https://stackoverflow.com/a/589111/2516892让我得到完全相同的错误:

https://stackoverflow.com/a/4323501/2516892类似,以下构建部分不返回 Fat Jar 但相同的错误。

什么是最先进的?应该如何正确完成?

谢谢

编辑(1):Jar 的结构对我来说看起来不错。22Mb 似乎也是一个合理的大小。它是一个文件夹/com/qohelet/kvn/,其中包含MainApp.class

使用https://stackoverflow.com/a/574650/2516892并编译

奇怪地导致了一系列错误,比如

这很奇怪,因为安装了 JavaFX,我可以毫无问题地运行该程序。Netbeans 并没有太大的不同:

但这会产生一个只有 254Kb 的 jar,我假设它不包含依赖项。包括 make-assembly-part 只会产生相同的错误。

使用此处列出的第二个https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html只是同样的错误:Error: Could not find or load main class com.qohelet.kvn.MainApp,存档略小(19Mb),它再次包含文件夹结构:/com/qohelet/kvn/,其中包含 MainApp.class

0 投票
1 回答
27 浏览

java - Log4j2 fatjar 以编程方式配置

我试图让 log4j2 在 fatjar 中工作。在 intellij 中运行时一切正常,但是在构建我的 fatjar 时运行它就像

只有错误被记录到控制台,而没有任何东西被记录到滚动文件中。它接缝忽略了我的配置。

配置:

0 投票
0 回答
49 浏览

java - 将 JavaFX 打包到可执行的胖 JAR 中,但 Maven 不会生成有效的类路径

我正在尝试将我的 JavaFX 应用程序打包到一个可执行的胖 JAR 中,但它从不工作。我已经尝试过在网上找到的几个指南,包括在 SO 上的 aswers,但我没有运气。我可以设法正确设置主类,但类路径总是丢失,然后抛出 JavaFx 运行时组件丢失的错误。我现在正在使用maven-shade-plugin(我尝试过其他插件),这里是配置pom.xml

编辑:根据评论中的要求,我添加了 3 个我使用的链接,但没有一个有效。另请注意,在过去两周左右的时间里,我尝试了其他来源。

链接 1 链接2 链接3

0 投票
0 回答
17 浏览

apache-commons-vfs - 'commons-vfs2',未添加到 fatJar

'commons-vfs2',没有被添加到 fatJar 中。

代码在 Intellij 上运行时有效。当我创建一个 fatJar 时,我找不到异常类。

线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/commons/vfs2/UserAuthenticator

Gradle 文件依赖项

0 投票
1 回答
75 浏览

maven - Maven 程序集:忽略签名的依赖项

我发布这个问题是因为我目前正在使用 Maven 来构建胖罐子。我们所有的项目都是插件,所以我们的目标是从 MANIFEST.MF 文件中获取所有依赖项,以便构建胖 jar。
第一个问题是我们的一些依赖项在系统范围内(例如 com.google.guava),当我们构建中间 jars 时,进一步的项目需要它们,它们在提供的范围内。所以我决定避免使用 shade-plugin,因为它似乎无法配置范围。
我选择使用 maven-assembly,因为它似乎是处理我们构建的最有表现力的方式,使用以下自定义程序集文件来收集来自所有范围的依赖项:

我不得不将 unpack 设置为 true 因为我们需要可执行 jar,而且在使用 maven-assembly 时似乎也无法轻松处理“jar-in-jar”加载(如果你有任何解决方案,我也很感兴趣)。
我遇到的问题是,对于一个特定的项目,我们需要在我们的一个 MANIFEST.MF 文件中使用 bundle org.apache.commons.lang;bundle-version="2.6.0" ,它会以某种方式导致异常:

执行目标 org.apache.maven.plugins:maven-assembly-plugin:3.3.0:single 的组装失败:org/apache/commons/lang/math/JVMRandom.class 的 SHA1 签名文件摘要无效

当我调查时,我在依赖项中发现了一个签名的清单文件 + ECLIPSE_.RSA & ECLIPSE_.SF,所以我在解压时尝试至少排除这些文件:

对于每个标签,但我仍然遇到相同的错误。
最后,我有点不知道我应该做什么。忽略依赖(在运行最终的 jar 时会导致错误)?找到忽略此类错误的方法?
感谢您的阅读。

0 投票
1 回答
54 浏览

gradle - 我如何用 gradle 构建 FatJar(没有贬低的功能)

我正在尝试使用本地 .jar 创建一个 FatJar。但是,我只找到了不推荐使用“编译”等描述方法的教程和指南。

做这样的事情的最新和最好的方法是什么?

需要完成的 .jar(包含所有依赖项)才能在远程服务器上运行它。

0 投票
0 回答
109 浏览

spring-boot - Spring Boot 应用程序 fat jar 因“无法打开根 Jar 文件”而失败

在编译我的 Spring Boot 应用程序后,由于以下错误,mvn clean install我无法运行 fat jar :java -jar target/myapplication-1.0.jar

解压应用程序 fat jar,据称丢失的spring-webmvc-5.3.1.jar jar 文件可以BOOT-INF/lib/spring-webmvc-5.3.1.jar.

另一方面,应用程序可以从 Spring Tool Suite 4 IDE 或发布mvn spring-boot:run.

注意*fat jar 路径spring-webmvc-5.3.1.jar. 我想这是错误,但我不知道这个符号来自哪里。

任何想法?

这是我的 pom.xml

0 投票
1 回答
126 浏览

java - 打包为 fatjar 的 Java 代理使用 JDK8 运行缓慢

我们正在使用 Java 代理来增强应用程序中的一些方法。代理依赖于其他jar,为了方便,我们将代理和依赖打包成一个fatjar,然后通过自定义的类加载器加载依赖的jar。程序可以正常启动,但是很慢,完全启动需要几分钟。(我统计了每个类的加载时间(ClassLoader中的loadclass()),发现有些类的加载需要几百毫秒)。同样,当我使用spring boot(也是具有相同依赖项的fatjar)时,它会快得多。

JDK的版本是1.8.0_261。

premain方法如下:

而AgentLauncher的代码如下:

在执行标有 (1,2) 的代码时,加载一个类需要很长时间(几十或几百毫秒)。计算加载一个类的时间代码如下:

而且我发现当程序用JDK11运行时,它运行得很快。然后我将版本改回 JDK8,但将代码从 premain 移动到单独的线程,它也运行得很快。代码如下:

还有一次尝试,我阻塞了主线程,直到子线程完成。它运行缓慢。代码如下:

我对这个问题感到困惑,感谢您的帮助。