Java jar在我的计算机上查找主类,但在其他计算机上找不到';s

Java jar在我的计算机上查找主类,但在其他计算机上找不到';s,java,manifest,executable-jar,Java,Manifest,Executable Jar,我用maven打包了我的程序的jar。我将清单文件设置为知道我的主类在哪里。它在我的机器上执行时没有问题。然而,当我将jar交给朋友进行beta测试时,他们得到的错误是找不到主类。我们正在运行同一版本的JRE 地雷: 他们的: 这是我看到的其他堆栈溢出答案中建议的问题 我已经解压了jar,以确保清单文件确实正确地设置了主类的位置,并且确实如此。那么这里的问题是什么呢 编辑:pom.xml的相关部分,用于构建清单 org.apache.maven.plugins 您需要在pom.xml中配置m

我用maven打包了我的程序的jar。我将清单文件设置为知道我的主类在哪里。它在我的机器上执行时没有问题。然而,当我将jar交给朋友进行beta测试时,他们得到的错误是找不到主类。我们正在运行同一版本的JRE

地雷:

他们的:

这是我看到的其他堆栈溢出答案中建议的问题

我已经解压了jar,以确保清单文件确实正确地设置了主类的位置,并且确实如此。那么这里的问题是什么呢

编辑:pom.xml的相关部分,用于构建清单


org.apache.maven.plugins

您需要在
pom.xml
中配置
maven jar插件。此插件负责打包和创建
manifest.MF


org.apache.maven.plugins
maven jar插件
...
真的
你的.package.main类
...

您需要在
pom.xml
中配置
maven jar插件。此插件负责打包和创建
manifest.MF


org.apache.maven.plugins
maven jar插件
...
真的
你的.package.main类
...

您的maven assembly插件配置看起来不错,只是mainClass包名看起来很奇怪。通常,您不会将类名作为包的一部分

我建议从mainClass软件包中删除最后一个“.MyCloser”:

...
<manifest>
    <mainClass>com.dreadylocks.MyCloset</mainClass>
</manifest>
...
。。。
com.dreadylocks.myclock
...
也就是说,除非您确实有一个名为MyCloser的目录,其中包含MyCloser类。无论哪种方式,您和您的朋友在运行jar的位置或方式之间都可能存在差异


如果您都使用java-jar/path/to/jar/myjar.jar运行,那么您可能是从com/mydreadylock/myclock运行的,而他们是从com/mydreadylock运行的。

您的maven程序集插件配置看起来不错,只是mainClass包名看起来很奇怪。通常,您不会将类名作为包的一部分

我建议从mainClass软件包中删除最后一个“.MyCloser”:

...
<manifest>
    <mainClass>com.dreadylocks.MyCloset</mainClass>
</manifest>
...
。。。
com.dreadylocks.myclock
...
也就是说,除非您确实有一个名为MyCloser的目录,其中包含MyCloser类。无论哪种方式,您和您的朋友在运行jar的位置或方式之间都可能存在差异


如果您都使用java-jar/path/to/jar/myjar.jar运行,那么您可能是从com/mydreadylock/myclock运行的,而他们是从com/mydreadylock运行的。

我有几乎相同的,我用pom.xml的构建部分的内容和manifest.MF的内容编辑了我的OP。我将尝试添加类路径并查看。我几乎有相同的方法,我用pom.xml的构建部分的内容和manifest.MF的内容编辑了我的OP。我将尝试添加类路径并查看。我的包是com.dreadylocks.myclock,main在一个名为myclose的类(.java文件)中。我认为您的包可能只是com.dreadylocks。您不会将类名作为包名的一部分。我的包是com.dreadylocks.myclock,main在一个名为myclose的类(.java文件)中。我认为您的包可能只是com.dreadylocks。您不会将类名作为包名的一部分,这是行不通的。MyCloser是包名,但它也是使用我的main方法的类的名称。如果我删除第二个MyCloser,它甚至在我的机器上都无法工作。你的MyCloser是否位于名为MyCloser的目录中?如果是这样的话,那是非常不传统的做法。我也会把我的衣柜搬到恐怖的衣柜里。请参见上面的“我的编辑”。我进行了编辑以显示我的项目结构。我知道这是非常不寻常的(我是java新手,所以命名包并不是我学到的最佳实践),但它真的会导致这个问题吗?没问题,但这可能解释了为什么它适用于您而不是其他人,如果他们是从com/mydreadylock运行的,而您是从com/mydreadylock/myclock运行的。也许让他们给你发一个像你上面贴的那样的截图,看看它是否匹配。在回复关于jar位置的编辑时:我认为jar是独立的。我打包了所有依赖项,这样它就可以在只安装jre的情况下双击运行。我试着将jar移动到我电脑上的一堆不同的目录位置,它们都运行良好。这只是她的问题,那不行。MyCloser是包名,但它也是使用我的main方法的类的名称。如果我删除第二个MyCloser,它甚至在我的机器上都无法工作。你的MyCloser是否位于名为MyCloser的目录中?如果是这样的话,那是非常不传统的做法。我也会把我的衣柜搬到恐怖的衣柜里。请参见上面的“我的编辑”。我进行了编辑以显示我的项目结构。我知道这是非常不寻常的(我是java新手,所以命名包并不是我学到的最佳实践),但它真的会导致这个问题吗?没问题,但这可能解释了为什么它适用于您而不是其他人,如果他们是从com/mydreadylock运行的,而您是从com/mydreadylock/myclock运行的。也许让他们给你发一个像你上面贴的那样的截图,看看是否匹配。回复关于jar位置的编辑:I you