java-共享可执行的.jar文件

java-共享可执行的.jar文件,java,netbeans,jar,Java,Netbeans,Jar,我用NetBeans编写了一个程序,现在想与我的同事分享。但是,当他尝试在计算机上运行时,他会收到一条错误消息: "Could not find the main class: excelcomparator.ExcelComparator. Program will exit." 让人困惑的是:我在装有NetBeans的笔记本电脑上写了这篇文章,为了确保它能正常工作,我将dist文件夹复制到闪存驱动器上,然后在我的电脑上运行。它工作得很好。当我把它发电子邮件给我的同事时,他发现了那个错误 根

我用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


如果有任何其他相关信息我需要包括,让我知道。谢谢

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

您可以使用maven assembly插件实现这一点:


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

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

您可以使用maven assembly插件实现这一点:


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

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

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

要更改遵从性级别(在Eclipse中):右键单击PackageExplorer中的项目,选择properties。在左侧的选项中选择Java编译器。在“Java构建路径”上取消选中“从执行环境[default target JavaSE]使用遵从性”,并将“编译器遵从性级别”更改为您选择的级别(我选择了可用的最低选项1.3,因为我假设任何高于该级别的选项都不会成为问题)

然后我导出了这个文件(file->Properties->Java->Runnable-JAR文件),并得到了一个可点击的工作.JAR


谢谢大家的帮助

为了结束这篇文章,我将写下最终对我有用的东西:

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

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

要更改遵从性级别(在Eclipse中):右键单击PackageExplorer中的项目,选择properties。在左侧的选项中选择Java编译器。在“Java构建路径”上取消选中“从执行环境[default target JavaSE]使用遵从性”,并将“编译器遵从性级别”更改为您选择的级别(我选择了可用的最低选项1.3,因为我假设任何高于该级别的选项都不会成为问题)

然后我导出了这个文件(file->Properties->Java->Runnable-JAR文件),并得到了一个可点击的工作.JAR


谢谢大家的帮助

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