0

私はあなたがJavaマクロでバッチモードで実行できるこのアプリケーションを持っています。をmymacro.java使用するがありますmyjar.jar。簡単にするために、アプリケーションを実行しているのと同じディレクトリにすべてを配置したので、クラスパスは"./myjar.jar"です。

アプリケーションを実行するコマンドは次のとおりです。

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

ここで、-classpathタグはアドバタイズすることを実行します。つまり、クラスパスをオーバーライドします。これで、WindowsXPPCで正常に動作します。ただし、NoSuchMethodErrorLinuxクラスターでまったく同じことを実行すると、が発生します。

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

私はこれを理解することはできません。同じ.java、同じ.jar、同じtheMethod。クラスパスはこれ以上単純化することはできません。のその他のメソッドはmyjar.jar、エラーなしで呼び出されています。何がうまくいかない可能性がありますか?

参考までに、競合を排除するために、両方のマシンでCLASSPATH環境変数をに設定しました。"."

編集

java -version私のWindowsXPPCでの出力:

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.jarましm.jarN.jarm.jarとの両方で単一のクラスが複製されましたN.jar

Windowsでは、すべてが以前N.jarは常にロードされていたように機能していましたm.jar。しかし、真夜中の油をたくさん燃やした後、* nixの問題は、Windowsとは異なり、ファイル名で大文字と小文字が区別されるため、N.jar最初に読み込まれa.jar、その後に、が続くという事実が原因であることがわかりました。b.jarm.jar

同様の問題がないことを確認してください。

于 2011-03-16T10:49:44.973 に答える
1

ああ。アプリケーションには、以前のバージョンのJARファイルと基本的に同じコードを含むNetBeansモジュールが含まれていました。そのため、私のJavaマクロは、新しいJARファイルのメソッドではなく、古いNBMのメソッドに優先的にアクセスしていました。

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 に答える