Java 一台机器上无此方法错误,但另一台机器上无此方法错误

Java 一台机器上无此方法错误,但另一台机器上无此方法错误,java,netbeans,nosuchmethoderror,Java,Netbeans,Nosuchmethoderror,我有这个应用程序,你可以用java宏在批处理模式下运行。我有一个使用myjar.jar的mymacro.java。为了简单起见,我将它们都放在运行应用程序的同一目录中,因此类路径是“/myjar.jar” 运行应用程序的命令是: theapplication -classpath "./myjar.jar" -batch mymacro.java 其中,-classpath标记执行其播发的内容,即覆盖类路径。现在,这在我的Windows XP PC上运行良好。但是,当在Linux集群上运行完全

我有这个应用程序,你可以用java宏在批处理模式下运行。我有一个使用
myjar.jar
mymacro.java
。为了简单起见,我将它们都放在运行应用程序的同一目录中,因此类路径是
“/myjar.jar”

运行应用程序的命令是:

theapplication -classpath "./myjar.jar" -batch mymacro.java
其中,
-classpath
标记执行其播发的内容,即覆盖类路径。现在,这在我的Windows XP PC上运行良好。但是,当在Linux集群上运行完全相同的东西时,我得到了一个
NoSuchMethodError

java.lang.NoSuchMethodError: 
com.foo.bar.baz.theMethod(Ljava/lang/String;Ljava/lang/String;)I
我搞不懂这个。相同的.java,相同的.jar,相同的
theMethod
。类路径再简单不过了。调用
myjar.jar
中的其他方法时没有任何错误。出了什么问题

仅供参考,我在两台机器上将
类路径
环境变量设置为
,以排除任何冲突

编辑

在我的Windows XP PC上输出
java-version

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode)
在Linux群集上:

java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)

新版本的jar中是否存在? 如果mymacro.java不可能是根据包含它的jar版本编译的

新版本的jar中是否存在?
如果mymacro.java不太可能是根据包含它的jar版本编译的,我曾经因为使用的jar文件的文件名而面临类似的问题。在我的例子中,我有多个JAR文件,比如
a.JAR
b.JAR
m.JAR
N.JAR
。在
m.jar
N.jar
中都复制了一个类

在Windows上,以前用作
N.jar
的所有内容总是在
m.jar
之后加载。但是在熬夜之后,我发现*nix上的问题是因为
N.jar
首先被加载,然后是
a.jar
b.jar
m.jar
,因为与Windows不同,*nix上的文件名区分大小写


请确保您没有任何类似的问题。

由于使用的JAR文件的文件名,我曾经遇到过类似的问题。在我的例子中,我有多个JAR文件,比如
a.JAR
b.JAR
m.JAR
N.JAR
。在
m.jar
N.jar
中都复制了一个类

在Windows上,以前用作
N.jar
的所有内容总是在
m.jar
之后加载。但是在熬夜之后,我发现*nix上的问题是因为
N.jar
首先被加载,然后是
a.jar
b.jar
m.jar
,因为与Windows不同,*nix上的文件名区分大小写


只要确保你没有任何类似的问题。

Argh。该应用程序包含一个NetBeans模块,该模块包含的代码基本上与我的JAR文件的早期版本相同。因此,我的java宏优先访问旧NBM中的方法,而不是新JAR文件中的方法

当我卸载NBM时,错误消失了


浪费一整天工作的好方法

Argh。该应用程序包含一个NetBeans模块,该模块包含的代码基本上与我的JAR文件的早期版本相同。因此,我的java宏优先访问旧NBM中的方法,而不是新JAR文件中的方法

当我卸载NBM时,错误消失了


浪费一整天工作的好方法

你在运行什么操作系统?嗯。。奇怪的是,您可能会在两台机器上发布命令
java-version
的输出吗?也许这是一个不同点。你在运行什么操作系统?嗯。。奇怪的是,您可能会在两台机器上发布命令
java-version
的输出吗?也许这是一个不同点。正如问题中提到的:相同的mymacro.java,相同的myjar.jar,相同的方法。我复制了完全相同的文件。我没有制作“新版本”或重新编译。好吧,但我猜您正在执行类文件,而不是java文件;您确定mymacro.class在两台机器上都是根据完全相同的myjar.jar版本编译的吗?从技术上讲,我不是在执行类文件,但应用程序大概是这样。我猜它使用提供的类路径编译java宏本身。我不认为我的问题和我之前的评论有任何歧义:JAR文件“myjar.JAR”在两台机器上都是完全相同的文件;如果在运行时它是相同的,那么它就不相关了。从您编写的内容中,我只能确定它在运行时与问题中提到的相同:相同的mymacro.java,相同的myjar.jar,相同的方法。我复制了完全相同的文件。我没有制作“新版本”或重新编译。好吧,但我猜您正在执行类文件,而不是java文件;您确定mymacro.class在两台机器上都是根据完全相同的myjar.jar版本编译的吗?从技术上讲,我不是在执行类文件,但应用程序大概是这样。我猜它使用提供的类路径编译java宏本身。我不认为我的问题和我之前的评论有任何歧义:JAR文件“myjar.JAR”在两台机器上都是完全相同的文件;如果在运行时它是相同的,那么它就不相关了。根据您所写的,我只能确定它在运行时是相同的,我只有一个JAR,所以应该没有订单问题。尽管如此,我还是会尝试处理文件名,只是想看看……我只有一个JAR,所以应该没有订单问题。尽管如此,我还是会尝试修改文件名,只是想看看。。。
 com.foo.bar.baz.theMethod(Ljava/lang/String;Ljava/lang/String;)I