今「Javaによるテキスト処理入門」って本に従って勉強してるんだけど、eclipse上で同じコードを書いてそれを実行しようとしたら"Exception in thread "main" java.lang.NoClassDefFoundError"とか"wrong name"ってエラーが出た。
どうもeclipse上で書いたjavaファイルを本の通りにjavaコマンド(javaインタプリタ)で実行しようとしてもダメみたいだ。(コマンドでなくeclipseから実行はできる)
その理由としてはeclipseでjavaファイルを書くとあるディレクトリ構造が作られる。
eclipseで実行した場合、そのディレクトリ構造に従って実行されるけど、javaコマンドから実行した場合はインタプリタはそんな構造知らないわけで「そんなクラス知らないよ」と言われるわけだ。
つまり今自分が読んでいる本のコードを実行したい場合はeclipse上で書いてjavaコマンドを使ってもダメなわけで、どうしても教本に従ってjavaコマンドを使って実行したい場合は、eclipseでは書かずに適当なエディタで書く必要があるってことだ。
適当なエディタで書いたコードを
$ javac "コンパイルしたいjavaファイル"
でコンパイルし、
$ java "できあがったclassファイル"
で、実行できる。
それでもeclipseで書きたいって人は、書いたコードをスタンドアロンで実行できるようにエクスポートして実行権限をつけてやる。(Windowsでは実行権限必要ないだろうけど)
eclipse上でコードをエクスポートし
$ sudo chmod a+x "実行権限をつけたjarファイル"
で実行権限をつけ
$ ./"できあがったjarファイル"
で実行できる。
いちいちeclipseでエクスポートするのは面倒そうだし、この教本を使ってる間はvimで書いてもよさそうだな。