torutkのブログ

ソフトウェア・エンジニアのブログ

Java SE 6 (Mustang) b86ビルド試行記

前回b85のビルドでエラーが出た問題はb86でも同じでした。
http://d.hatena.ne.jp/torutk/20060527

jscheme.REPLのNoClassDefFoundError問題

j2se/make/sun/rmi/corbalogsources/Makefileの中で、以下のようにCLASSPATHを設定し、jscheme.REPLを実行しています。

JSCHEME_CLASSPATH=$(JSCHEME_LIB_DIRECTORY)/jscheme.jar$(CLASSPATH_SEPARATOR)$(JSCHEME_LIB_DIRECTORY)/jschemelogutil.jar
export CLASSPATH=$(JSCHEME_CLASSPATH)

JSCHEME_GENERATE_CLASS = $(JAVA) jscheme.REPL $(MC_GENERATE_CLASS) 

直接このMakefileを実行すると、環境変数CLASSPATHMakefileの記述どおり有効になり、jscheme.REPLが見えます。一方トップレベルのMakefileから再帰的に呼び出されてこのMakefileが実行されるときは、この環境変数CLASSPATHMakefileの記述によらず無効(空)となってしまいます。これを確かめるのに、環境変数_JAVA_LAUNCHER_DEBUGを設定してmakeを実行しました。

D:/work/b86out/bin/java -client -Xmx256m -Xms128m jscheme.REPL ../../../../src/share/classes/com/sun/tools/corba/se/logutil/scripts/mc.scm 
-main main make-class ../../../../src/share/classes/com/sun/corba/se/spi/logging/data/Activation.mc   
 D:/work/b86out/gensrc/com/sun/corba/se/impl/logging
java.lang.NoClassDefFoundError: jscheme/REPL
----_JAVA_LAUNCHER_DEBUG----
JRE path is D:\work\b86out
jvm.cfg[0] = ->-client<-
    :(中略)
JavaVM args:
    version 0x00010002, ignoreUnrecognized is JNI_FALSE, nOptions is 5
    option[ 0] = '-Djava.class.path='
    :

option[0] = '-Djava.class.path='には環境変数CLASSPATHの内容が入るようです。ここでは空になっています。

そこで、以下のようにこのMakefileを修正しました。

JSCHEME_GENERATE_CLASS = $(JAVA) -classpath "$(JSCHEME_CLASSPATH)" jscheme.REPL $(MC_GENERATE_CLASS) 

環境変数CLASSPATHに頼らず、コマンドラインでクラスパスを指定させます。""で囲っているのは、クラスパスの区切子';'がCygwinのシェル(bash)ではコマンドの区切子';'と扱われるのを回避するためです。

この修正が必要なファイルは、

の2つです。