问题标签 [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.
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 添加到类路径,但没有忽略原始依赖项。我怎样才能做到这一点?
spring-boot - spring boot-multi module fat jar
无法创建包含所有子模块 jar 的 Spring Boot 多模块项目的胖 jar。单个胖 jar 需要是可执行的。尝试使用 maven-shade-plugin 和 spring-boot-maven-plugin。它不会生成单个 fat jar,而是生成多个模块 jar。
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
java - Log4j2 fatjar 以编程方式配置
我试图让 log4j2 在 fatjar 中工作。在 intellij 中运行时一切正常,但是在构建我的 fatjar 时运行它就像
只有错误被记录到控制台,而没有任何东西被记录到滚动文件中。它接缝忽略了我的配置。
配置:
apache-commons-vfs - 'commons-vfs2',未添加到 fatJar
'commons-vfs2',没有被添加到 fatJar 中。
代码在 Intellij 上运行时有效。当我创建一个 fatJar 时,我找不到异常类。
线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/commons/vfs2/UserAuthenticator
Gradle 文件依赖项
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 时会导致错误)?找到忽略此类错误的方法?
感谢您的阅读。
gradle - 我如何用 gradle 构建 FatJar(没有贬低的功能)
我正在尝试使用本地 .jar 创建一个 FatJar。但是,我只找到了不推荐使用“编译”等描述方法的教程和指南。
做这样的事情的最新和最好的方法是什么?
需要完成的 .jar(包含所有依赖项)才能在远程服务器上运行它。
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
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 移动到单独的线程,它也运行得很快。代码如下:
还有一次尝试,我阻塞了主线程,直到子线程完成。它运行缓慢。代码如下:
我对这个问题感到困惑,感谢您的帮助。