【问题标题】:executing runnable JAR on PC's without JDK在没有 JDK 的 PC 上执行可运行的 JAR
【发布时间】:2020-03-15 08:49:21
【问题描述】:

我有一个可执行的 JAR。 Ofcouser 我最后安装了 JDK 我给出以下命令从命令提示符运行我的 exe JAR。

1 使用 JRE :-

C:\Users\userName\Desktop\Utility\latest>"C:\Program Files\Java\jre1.8.0_161\bin\java.exe" -jar Utility.jar

2 使用JDK

C:\Users\userName\Desktop\Utility\latest>"C:\Program Files\Java\jdk1.8.0_161\bin\javaw.exe" -jar Utility.jar

两者都在我的桌面上工作,但如果我尝试 #1 在只有 JRE 版本(1.8 及更高版本)的不同机器上运行可执行 JAR,它不会被打开。 我尝试了以下链接,但有些链接说要下载一些安装程序,但我不想得到它。有没有什么办法。或者我的可执行 JAR 有问题?

How can I make my executable JAR not need JDK to run Run a JAR file using a specific JRE

清单版本:1.0 Rsrc-Class-Path:./commons-collections4-4.3.jar poi-3.17.jar poi-ooxm l-3.17.jar xmlbeans-3.0.1.jar curveapi-1.06.jar poi-ooxml-schemas-3。 17.jar poi-examples-3.17.jar poi-excelant-3.17.jar poi-scratchpad-3.1 7.jar commons-codec-1.10.jar commons-collections4-4.1.jar commons-log ging-1.2.jar 曲线api-1.04.jar junit-4.12.jar log4j-1.2.17.jar xmlbe ans-2.6.0.jar ooxml-schemas-1.3.jar 类路径:./commons-collections4-4.3.jar poi-3.17.jar poi-ooxml-3.17.jar xmlbeans-3.0.1.jar curveapi-1.06.jar poi-ooxml-schemas-3.17.jar poi-examples-3.17。 jar poi-excelant-3.17.jar poi-scratchpad-3.17.jar commons-codec-1.10.jar commons-collections4-4.1.jar commons-logging-1.2.jar curveapi-1.04.jar junit-4.12.jar log4j-1.2.17.jar xmlbeans-2.6.0.jar ooxml-schemas-1.3.jar Rsrc-Main-Class:DataProcessor.DataProcessor.App 主类:org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoade

【问题讨论】:

  • 如果已经设置了java home,则不需要给出完整路径。
  • 但即使没有 JDK,它也无法在其他桌面上运行
  • 在其他系统中,转到命令提示符并输入java -jar utility.jar 并查看任何错误。
  • 线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/log4j/Logger at DataProcessor.DataProcessor.App.(App.java:73)
  • 按照上述命令使用-cp 选项并给出log4j jar 文件的路径或将log4j 文件复制到实用程序jar 文件所在的同一位置。

标签: java


【解决方案1】:

听起来您遇到的问题不仅仅是没有 JDK 或不知道目标系统上的 JRE 所在的位置,还在于您还没有包含代码所具有的依赖项。

您拥有的 jar 文件在清单文件中包含详细信息,该文件告诉 JVM 类路径和要加载的主类。如果您查看Rsrc-Class-Path,它是从当前目录添加罐子。如果您要发送包含预期位置中所有 jar 的整个文件夹结构,这很好。但它不适用于 jar。

为了使单个 jar 可以在没有任何额外 jar 的情况下运行,您需要重新打包 jar。有两种常见的方法来做到这一点

  1. UberJar - 项目的类与从所有依赖项中提取的类组合到一个 jar 中

  2. JarInJar - 将您的 jar 和所有依赖 jar 放入 jar 中,并使用自定义类加载器从 jar 中的 jar 中加载类。

我不确定您使用的是什么构建工具,但对于 Maven,Shade Plugin 将创建一个 UberJar。

我个人建议对此reason 使用JarInJar 选项。 Spring Boot Maven Plugin 是我认为最简单的方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-27
    • 2018-06-30
    • 2013-05-18
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    相关资源
    最近更新 更多