Javaのjarファイルを実行したい

OSX 10.1.5です。
ProjectBuilder1.1.1を使用すると、問題なくコンパイルできて
きちんと動作するJavaソースがあります(本を見て入力して
ます)。
これをTerminalで動かしたいなあ、と思うのですが、なぜか
jarファイルを実行しようとするとエラーになります。
エラーは
「Exception in thread "main" java.lang.NoClassDefFoundError」
となっています。
ProjectBuilderでなら動くのに、なんでなんでしょうか?
(初心者です。googleとかで探しましたがうまい解決策に
いきつきませんでした・・・)

投稿日 2002/08/15 13:52

返信: 9

2002/08/15 16:33 Community User への返信

コマンドラインにどう書いて実行していますか?
$ java -cp (jarfile) (mainメソッドのあるクラス)
で起動出来ると思うのですが。

2002/08/15 17:27 Community User への返信

うーん、できません(;o;)。
-cpオプションつけてから、スペースあけてパスを書いても
「Usage: java [-options] class [args...]」とかが出てきます。
そこでちょっと質問なのですが、Windowsなんかでjavaやるときは
たしかjavacで.classという拡張子のファイルが生成されて、
今度はjavaコマンドでそのclassファイルを実行したような気が
するんですが、OSXだとclassファイルも出来るけど、それではなく
.jarファイルを実行するってことでいいんですよね?
ちなみにTerminalはrootになって実行しています。
(なんかすごく単純なミスのような気もしますが・・・)

2002/08/15 18:44 Community User への返信

.jarにしてないのなら「java (class file)」で実行出来ます。
.jarにしたのならclasspathに.jarファイルを追加してからclassファイルを指定します。
使い方はWindows等と一緒です。
「パスを書いても」とありますが、取りあえず目的のクラスファイル(あるいは.jarファイル)があるディレクトリに移動して、そこで実行出来るかどうか確認して下さい。
上記文章はProjectBuilderで.classファイル、あるいは.jarファイルが出来上がっていることが前提で書いてます。出来てないのならjavacでコンパイルして、jarで.jar化するなりしてからです。
>OSXだとclassファイルも出来るけど、それではなく.jarファイルを実行するってことでいいんですよね?
MacOSXに限った話では無いです。Javaではまずクラスファイルを作成して、配布の際の手間などを省く為に.jarでパッケージングします。確か.jarは直接実行出来ません。mainメソッドを含むクラスを指定する必要があります。(最近Java触ってないので仕様変更があったのなら分かりませんが)
>ちなみにTerminalはrootになって実行しています。
非常に危険なので、一般ユーザで作業しましょう。
安易にrootになって作業するのは止めた方がいいですよ。

2002/08/15 18:57 Community User への返信

.jarにしてないのなら「java (class file)」で実行出来ます。
.jarにしたのならclasspathに.jarファイルを追加してからclassファイルを指定します。
使い方はWindows等と一緒です。
「パスを書いても」とありますが、取りあえず目的のクラスファイル(あるいは.jarファイル)があるディレクトリに移動して、そこで実行出来るかどうか確認して下さい。
上記文章はProjectBuilderで.classファイル、あるいは.jarファイルが出来上がっていることが前提で書いてます。出来てないのならjavacでコンパイルして、jarで.jar化するなりしてからです。
例を挙げると、DeveloperToolsを入れるとJavaのサンプルアプリケーションが幾つか入ります。その中の一つ“SwingSet2”の場合
"/Developer/Examples/Java/JFC/SwingSet2/SwingSet2.app/Contents/Resources/Java"
で「java -cp SwingSet2.jar SwingSet2」とすることでコマンドラインから実行出来ます。
“SwingSet2”がmainメソッドを含むクラスになります。
#MacOSX的には「open /Developer/Examples/Java/JFC/SwingSet2/SwingSet2.app」でもいいんだけど。
>OSXだとclassファイルも出来るけど、それではなく.jarファイルを実行するってことでいいんですよね?
MacOSXに限った話では無いです。Javaではまずクラスファイルを作成して、配布の際の手間などを省く為に.jarでパッケージングします。
確か.jarは直接実行出来ません。mainメソッドを含むクラスを指定する必要があります。(最近Java触ってないので仕様変更があったのなら分かりませんが)
・・・manifestファイルにmainメソッドを含むクラスを指定すれば直接実行出来るのかな?(-jarオプションがそういうことなのかな?)
>ちなみにTerminalはrootになって実行しています。
非常に危険なので、一般ユーザで作業しましょう。
安易にrootになって作業するのは止めた方がいいですよ。

