拡張可能 Java プリプロセッサ EPP 1.1.2 産業技術総合研究所 一杉裕志 2001-12-19 はじめに -------- EPP は、 Java 言語に拡張機能を追加できるようにするシステムです。 EPP は、それ自体は Java のソースを読んで Java のソースを出すだけの 何もしないプリプロセッサです。 しかし、使いたい「 EPP plug-in 」を java ソースコードの先頭で指定すれば、 さまざまな拡張機能が利用できます。 プリプロセッサが出力する Java ソースコードは、 普通の Java コンパイラを通り、普通にデバッグすることもでます。 EPP のソースコード自身も「 EPP で拡張された Java 」で書かれており、 バリナリは Java が動く環境ならばどこでも動きます。 EPP の最新版、 plug-in の説明、関連論文は以下の URL にあります。 http://staff.aist.go.jp/y-ichisugi/epp/ http://staff.aist.go.jp/y-ichisugi/doc/newjdoc/ http://staff.aist.go.jp/y-ichisugi/ 動作環境 -------- epp-1.1 は、以下の環境で動作が確認されています。 Linux, IBM JDK1.1.8 Windows2000, Cygwin 1.3.2, Sun JDK1.2.2 ディレクトリの構成 ------------------ epp/README 英語版 README epp/README-j このファイル epp/CopyrightAndLisencing.txt ライセンス epp/doc/contributors contributors epp/unix/bin/ Unix 用 shell script epp/windows/bin/ Windows bash 用 shell script epp/windows/bin/epp.bat Windows 用 batch file epp/jar/epp.jar EPP 本体と plug-in の jar ファイル epp/src/level0/ EPP 本体のソースファイル epp/src/level1/ plug-in ライブラリのソースファイル epp/src/level1/test/ plug-in ライブラリのテストプログラム epp/src/toys/ サンプル plug-in のソースファイル epp/src/toys/test/ サンプル plug-in のテストプログラム epp/src/JavaClassAPI/ JavaClass API のクラスファイルの一部 epp/JavaSample/ Java プログラム、tree、出力のサンプル インストール ------------ JDK をインストールした後、以下のようにして下さい。 JDK 以外の JavaVM で動作させる場合は、スクリプトの中を適宜書き変えて下さい。 1. Unix の場合 ----------- 以下の例では、ホームディレクトリの下に epp のディレクトリを置くものとして 説明します。 まず、epp11x.zip を取り寄せ、展開します。 次のように実行すると、ホームディレクトリの下に、 epp というディレクトリが できます。 % cd ~ % unzip epp11x.zip PATH の設定。 ~/.cshrc に次の行を挿入します。 set path=(~/epp/unix/bin $path) CLASSPATH の設定。 ~/.cshrc に次の行を挿入します。 setenv CLASSPATH .:$HOME/epp/jar/epp.jar 2. Windows の場合 -------------- epp11x.zip を取り寄せ、展開します。 以下の例では、 root ディレクトリの下に展開したものとします。 PATH の設定。 \autoexec.bat に次の行を挿入します。 (ただし Cygwin を使う場合は \epp\unix\bin を使って下さい。) path \epp\windows\bin;%path% CLASSPATH の設定 set CLASSPATH=.;\epp\jar\epp.jar なお、 SDK for Java (jview) を使う場合は、 classes.zip か jdk1.2\jre\lib\rt.jar も明示的に CLASSPATH に含めて下さい。 EPP の使い方 ------------ ・ カレントディレクトリの下に eppout というディレクトリを作ります。 ・ EPP plug-in を使ったプログラムを書きます。 例えば、 enum plug-in を使いたい場合は、ソースコード中に #epp jp.go.etl.epp.enum と書きます。 #epp コマンドは、行頭になければなりません。 #epp コマンドは、 // を使ってコメントアウトすることができます。 しかし、 /* */ で囲んでもコメントアウトできないので注意して下さい。 ・EPP を実行するには次のようにします。 epp File1.java File2.java ... 処理が終ると eppout の下に、展開後のファイルが出力されます。 エラーがなければ、普通にコンパイル、実行します。 cd eppout javac *.java java Xxx ・ epp -r dirname とやって、ディレクトリごと一度に展開することもできます。 ・ epp -clear を実行すると、 eppout の下にある「自動生成されたファイル」が 消去されます。 epp -clear は、まず eppout の下の全てのディレクトリに含まれる ファイルを再帰的に検査し、それらがすべて epp が生成したファイルか、 class ファイルであることを確認します。 そして確認が終了した後、ファイルを消去します。 自動生成されたものではないと思われるファイルが1つでもあると、 そのファイル名を表示した後、ファイルを一切消去せずに実行を終了します。 その場合は自分で消していいか確認して消した後、 あらためて epp -clear を実行して下さい。 Java ソースファイルが epp で生成されたものかどうかは、 先頭が文字列 "/* Generated by EPP" ではじまるかどうかで判断されます。 ファイルが .class ファイルか、 epp で生成された .java ファイルならば、 「自動生成されたファイル」と見なされます。 ・ epp のその他のコマンドラインオプションは、無引数で epp を実行すれば 出力されます。 % epp Usage: epp [options] file1.java file2.java... or epp [options] -r . Options: -f Force translation. (without time stamp checking) -r dir Translate Java files under the specified directories. -clear Clear files under eppout before translation. -plug-in name Add an extra plug-in at the end of the setup list. ... -help,-?,/? Print this message. plug-in のドキュメント --------------------- 現在提供されている plug-in の機能については、 EPP のホームページを 参照して下さい。 注意 ---- ・ epp は、ディレクトリ eppout の下にファイルを作ります。 eppout の下に大事なファイルを置いたり、シンボリックリンクをはったりすると、 上書きされる恐れがあるので、避けて下さい。 ・多分大丈夫だとは思いますが、オリジナルのソースファイルが失われないように、 バックアップをとってから実行して下さい。 JavaClass API ------------- EPP は "JavaClass API" というパッケージを内部で用いています。 JavaClass は Markus Dahm 氏が開発した LGPL のクラスライブラリです。 詳しくは src/JavaClassAPI/README を参照ください。 JavaClass のソースとドキュメントは、以下の URL から取得できます。 http://www.inf.fu-berlin.de/~dahm/JavaClass/index.html または http://staff.aist.go.jp/y-ichisugi/epp/JavaClass/JavaClass3.3.2.tar.gz 連絡先 ------ 本ソフトウエアは、無保証です。研究目的あるいは評価目的に限り、 無償で利用できます。 詳しくは、 CopyrightAndLisencing.txt を読んで下さい。 EPP に関する質問、要望、バグリポートを歓迎します。 以下のアドレスまでメイル下さい。 y-ichisugi@aist.go.jp