Java 一台机器上无此方法错误,但另一台机器上无此方法错误
我有这个应用程序,你可以用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集群上运行完全
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