• ベストアンサー

Rhinoの実行時のクラスパス

java による javascript の実装であるrhino (http://www.mozilla.org/rhino/)で defineClass("自作クラス"); によってクラスの読込をする時 >java -cp 'クラスパス指定' org.mozilla.javascript.tools.shell.Main を使うと問題なく実行できますが、 同じようでも >java -cp 'クラスパス指定' -jar js.jar を使った時には、クラスが見つからないというエラーになります。 おそらくクラスパスの指定が悪いのかと思うのですが、 jar ファイルの時はどうしてダメなんでしょうか? どう指定するのが正しいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

とりあえず検索で見つけたページ。 詳しいことは、わかりませんが…。 ・http://www.fk.urban.ne.jp/home/kishida/kouza/old/javajar.htmlhttp://java-house.jp/ml/archive/j-h-b/043878.htmlのスレッド (http://java-house.jp/ml/archive/j-h-b/043921.htmlとか)

BLUEPIXY
質問者

お礼

ありがとうございます。 すごく参考になりました。

その他の回答 (1)

noname#49664
noname#49664
回答No.1

java -jarオプションは、実行時にクラスパスをオーバーライドし自身に用意されたものに置き換えてしまいます。Sunのドキュメントには以下のように書かれています。 「-jar オプションで指定された JAR アーカイブ。この値は、ほかのすべての値をオーバーライドする。 このオプションを使用すると、すべてのユーザクラスが、指定されたアーカイブから検索される」  したがって、-cpの指定を必要とする際には面倒ですが-jarを使わず起動するしかないように思います。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/findingclasses.html
BLUEPIXY
質問者

お礼

結局クラスパスにjarファイルを含めて指定し、-jar は、使わないということにしようと思います。 バッチにしておけば、入力もさほど面倒ではないですしね。 回答ありがとうございました。

BLUEPIXY
質問者

補足

ご回答ありがとうございます。 -cp の指定は、-jar でJARアーカイブを起動した場合には、無視される(無効になる)のですね。 その場合、例えばloadClassメソッドのようなものを使ってもやはりクラスの読込はできないということですよね。 JARアーカイブによるプログラム実行中にも動的にクラスを読み込むような用途もあるかと思いますが、その場合はどのような手順になるのでしょうか? 必要なクラスはJARアーカイブによる実行の場合は、JARアーカイブしておくということでしょうか?

関連するQ&A

専門家に質問してみよう