スポンサーリンク
JDKには、Java標準ライブラリのソースファイル一式(src.zip)が付属しています。しかし、これは標準ライブラリのソースコードの一部に過ぎず、「sun.misc.Launcher」をはじめとする、一部のパッケージのソースファイルは含まれていません。
今回は、それによって表示されるエラーや対策、について解説します。JDK7が対象なので、JDK6未満の場合は適用できません。
目次
スポンサーリンク
「src.zip」のよくある利用法
JDKに付属しているsrc.zipは、Eclipseで標準ライブラリのJavadocを表示できるようにしたり、デバッグ時にステップ実行やブレークポイントを挿入できるようにするためによく利用されます。
ちなみにsrc.zipを登録するためには、次のような方法があります。
- Package Explorerで「JRE System Library>rt.jar」を右クリックして「Java Source Attachment>External File」でsrc.zipを指定する方法
- 次のSource not foundエラーが表示されたときに「Attach Source」からsrc.zipを登録する方法
JDK付属の「src.zip」だけでは見れないソースコードがある!
たとえば、とあるクラスを始めて「new」するところで「Step Into」すると、コンストラクタの前にクラスローダが呼ばれ、「sun.misc.Launcher」クラスにジャンプするのですが、src.zipをアタッチしていても、ソースコードは表示できません。
Class File Editor
Source not found
The source attachement does not countain the source for the file Launcher.class.
You can change the source attachment by clicking Change Attached Source below:
src.zipをちゃんとアタッチしていても、sun.misc.Launcherのソースコードが表示できないのです。それはなぜかというと、実は、src.zipには、「sun.*」などの一部のソースコードが含まれていないのです。
src.zipって書いてあったら、なんとなく全部含まれていそうですよね(参考:Java - Wikipedia)。
「sun.*」など一部のソースコードが非公開だったから
もともとJava標準クラスライブラリはオープンソースではなく、ある程度のソースコードは公開していたものの、「sun.*」を始めとするいくつかのパッケージは公開の対象外でした。なので、足りていないというか、非公開だったわけです。
OpenJDK→JDK7へ
しかし、その後オープンソース化が行われ、OpenJDKとなり、いろいろあって気がつけばOpenJDKがJDK7のリファレンス実装となりました。
そういうわけで、JDK7からは実装のほとんどがOpenJDKと共通になったようです(参考:Sun社のJDK7、OpenJDK、そしてIcedTea:曖昧さの回避)。
OpenJDKのライセンス的にソースコードは無理?
じゃぁどうしてJDK7になってもsrc.zipの中身が足りないんだ、と思ってしまうのですが、おそらくOpenJDKのライセンス(GPLリンク例外つきGNU GPL)では、ライブラリとしてのリンクまでなら大丈夫な(影響を受けない)ものの、JDK7にOpenJDK7のソースコードを含めて一緒に配布するわけにはいかないから、かなー、と思われます。
jdk7src「src.zipに足りないものをOpenJDKから持ってきました」
そこで「じゃぁ、自分でOpenJDKからソースコードを持ってこよう!」と思ってやってみた人が「やばいめんどくさいビビった」と思って作られたのがjdk7srcです。
jdk7srcでは、「ソースコードが公開されているけれど、JDKのsrc.zipには含まれていないソースコード」をOpenJDKから持ってきて、src.zipと組合せひとつにまとめたファイルを、JDK7の各バージョン毎に提供しています。
jdk7srcを使ってみる
jdk7srcのページにある「JDK7u9」などのリンクから、「src-jdk.zip」をダウンロードしてきます。
そして、「src.zip」と名前を変えて、JDKの「src.zip」と置き換えてあげるだけです。
すると、よく遭遇するのに表示できなかった「sun.misc.Launcher」へStep Intoしたとしても、Source not foundが表示されずに、ちゃんとソースコードが表示されるようになりました。
スポンサーリンク
スポンサーリンク