0

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

运行应用程序的命令是:

theapplication -classpath "./myjar.jar" -batch mymacro.java

标签在哪里-classpath做它所宣传的,即覆盖类路径。现在这在我的 Windows XP PC 上运行良好。NoSuchMethodError但是,当在 Linux 集群上运行完全相同的东西时,我得到了一个。

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

我想不通这个。相同的 .java、相同的 .jar、相同theMethod的 . 类路径再简单不过了。myjar.jar正在调用其他方法,没有任何错误。可能出了什么问题?

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

编辑

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

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)
4

3 回答 3

2

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

在 Windows 上,过去的一切都像N.jarm.jar. 但是在熬夜后,我发现 *nix 上的问题是由于先N.jar加载后跟a.jar,的事实b.jarm.jar因为 *nix 上的文件名区分大小写,这与 Windows 上不同。

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

于 2011-03-16T10:49:44.973 回答
1

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

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

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

于 2011-03-17T13:23:09.437 回答
0

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

存在于新版本的 jar 中?如果不是 mymacro.java 可能是针对包含它的 jar 版本编译的

于 2011-03-16T09:49:25.273 回答