2002/08/15 19:58 Community User への返信

> .jarにしてないのなら「java (class file)」で実行出来ます。
javacは引数にソースファイル名を取りますが、javaコマンドは
% java classname
です。ファイル名ではありません。
>確か.jarは直接実行出来ません。mainメソッドを含むクラスを指定する必要
>があります。(最近Java触ってないので仕様変更があったのなら分かりま
>せんが)
>
>・・・manifestファイルにmainメソッドを含むクラスを指定すれば直接実行出来るのかな?(-jarオプションがそういうことなのかな?)
MANIFESTファイルに
Main-Class: classname
と書いてjarファイルに含めておけば、Finderから.jarファイルを
ダブルクリックで起動することもできますよ。

2002/08/15 20:10 Community User への返信

いろいろありがとうございます。
>上記文章はProjectBuilderで.classファイル、あるいは.jarファイルが出来上がっていることが前提で書いてます。
はい、コンパイル済みです。
>で「java -cp SwingSet2.jar SwingSet2」とすることでコマンドラインから実行出来ます。
この場合、.classファイルが同ディレクトリにないですよね? 2個めのファイル名はクラスファイル名ですよね?
結局、このSwing〜は無事に実行出来ました。windowsでは、
java (classファイル名)だけで実行出来るのに、どういうところが違うのでしょうか?(まだ理解出来ません)
jarがパッケージ(tarみたいなもの?)として解釈できますが・・。
なんか基礎的な事を聞いているので、申し訳ないのでもう少し自分で試行錯誤してみます。ありがとうございました。
(結局本のプログラムは日本語表示のプログラムだったので、Terminalで実行したら文字化けで使えませんでした・・・(#^_^#))

2002/08/15 21:08 Community User への返信

>この場合、.classファイルが同ディレクトリにないですよね? 2個めのファイル名はクラスファイル名ですよね?
ごめんなさい。書き間違えました。佐々木俊光さんのご指摘にある通り、クラスファイルでは無くクラス名です。例題は間違ってないので、それでご容赦を(^^;)
>windowsでは、java (classファイル名)だけで実行出来るのに、どういうところが違うのでしょうか?(まだ理解出来ません)
Windowsでどういうものを実行しようとしているのか分からないので何とも言えませんが・・・
クラスファイルがあるディレクトリ以外で実行しようとする場合(.jarにするとこれにあたります)、クラスファイルを検索する為に、そのクラスファイルがあるディレクトリをCLASSPATHに登録しておく必要があります。で、.jarファイルをサブディレクトリ群扱いで同様にCLASSPATHに追加することで、その中に含まれるクラスを検索出来るようになります。それが“-cp”オプションとそれに続く.jarの記述です。
>jarがパッケージ(tarみたいなもの?)として解釈できますが・・。
.jarの実体はZIP圧縮のアーカイブファイルです。
なのでunzipコマンドで中を覗いたり展開したりも出来ます。

2002/08/15 21:36 Community User への返信

> 結局、このSwing〜は無事に実行出来ました。windowsでは、
> java (classファイル名)だけで実行出来るのに、どういうところが違うのでしょうか?
WindowsではMS-DOSのコマンドプロンプトから
C:\> javac classfile.java
とコンパイルして、
C:\> java classname
と実行したのではありませんか?
Mac OS XでもTerminalで同じように
% javac classfile.java
とコンパイルして、
% java classname
とすれば実行できますよ :)
最初の質問は、Project Builderで生成されたjarファイルを
Terminalから実行したいってことだったのですよね?

2002/08/16 21:33 Community User への返信

まったくお察しの通りです。「jarファイル」というやつと
classファイルが頭の中でごっちゃになっていたようです。
確かに、特にWindowsだからとかMacだから、といった違いは
ないみたいですね。
jarファイルをTerminalで実行するのと、classファイルを実行
するのとでは何が違うんでしょうか? 想像するに、多分
複数のclassファイルをも含めた「いちプロジェクト」についてを
mainメソッドからスタートさせるのが「jarファイル実行」なんで
しょうか?
このへんはOSXに特化した質問とはずれてくるみたいなので
恥ずかしいので、勉強し直してきます(^<^;)。
ありがとうございました。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

Javaのjarファイルを実行したい

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。