リフレクションを使うにあたってクラス名一覧をどこから入手しようかと検索すると、tools.jarにあるToolProviderを使う例があったが、そのtools.jarがMacOSX 10.6のJavaSE6には入っていないようで、困ること数時間。諦めて次を探すと今度はBeanShellを使う方法が載っていたので、まだ(BeanShellを)起動できるようになっただけだが、ここまでの過程をmemo.
まず、BeanShellを検索し公式サイトを見つける。
次に、Documentからインストールおよび実行方法を確認。
bsh-2.0b4.jarをダブルクリックすると、スプラッシュが表示され、メニューにBeanShellが現れるものの、固まってしまった様子で、あえなく強制終了させる。
beanshellを検索すると、DarwinPortsらしきサイトが見つかるので、MacPortsで試してみる事に。しかし、最近まったく使っていないので、使い方から復習。
MacPorts
まずmacportsの公式サイトのDocumentationから使い方を復習。暫く使っていないので、
sudo port selfupdate
を実行。続いて、portのinstall方法を探す。
sudo port install beanshell
問題なくインストールされた様なので、次にbeanshellの起動方法を探す。/opt/local/share/doc/beanshellを確認すると、bshmanual.pdfがあるので開く。見ていくとP8の中程に、
java bsh.Console
とあるので、実行してみる。そうしたら今度はちゃんとコンソールらしきものが表示されたが、macosのターミナルになにやらExceptionが表示される。今は無視。
さて、BeanShellを入れたものの、さっきのサイトのコードを見てもBeanShellとコードの関係が全く分からない。getClassesForPackageのこと? 自分としては、workspaceにコマンド入力したら一覧が得られると思っていたが、マニュアルをざっと読んだところでまるで分からず。今日は諦めよう。
(17:00頃追記)
と思ったら、なんと、classes.jarが見つかった! /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classesにあるじゃないか。JDKのパスを確認しようと手動でフォルダを展開しているうちに偶然見つけた。
つまり、finderの検索で、"このMac"や"Macintosh HD"で探すと出てこないのだが、その下の"システム"(/System)で検索すると出てくる。なんだよ...だったら偉そうに検索viewになったときに"このMac"や"Macintosh HD"の絞り込みボタン貼るなよな。自動的にボタンが出てくれば普通、選ぶでしょう人情的に。
ということで、classes.jarを追加してToolProviderを使ってみる事にする。
(2010/10/19 追記)
結局こちらを参考に、というか全面的に参照させて頂き、"java.io"とか"java.lang"とかを指定すると、StandardLocation.PLATFORM_CLASS_PATHから探して来てその内包するクラスファイル名の一覧を取得できたように思われる。ありがとうございます。
だがjavaが全面的に分からないこともあり、この先前途多難な雰囲気がまた突破に向けては面白くなってきた感。
一階戻って考え直そう。
WinやLinuxだとtools.jarは JDK_HOME/lib/tools.jarにあります。JDK_HOME/jre/lib/ ではないので、注意が必要です。
返信削除でも、Macはどうなんだろう?
早っ!コメントありがとうございます。appleの情報によるとtools.jarは無く代わりがclasses.jarとあるのですが、それもJDK5までで、JDK6には見当たらないんですよね。というか私のMacには。tools.jarのものが全部classes.jarにあるとも書いてないですし、ToolProviderで探してもいまいち見つからないので、いっそ入ってるjarから探してみるかなと。ITProの「Java SE 6完全攻略 第89回」も気になってます。
返信削除MacのJDKはApple謹製だから、いろいろ変わっているんですね。
返信削除OpenJDKをMacにポートしている人たちがいるので、それを使うのがいいのかもしれません。
http://openjdk.java.net/projects/bsd-port/
早っX2! 返信ありがとうございます。OpenJDK...かなりやばいですねw。早速拝見します。
返信削除自己レスですが、classes.jar見つかりました。ところが実は、最初から要らなかったというか、デフォルトのJavaFXのプロジェクトのままでも、import javax.tools.ToolProvider 出来ました。Evaluatorのときにjavafxc.jarをライブラリに追加しないと動かなかったこともあり、頭ごなしに追加が必要だと思い込んでしまっていたようです。それはそれとして、OpenJDK6はMacPortsから導入できるようなので、今度試してみたいと思います。ご紹介有り難う御座いました。
返信削除