クラウドで 伸びる人沈む人 |
|
|
|
クラスパスはどこに通るのか?本当に理解しておこう
<IT技術の処方箋:クラスパスはどこに通るのか?本当に理解しておこう> コマンドラインからクラスパスを実行した場合、 どこにクラスパスが通るのか? そういう話をきっちりしておきましょう。 例えば、 c:\tmpには、以下の二つのファイルがあって、 Sample.class mysql-connector-java-5.1.7-bin.jar(mysqlのドライバ) Sampleを実行するためには、 mysql-connector-java-5.1.7-bin.jarファイルが必要 (つまり、クラスパスを通す必要があったとします) そういう関係だったとしましょう。 よくやってしまう間違いが二つあります。 ●一つ目の間違い C:\tmp>java -classpath . Sample java.lang.ClassNotFoundException: com.mysql.jdbc.Driver カレントにクラスファイルも、jarファイルもあるんだから、 これでいいだろ? と思われるかもしれませんが、 クラスパスでカレントを指定した場合は、 クラスファイルにしかクラスパスが通りませんからね。 jarファイルは、きっちり指定する必要があります。 ●二つ目の間違い じゃあ、ってんで、↓のようにやると、 C:\tmp>java -classpath ./mysql-connector-java-5.1.7-bin.jar Sample Exception in thread "main" java.lang.NoClassDefFoundError: Sample またエラーがでます。 これだと、 カレントのクラスファイルにクラスパスが通らない。 「カレントには環境変数でクラスパスを通してあるよ」 と思うかもしれませんが、 java -classpath ホニャララ とやってしまった時点で、 環境変数のクラスパスはご破算になりますからね。 ●だから、正しくは、 java -classpath .;./mysql-connector-java-5.1.7-bin.jar Sample みたいに、 カレントのクラスファイル(Sample.class) と、 カレントのjarファイル(mysql-connector-java-5.1.7-bin.jar) にきっちりとクラスパスを通す必要があります。 |