Windows2000 + Tomcat + Apaceh 連携 パート / 失敗連続メモ(2002/12/18) 
 

実行した環境

OS

Windows2000

J2SE

1.4.1.01

Tomcat

4.1.12

失敗その1 : クラスコンパイル時の大文字小文字

Unix環境ではありえないことなんですけど、Windows は大小文字の区別が無いので例えば、MURACHI と murachi は同等となってしまうのです。これ普段は問題ないのですが Javac でコンパイルするときにこれをやると・・・・・。悲惨になります。っていうか実行時にエラーがでます。
教訓:大文字小文字をちゃんと区別してコンパイルすべし。面倒だったらスクリプトを書くべし!

こんなエラーとなります。

C:\>javac murachi.java
C:\>java murachi
Exception in thread "main" java.lang.NoClassDefFoundError: murachi (wrong name: MURACHI)
   at java.lang.ClassLoader.defineClass0(Native Method)
   at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
   at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
   at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
   at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)

失敗その2 : CLASSPATH の指定

ある日、JDBCとのアクセスプログラムを試していたのですが実行すると NoClassDefFoundError エラー発生して、うまく動いてくれませんでした。これは私の環境設定がいけないのだと思い何度もインストールを繰り返してもうまくいかない・・・。何故だーとおもったら(爆) 
教訓:カレントディレクトリの指定がなかったせいでした。もっとましなエラーメッセージだせよ!と 怒

set CLASSPATH=.;%CATALINA_HOME%\common\lib\servlet.jar;%JAVA_HOME%\lib\tools.jar;C:\mysql\jdbc\mysql-connector-java-2.0.14-bin.jar

参考 : NoClassDefFoundErrorはなぜ起きるか?

失敗その3 : クラスと同じファイル名

「失敗その1」続きで、2分だけ失敗したこと。それは、クラス名とファイル名の密接な関係があるってこと。具体的には、「public class Hellos」としたら、ファイル名を "Hellos.java" にしないと×ってこと。あー
教訓:よくやる事は、基本がマスターしていないってことだ。