プログラム実行時にクラスパスを追加する
前のエントリーで、Flex SDKのCompiler APIを使ってMXMLをビルドしてSWFを生成できるようになった。
一つは、アプリのパッケージにFlex SDK同梱して、同梱されたSDKのみを使うようにする。そうしたら、SDKの場所は特に悩まなくて済む。
でも同梱してしちゃうと、SDKのバージョンが上がるたびにパッケージしなおさなくちゃいけないし、
あとライセンス的に大丈夫なの?って気もする。
# 調べてないけど、考えるのが面倒なので。
あと、既にFlex開発をかじっている人(というか自分)にとって、さらにFlex SDKを追加されるのはあまりいただけない。結構でかいし。
もう一つは、ユーザがローカルディスク上に展開したFlex SDKを指定して使う。
Flex Builderの「インストールされているFlex SDK」という設定項目、あんな感じで。
今回のアプリでは、後者を選択した。
ただ、ユーザが任意のディレクトリのFlex SDKを追加/削除できちゃうと、
アプリからするとどこにSDKがあるかわからなくなって、予めクラスパスを通すのが難しくなる。
なのでComiler APIを使うために、Javaプログラムでクラスパスを動的に追加する必要がある。
というわけで、今回のテーマは「クラスパスを動的に追加する方法」です(前置き、ながッ…)。
# このアプリに限らないJavaの技のお話ですね。
具体的にはどうやるか。
ハイ、参考サイト。
これをそのまんまやってみた。完璧!すごいなぁ。為になりました。
ただ、ディレクトリを指定すると、うまく動かないことがあったので、下のように若干修正した。
public static void addFile(File f) throws IOException { if (f.isDirectory()) { File[] child = f.listFiles(); for (int j = 0; j < child.length; j++) { addURL(child[j].toURL()); } } else { addURL(f.toURL()); } }
ディレクトリを指定するとその下にあるファイルを全部登録して、
且つ、配下のディレクトリに対し、再帰的に実行するようにした。
jarファイルだろうがなんだろうが、問答無用でクラスパスに登録しちゃってるけどね。
# イカン、早くもネタが尽き始めとるorz