一台机器上的NoSuchMethodError,但另一台机器上没有

时间:2011-03-16 09:27:50

标签: java netbeans nosuchmethoderror

我有这个应用程序,您可以使用java宏以批处理模式运行。我有mymacro.java使用myjar.jar。为简单起见,我将它们全部放在运行应用程序的同一目录中,因此类路径为"./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中的其他方法而没有任何错误。可能出现什么问题?

仅供参考,我在两台机器上将CLASSPATH环境变量设置为"."以排除任何冲突。

修改

在我的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)

3 个答案:

答案 0 :(得分:2)

由于使用的JAR文件的文件名,我遇到过类似的问题。就我而言,我有多个JAR文件,如a.jarb.jarm.jarN.jarm.jarN.jar中都有一个类重复。

在Windows上,N.jar之后的所有内容始终都会被m.jar加载。但是在燃烧了大量深夜油之后,我发现* nix上的问题是由于N.jar首先被加载,然后是a.jarb.jarm.jar作为文件与Windows不同,* nix上的名称区分大小写。

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

答案 1 :(得分:1)

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

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

浪费一整天工作的好方法!

答案 2 :(得分:0)

 com.foo.bar.baz.theMethod(Ljava/lang/String;Ljava/lang/String;)I

目前在新版本的jar中? 如果不太可能mymacro.java再次编译包含它的jar版本