【问题标题】:java - Sharing an executable .jar filejava - 共享一个可执行的 .jar 文件
【发布时间】:2015-06-23 02:48:49
【问题描述】:

我在 NetBeans 中编写了一个程序,现在想与我的同事分享。但是,当他尝试在他的计算机上运行它时,会收到一条错误消息:

"Could not find the main class: excelcomparator.ExcelComparator. Program will exit."

这是令人困惑的部分:我在装有 NetBeans 的笔记本电脑上编写了此代码,为了确保它正常工作,将 dist 文件夹复制到闪存驱动器上,然后在我的计算机上运行它。它工作得很好。当我将它通过电子邮件发送给我的同事时,他收到了这个错误。

根据我所见,一些解决方案是从命令行运行 .jar。虽然这可能有效,但我需要该文件是可双击的。

我通过电子邮件将压缩文件夹中的文件发送给我的同事,解压缩整个文件夹是否也会弄乱 .jar 文件(不明白为什么应该这样做,但包含任何可能有帮助的内容)?

这是 .jar 文件中的 MANIFEST.mf。文件末尾有一个回车,只是没有很好地复制到这个文本框中:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.7.0_71-b14 (Oracle Corporation)
Class-Path: lib/poi-3.12-20150511.jar lib/poi-examples-3.12-20150511.j
 ar lib/poi-excelant-3.12-20150511.jar lib/poi-ooxml-3.12-20150511.jar
  lib/poi-ooxml-schemas-3.12-20150511.jar lib/poi-scratchpad-3.12-2015
 0511.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: excelcomparator.ExcelComparator

我发送了 dist 文件夹,其中包括 lib 文件夹,其中包含所有其他 .jar。

如果我需要包含任何其他相关信息,请告诉我。谢谢!

【问题讨论】:

  • 您的程序依赖于许多应该位于 lib 文件夹中的 jar 文件。您是否也将它们发送给您的同事?异常的完整堆栈跟踪是什么?从命令行使用 java -jar yourjar.jar。
  • @JBNizet 我的机器上没有抛出异常,我的同事也没有从命令行运行它。出现的唯一错误是带有错误消息的弹出窗口。我确实包含了额外的 jar 文件,并相应地将其编辑到了问题中。谢谢!
  • 1.您的同事应该将 lib 文件夹与他尝试运行的 jar 文件放在同一目录中。他有吗?如果他只有dist文件夹,是不会捡到jar文件的 2.你的主类在包里吗?
  • 让他从命令行运行它。另外,发布jar tvf yourjar.jar的结果。

标签: java netbeans jar


【解决方案1】:

如果您希望 JAR 可以双击,那么您应该将所有依赖项捆绑到一个 JAR 文件中。

您可以使用 maven 程序集插件实现此目的:http://maven.apache.org/plugins/maven-assembly-plugin/usage.html

如果您不知道如何使用 Maven,Eclipse 有一个不错的向导。我不确定它在 NetBeans 上是如何工作的,但同样的问题已经被问过很多次了,例如这里Netbeans Export to Jar, include all library files

【讨论】:

  • 一个更有用的链接可能是:arunasujith.blogspot.de/2011/08/…
  • 我使用 eclipse,(文件导出),从来没有遇到过问题。但是,是否可以双击 jar 可能取决于计算机的安全设置。有时您必须右键单击并以管理员身份运行。
  • 标准 jar 格式不允许在 jar 文件中嵌入 jar 文件。这将需要使用特殊的类加载器。将库捆绑到 jar 文件之外是标准的做法。
  • 不知道我是怎么错过这个问题的,我找了好几个小时……想了想,与其在 NetBeans 中模拟 Eclipse 函数,不如在 Eclipse 中完成。希望这会奏效。
  • @JBNizet 如果他使用闪存驱动器分发他的程序,我认为他使用“非标准”方式并使用 Eclipse 向导提供的自定义类加载器是公平的。跨度>
【解决方案2】:

为了完成这个,我会写出最终对我有用的东西:

根据 Franz Becker 的建议 based on this question,我将整个程序捆绑到一个 .jar 文件中。

我在同事的计算机上仍然遇到同样的错误,因此根据我看到的其他建议,我猜测问题是基于我们计算机上安装的不同版本的 Java。我所做的是将程序重新编译为早期版本的 Java,它适用于从那时起及以后的任何版本(其他人建议在用户计算机上重新安装 Java。这在大多数情况下有点太不现实了)。

要更改合规级别(在 Eclipse 中):右键单击 Package Explorer 中的项目,选择属性。在左侧的选项中选择 Java Compiler。取消选中“Java 构建路径”上的“使用执行环境中的合规性 [默认目标 JavaSE]”,并将“编译器合规性级别”更改为您选择的级别(我选择了可​​用的最低选项 1.3,因为我假设任何高于此不会是问题)。

然后我导出了文件(文件 -> 属性 -> Java -> 可运行的 JAR 文件),并得到了一个工作的、可点击的 .jar。

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2010-11-06
    • 2015-09-05
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多