hits since 2002.12.8
JDEEはEmacsを拡張するパッケージですので、まずはEmacsが動作することが前提となります。JDEEが動作するEmacsのバージョンは20以上ですが、JDEEの開発はEmacs 21をベースとしているので、なるべく最新版のEmacs 21を使用した方がよいでしょう。
もしEmacsが無ければ、Emacsを導入します。ここではEmacsのインストール方法は紹介しません。最近のUNIX環境では、ほぼEmacsが標準搭載されています。
Windows用のEmacsです。インストール・設定については以下のサイトをご覧下さい。
以下のEmacs Lispパッケージを入手します。Emacsの種類によっては既にパッケージがインストール済みであるかもしれません。また、既にインストール済みであってもバージョンが古いかもしれません。
パッケージ種類 | ファイル名 | バージョン | 入手先 | 備考 |
---|---|---|---|---|
JDEE | jde-latest.tar.gzまたはjde-latest.zip | 2.3.5.1 | http://jdee.sunsite.dk/ | 安定版 |
CEDET | cedet-1.0pre3.tar.gz | 1.0pre3 | http://cedet.sourceforge.net/ | eieio-1.0pre3 speedbar-1.0pre3 semantic-2.0pre3 |
elib | elib-1.0.tar.gzまたはelib-1.0.zip | 1.0 | JDEEのサイトからダウンロード可 | 1.0を要求 |
Meadow 1.15では、speedbar-0.8.1/elib-1.0が標準添付されています。speedbarの方はバージョンが古いので、JDEEが必要とする0.14beta2以上を入れる必要があります。
Meadow 1.15 Netinstall版には、JDEE-2.3.2、elib-1.0、eieio-0.17、speedbar-0.14beta4、semantic-1.4.2(+Emacs20.x用パッチ)が用意されています。インストール時に、これらのパッケージをチェックして下さい。(最新には更新されていないかも)
Meadow 2.00では、speedbar-0.11aが標準添付されています。このspeedbarはバージョンが古いので、JDEEが必要とする0.14以上を入れる必要があります。その他のElispパッケージもMeadow 2.00には含まれていないので、入手するEmacs Lispパッケージ表に挙げられているものを揃える必要があります。
Meadow 2.00 Netinstall版は2003年6月27日現在、JDEEが必要とするEmacs Lispパッケージは用意されていません。自力でインストールする必要があります。
Meadow 3.00では、speedbar-1.0が標準添付されています。このspeedbarはcedet-1.0pre3に含まれるspeedbar-1.0pre3より新しいので、cedet-1.0pre3に含まれるspeedbarを無効にするとよいでしょう(.nosearchファイルをspeedbarディレクトリに作成する)。
XEmacs 21.4.8では、JDEE-2.2.8/eieio-0.16/speedbar-0.13/semantic-1.4beta8/elibが標準添付されています。JDEE-2.2.9以降を入れるには、elib以外は一通り最新のものを入れる必要があります。
依存関係がありますので、以下の順番にインストールしていきます。Emacs Lispパッケージは大抵Emacs系ならば、site-lispディレクトリの下に入れます。XEmacs系はあまりよく知らないのですが、site-packagesディレクトリの下に入れることになるかと思います。
以下のコマンドラインの例は、Windows上においてCygwin環境で実行したもので、EmacsとしてはMeadow1.15を使用しています。bashシェル上でGNU makeを使用しているので、Linux等でもほとんど同じ操作です。
tar+gz形式のアーカイブを解凍して、site-lispディレクトリ下に展開します。これだけでもOKですが、バイトコンパイルしたいならば、
torutk$ cd /win32app/Meadow/site-lisp site-lisp$ tar xzf /tmp/cedet-1.0beta3b.tar.gz site-lisp$ cd cedet-1.0beta3b cedet-1.0beta3b$ make EMACS=/win32app/Meadow/bin/Meadow.exe : cedet-1.0beta3b$
JDEEの依存パッケージ(CEDET)バージョン検査ロジックが1.0preに対応していせん。この組み合わせを使用するには、jde.elのjde-check-version関数を書き換えます。
--- jde.el.orig 2004-12-17 13:29:35.000000000 +0900 +++ jde.el 2005-05-22 02:23:06.187500000 +0900 @@ -987,14 +987,7 @@ (defun jde-check-version (current-version min-version max-version) "Return non-nil if CURRENT-VERSION >= MIN-VERSION or <= MAX-VERSION." - (and (or (jde-earlier-versionp current-version - max-version) - (string= current-version - max-version)) - (or (jde-earlier-versionp min-version - current-version) - (string= current-version - min-version)))) + (not (inversion-test 'cedet min-version))) (defun jde-earlier-versionp (ver1 ver2) "Return non-nil if VER1 is earlier than VER2"
tar+gz形式のアーカイブを解凍して、site-lispディレクトリ下に展開します。これだけでOKですが、もしバイトコンパイルしたいなら、GNU makeコマンドを入手してmakeを実行します。
torutk$ cd /win32app/Meadow/site-lisp site-lisp$ tar xzf /tmp/elib-1.0.tar.gz site-lisp$ cd elib-1.0 elib-1.0$ make EMACS=/win32app/Meadow/bin/Meadow.exe : elib-1.0$
GNU makeコマンドを使って必要なファイルをインストールします。まずtar+gz形式のアーカイブを作業用ディレクトリに解凍して展開します。次に、Makefileを編集します。
prefix = d:/win32app/Meadow datadir = $(prefix) locallisppath = $(datadir)/site-lisp : ELIBDIR = $(locallisppath)/elib infodir = $(prefix)/info EMACS = d:/win32app/Meadow/bin/Meadow.exe
info関係のインストール時にエラーが発生するので、該当箇所を修正します。
install-info: elib.info $(INSTALL_DATA) elib.info* $(infodir) if $(SHELL) -c 'install-info --version' \ >/dev/null 2>&1; then \ install-info --info-dir=$(infodir) elib.info; \ else true; fi
修正後、make installを実行します。
torutk$ cd work/elib-1.0 elib-1.0$ make install :
続いてinfoファイルのインストールを行います。Makefileには無いので、手でコピーします。
elib-1.0$ cp elib.info* d:/win32app/Meadow/info elib-1.0$
/win32app/Meadow/info/dirファイルに今コピーしたelibの設定を追記します。
* Elib: (elib.info). The Emacs Lisp Library.
tar+gz形式のアーカイブを解凍して、site-lispディレクトリ下に展開します。これだけでOKですが、もしバイトコンパイルしたいなら、GNU makeコマンドを入手してmakeを実行します。
torutk$ cd /win32app/Meadow/site-lisp site-lisp$ tar xzf /tmp/jde-atest.tar.gz site-lisp$ cd jdee-2.3.5/lisp lisp$ make EMACS=/win32app/Meadow/bin/Meadow.exe \ CEDET=../../cedet-1.0beta3b ELIB=../../elib-1.0 : lisp$
JDEEは、EmacsのメジャーモードであるJDEモードとして動作します。Emacs起動時にJDEEパッケージを読み込んでおくか、必要な時に手動でJDEEパッケージを読み込んでおくか2つの方法があります。JDEEはそれなりに重いので、Java開発環境を頻繁に使うなら前者で、たまにしか使わないなら後者で使用するとよいかと思います。
(require 'jde)
後でJDEEパッケージを起動するためのトリガを設定
(autoload 'jde-mode "jde" "Java Development Environment for Emacs." t) (setq auto-mode-alist (cons '("\.java$" . jde-mode) auto-mode-alist))
拡張子が.javaのファイルをEmacsのバッファに開いた最初の時にJDEEパッケージを起動します。あるいは、M-x jde-modeでも起動できます。
CEDETを使用している場合、.emacsに以下の記述を行います。
(setq semantic-load-turn-useful-things-on t) (load "cedet")
JDEEパッケージそのものの設定ではありませんが、JDEモードを使用するときに設定しておくと便利な項目を紹介します。
ユーザ名とメールアドレス設定(例)
(setq user-full-name "TAKAHASHI,Toru") (setq user-mail-address "torutk@02.246.ne.jp")
Javaソースコードの雛型を生成する際に、ファイルコメントの一部(@author)に展開されて使用されます。
JDEモードにおけるインデント設定(例)
(add-hook 'jde-mode-hook '(lambda () (c-set-offset 'arglist-intro '+) (c-set-offset 'arglist-close 0) (c-set-offset 'topmost-intro-cont 0) (c-set-offset 'func-decl-cont 0) (setq indent-tabs-mode nil) ))
JDEモードでのインデントをカスタマイズします。
(let ((elem (assq 'encoded-kbd-mode minor-mode-alist))) (when elem (setcar (cdr elem) "")))
Meadow1.15(Emacs 20.7)にSemanticパッケージを入れた時に以下の問題が発生しました。
Meadow起動時にInvalid face property.underlineが発生
semantic 1.4に含まれるsemantic-util-modes.elの中にある以下の記述が原因となっています。
(:underline "red")
これを以下のように修正します(二箇所あり)。
(:background "red" :underline t)
パッチファイルをここに置いています。
Emacs 20.xでは、"red"がnilのように扱われるそうですが、Meadow 1.1xの場合は厳密に評価されてエラーとなってしまうそうです。nilのように扱われる場合、色もアンダーラインも付かないかもしれません。
Meadow 2.00b1にspeedbarパッケージを入れた時に以下の問題が発生しました。
speedbar起動し、ツリーからファイルを選択するとSymbol's function definition is void: w32-focus-frameが発生
Meadow2.00b1で、w32-focus-frameが定義されていないのが原因です。.emacs等で以下のように関数を定義しておき回避します。
(fset 'w32-focus-frame 'x-focus-frame)
Meadow 3.00(Emacs 22.0)にsemanticパッケージを入れた時に以下の問題が発生します。
cedetのcvs公開サイトから最新版のsemantic-idle.el(Ver.1.35)を入手し差し替えて回避します。 ViewVCでのsemantic.elページ
[Thanks to tobetchiさん]
Meadow 3.00(Emacs 22.0)にJDEEパッケージを入れた時に以下の問題が発生します。(解決策調査中)
例えばコンパイル操作に割り当てられたC-c C-v C-cを実行しようと、C-c C-vまで操作した時点で、C-c C-v is undefined とエラーが発生します。
JDEEモードの最初の操作として、簡単な単一のJavaソースファイルからなる小さなプロジェクトを作成し、コンパイル、実行およびデバッグをしてみます。作業の流れは以下のとおりです。
まずEmacsを起動します。Emacs起動時にJDEEパッケージが初期化されていなければ、ここでJDEEパッケージを起動します。
[Files]メニューの[JDE New]→[Console...]を選択します。
すると、ミニバッファにカレントディレクトリが表示されるので、作成するJavaソースファイル名をミニバッファに入力します。下記は、workディレクトリの中にHelloJdee.javaというファイルを作成する場合の例です。
次に、ミニバッファにPackage:とプロンプトが出ます。生成するソースファイルに指定したいパッケージ名を入力します。ここではパッケージ名を使用しないので単に[Enter]を押します。
これで、mainメソッドを保持するクラスが生成されます。
テンプレートから生成されたソースコードの雛型に、コードを記述します。今回は、mainメソッドの中に、Hello JDEE World!と表示させる命令を書くことにします。
まず、キャレット(カーソル)をmainメソッド宣言行の次の行に持ってきます。そこで、[JDE]メニューの[Code Generation]→[Templates]→[println...]を選択します。このメニュー操作はキーバインドC-c C-v C-lに割り付けられているので、C-c C-v C-lを操作しても同じです。操作直後の画面を以下に示します。
キャレットのある行に'System.out.println('が挿入され、ミニバッファに'Print out:'のプロンプトが表示されます。ここに、System.out.printlnの引数としてコーディングする内容を記述し[Enter]を押します。
すると、System.out.printlnの文が完成した形で挿入されます。
mainメソッドにprintlnを記述したら、次にはmainメソッドにコメントを記述します。[JDE]メニューの[Documentation]→[Add]を選択します。このメニュー操作はキーバインドC-c C-v jに割り付けられているので、C-c C-v jを操作しても同じです。操作直後の画面を以下に示します。
あとは、コメントの内容を適宜編集します。
では、コンパイルを行います。JDEE上からコンパイルするためには設定が必要です。コンパイルの設定方法は、JDEEの設定:コンパイル設定を参照して下さい。コンパイル設定には3通りの方法がありますが、ここでは「2.javac」を使用してみましょう。
設定が完了したら、コンパイルを実行します。HelloJdee.javaのバッファの上で、C-c C-v C-cを操作します。すると、画面が分割され、下側に*compilation*という名のバッファが現れます。
コンパイルが成功すれば、一定時間後にバッファが消えます。コンパイルが失敗すれば、*compilation*バッファにエラーメッセージが表示されます。
コンパイルにエラーがあった場合、*compilation*バッファにエラーメッセージが表示されます。エラーメッセージの最初の箇所にキャレットが移動しています。*compilation*バッファのエラー行が書かれている行にキャレットを移動して[RET]キーを押せばエラー行にジャンプします。また、ソースバッファで、[C-x `]を叩けば、現在表示しているエラー行の次のエラー行ヘジャンプします。
C-c C-v C-rを操作すると、バッファに表示されているクラスを実行します。
今回は単一のクラスで実行可能であり、かつpackageを使用していないので特に設定を追加することなく実行できました。しかし本格的なプログラムの場合、CLASSPATHやmainを持つクラス名、コマンドラインオプションなどの設定を行っておく必要があるでしょう。
デバッグには、旧来のJDBを使用するものと、JPDA(Java Platform Debugger Architecture)を使用するものと2つの方法があります。デバッグの設定方法は、JDEEの設定:デバッグ設定を参照して下さい。ここでは、「2.JDEbug」を使用してみましょう。また、合わせてコンパイルオプションにデバッグ情報を付加する設定も行なっておいて下さい。
まず、ブレークポイントを置く行を選択します。JDEbugによるデバッグの場合、デバッグ実行を開始するとブレークポイントまで実行します。
すると、ブレークポイントが置かれた行が反転する状態になります。
[JDE]メニューから、[Debug App(C-c C-v C-d)]を選択します。
デバッグ実行中は、ローカル変数の状況を表示するウィンドウが新たに表示されます。
操作内容 | コマンド | メニュー |
---|---|---|
現在開いているバッファをコンパイル | C-c C-v C-c | [JDE]→[Compile] |
現在開いているバッファのプロジェクトをビルド | C-c C-v C-b | [JDE]→[Build] |
JDEEでは、編集中のバッファをコンパイルするか、makeやantを実行してプロジェクトをビルドすることができます。キーバインドは上述の表のとおりで、それぞれ設定は次の章で述べています。
JDEEには、Javaをインタプリタ的に利用できるBeanShell環境が付いています。このインタプリタ環境は、プログラム開発中にAPIの挙動を実験して確認するのにうってつけなのです。
操作内容 | コマンド | メニュー |
---|---|---|
BeanShell操作用バッファの起動 | C-c C-v C- | [JDE]→[Interpreter]→[Start] |
JDEEでは、ソースコードをブラウズするための支援機能として、次のものが提供されています。
また、JDEEとは別パッケージになりますが、統合環境風のソースコードブラウザECBを組合せることもできます。Meadow and JDEページのECBに簡単な紹介を(ちょっと古いバージョンのものですが)記述しています。
[Classes]メニューを選択すると、関連するクラスのフィールド、メソッドがカスケードメニュー形式で一覧でき、選択するとソースの該当箇所がバッファに開かれます。関連するクラスの範囲は、メニュー選択時のファイルと同一ディレクトリのようです。
M-x speedbar RETとすると、speedbarウィンドウが表示されます。ドリルダウンのツリービュー形式で、ソースファイル、フィールド、メソッドが一覧できます。選択すれば、該当箇所がバッファに開かれます。
emacsではおなじみの機能の拡張です。
JDEEでは、クラスパスやコンパイル方法指定、各種オプションなどの開発環境の設定を行うことができます。設定には、customというEmacs Lispパッケージを利用しているので、Emacs上で設定を記述、変更することができます。設定内容はプロジェクトファイルに記述されますが、従来のように.emacsに書くことも出来ます。開発するプログラム単位に設定を使い分けたい場合はプロジェクトファイルに、ユーザで共通の設定なら.emacsに設定を記述するようにしたらよいでしょう。
customによるJDEEの設定には、メニューから到る方法と、ミニバッファ上で設定を直接指定する方法があります。
メニューから到る場合は、下記画面のようにJDEメニューから[Project]→[Options]を選択すると、General, Compile, Run, Debug, Autocode, Javadoc, Make, Ant, Complete, Wizと10種類の設定グループが表示されます。設定内容を保存するには、JDEメニューの[Project]→[Project File]→[Save]を選択します。
JDEメニューから[Project]→[Options]→[General]を選んだ場合、今までJavaのソースが表示されていたバッファの上に、Emacsのcustomizeパッケージを利用したJDEE設定(Jde Project設定グループ)画面のバッファが表示されます。
何らかの設定を変更したら、上の画面の中にある、[Set for Current Session]かまたは[Save for Future Sessions]をクリックします。これを行わないと変更が反映されません。
ミニバッファから設定機能を実行することもできます。メニューから逐次辿っていくのは慣れてくると面倒なものです。ミニバッファから設定したい箇所を直接起動することができます。例えば"Jde Project設定グループ"を直接指定する場合は、M-x customize-group RET jde RETとします。同様に、"Jde Compiler設定"を直接指定する場合は、M-x customize-variable RET jde-compiler RETとします。
ファンクション名 | 内容 |
---|---|
customize-variable | 変数名を直接指定して変更画面を表示する |
customize-group | グループ名を指定して変更画面を表示する |
JDEEでは、以下の3種類のコンパイル方法が提供されています。コンパイルは、現在バッファに開いているソースファイルをコンパイルします。また、MakefileやAnt等を使ったビルドが別に提供されています。
javac serverは、JDEE2.2.9から導入された方法です。SunのJ2SE SDKに含まれているjavacコマンドを外部コマンドとして実行すると、1つのソースファイル毎にjavacプロセスが起動されるので遅いとう問題があります。javacコマンド自身もjavaで書かれたプログラムなので、コマンドを実行するたびにJavaVMが起動するためです。そこで、コンパイル・サーバ用プロセスを最初に起動しておき、コンパイル時は既に稼働しているサーバへ要求を出すことによって実現するという方法が導入されました。
javacは、従来どおりのjavacコマンドによるコンパイルです。
jikesは、IBMで開発されている高速なjavaコンパイラjikesを使ったコンパイルです。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Compiler |
Compler type | javac server/javac/jikesの三択 |
Path | javac/jikesの実行ファイルのパスを指定する |
JDEEから呼び出すコンパイラを設定するには、JDEメニューから[Project]→[Options]→[General]を選んでカスタマイズバッファを表示させ、Jde Compilerを探します。探すにあたって、Emacsではマウスやカーソルで目的行が現れるまでちまちまスクロールさせる操作は労力が大きいため滅多に使用しません。よく使用する方法は、インクリメンタルサーチを使って目的の場所へ移動させるものです。C-sを押すとミニバッファに'I-search:'とプロンプトが表示されるので、[j],[d],[e],[ ],[c]とキーを押していくと、設定項目'Jde Compiler'の個所へスクロールします。
Jde Compilerの設定を行うため、[Show]をクリックします
ここで、3種類のどれかを選択します。デフォルトでは、javac serverが選択されています。
メニューから手繰るのが面倒なら、ミニバッファからM-x customize-variable RET jde-compiler RETとすれば一発です。
javac serverを選択した場合、server起動のためのJavaVMおよびコンパイルのためのクラスファイル(JDKに付属のtools.jar)を設定する必要があります。設定は以下のカスタマイズ変数に記述します。
なお、デフォルトでは環境変数JAVA_HOMEに設定された値を参照します。個々のプロジェクトでJDKのバージョンを切り替える必要がなければ、ユーザの環境変数JAVA_HOMEに指定しておいてもよいでしょう。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Jdk Registry |
Version | JDKのバージョンを指定する。例:1.4.1 |
Path | JDKのディレクトリを指定する。例:/java/j2sdk1.4.1 |
この項目は、複数のJDKを設定しておくことができます。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Jdk |
値 | Jde Jdk Registryで設定したVersionの1つを選択する。例:1.4.1 |
この項目を設定する前に、先にJde Jdk Registryを記述しておきます。Jde Jdk Registryを設定し、[Set for Current Session]等で反映すると、Jde Jdkの値はJde Jdk Registryで設定したJDKをラジオボタンで選択できるようになります。
javac serverを使用してコンパイルした場合、エラーメッセージが化ける(エスケープされた表示)状態となります。これは、javac serverが裏で使用しているBeanShellが日本語対応していないため、日本語ロケールでjavacを実行したときに表示される日本語メッセージが化けてしまうからです。
回避方法として、BeanShell起動時にJava VMを英語ロケールで起動するオプションを付加します。
カスタマイズ項目 | 内容 |
---|---|
グループ | Bsh |
変数名 | Bsh Vm Args |
値 | -Duser.language=en |
この設定を、プロジェクト毎に個別に毎回設定するのはかなり面倒なことです。その場合は、.emacsに最初に指定してしまうこともできます。方法は簡単で、customizeで設定後、customizeバッファの最初の方にある[Save for Future Sessions]を指定(クリック)します。すると、JDEEのプロジェクトファイルではなく、ユーザの.emacsファイルに設定が追記されます。
.emacsの末尾に、custom-set-variablesという関数の中に、今設定したbsh-vm-argsの設定が書かれています。この画面では他に、jde-jdk-registryも.emacs中に設定しています。このようにプロジェクトが違っても共通で使用したいものがあれば、customizeバッファから[Save for Future Sessions]で.emacsに設定を反映させることができます。
コンパイルの指定でjavacを選んだ場合、javacコマンドへのパスを追加記述します。
JDEE2.3.0ではjavacでコンパイルする際、エラーが発生していても、コンパイル終了後一定時間たつとバッファが消えてしまいます。javacで実行したプロセスの成否を上手く判断できていないようです。消えるといってもバッファを切り替えれば見えるので、大きな問題ではないですが。。。回避策としては、コンパイル成功時にコンパイルバッファを消す設定を無効にします。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde |
変数名 | Jde Compile Finish Hook |
値 | jde-compile-finish-kill-bufferを削除する |
コンパイル時のソースパス設定は以下のカスタマイズ変数に設定します。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Compile Options |
変数名 | Jde Compile Option Sourcepath |
値 | コンパイル対象ソースファイルの基点ディレクトリを設定する(例:~/javaw/projectOne/src) |
注意)このカスタマイズ項目と似た名前を持つJde ProjectグループのJde Sourcepath変数があるので間違わないように注意。
JDEEでは、以下の2種類のビルド方法が提供されています。デフォルトではmakeが有効となっています。
ビルド方法は以下のカスタマイズ変数で指定します。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Build Function |
Function | jde-make/jde-ant-build/ユーザ定義の三択 |
jde-makeが選ばれているときは、ビルド操作(C-c C-v C-b)でmakeが実行されます。Antを実行したいときは、jde-ant-buildを選択します。
makeのコマンド名を以下のカスタマイズ変数で設定します。デフォルトは'make'です。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Make Program |
値 | makeコマンド名を設定する(例:gmake) |
makeは、makefileのあるディレクトリで実行することが大半です。そこで、以下のカスタマイズ変数で指定します。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Make Working Directory |
値 | make実行ディレクトリを設定する(例:~/javaw/projectOne/src) |
makeコマンドに引数を渡したいときは、以下のカスタマイズ変数に設定します。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Make Args |
値 | makeコマンドへ渡す引数を設定する(例:-k) |
Antの起動方法は以下の3種類が提供されています。
Scriptは、Antに付属するシェルスクリプトまたはバッチファイルをJDEEから呼び出します。
Javaは、JDEEからjavaコマンドを使ってAntのクラスファイルを直接起動します。
Ant Serverは、コンパイルにおけるjavac serverと同様、Antサーバ用プロセス(bsh)を最初に起動しておき、ビルド時はサーバへ要求を出す方法です。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Ant |
変数名 | Jde Ant Invocation Method |
値 | Script/Java/Ant serverの三択 |
起動するAntのスクリプト名を以下のカスタマイズ変数で設定します。デフォルトは'ant'です。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Ant |
変数名 | Jde Ant Program |
値 | antコマンド名を設定する(例:ant.bat) |
Ant 1.5に付属する'ant'シェルスクリプトは、Cygwin上ではエラーとなります。JDEEからCygwinのbashを通じてScriptでビルドを実行するときは、'ant.bat'を設定するとよいでしょう。
Antのスクリプトを実行するには、JAVA_HOME環境変数を設定しておくことが必要です。JAVA_HOMEは、Emacs起動前に環境変数に設定しておく必要があります。
javaコマンドからAntを起動します。Windows/Cygwinでは、エラーとなってしまいます。原因は不明。
Ant Server(bsH)経由でAntを起動します。javac serverによるコンパイルと同じく、Jde Jdk Registryの設定が必要です。
システムのANT_HOME環境変数にAntをインストールしたディレクトリが設定されていない場合、以下のカスタマイズ変数で設定しておくことが必要です。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Ant |
変数名 | Jde Ant Home |
値 | Antをインストールしたディレクトリを設定する(例:d:/java/jakarta-ant-1.5) |
ビルドを実行すると、ソースファイルのあるディレクトリにAnt構築ファイル(build.xml)を探し、見つからないとエラーとなってしまいます。しかし、通常Ant構築ファイル(build.xml)はソースファイルのトップディレクトリに置きます。そこで、ソースファイルのあるディレクトリから上に登ってbuild.xmlを探すように設定します。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Ant |
変数名 | Jde Ant Enable Find |
値 | on (non-nil) |
ビルドを実行すると、Antがターゲット名指定なしに起動されます。このときはAnt構築ファイル(build.xml)に設定したデフォルトのターゲットが指定されます。開発時はターゲットを自由に指定できると便利ですので、ビルド時にミニバッファでターゲット名を入力できるようにします。以下のカスタマイズ変数で設定します。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Ant |
変数名 | Jde Ant Read Target |
値 | on (non-nil) |
Ant構築ファイル名は、デフォルトでは'build.xml'ですが、これは自由に変えることができます。以下のカスタマイズ変数でAnt構築ファイル名を設定します。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Ant |
変数名 | Jde Ant Buildfile |
値 | makefile.xml |
JDKのAPIドキュメントを参照します。
操作内容 | コマンド | メニュー |
---|---|---|
JDK APIドキュメントをブラウザ起動して表示 | C-c C-v C-n | [JDE]→[Help]→[JDK] |
カーソル位置のクラスをJDK APIドキュメントから探してブラウザに表示 | C-c C-v C-w | [JDE]→[Help]→[Symbol at Point] |
クラス名を指定してJDK APIドキュメントから探してブラウザに表示 | - | [JDE]→[Help]→[Class...] |
これらの機能を使用する場合、APIドキュメントが置かれているディレクトリをあらかじめ設定しておく必要があります。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Help Docsets |
Docset type | JDK APIを指定 |
Docset directory | JDK APIを展開したディレクトリ(例 d:/java/j2sdk1.4.1/docs/api) |
Doc lookup function | nil |
JDEE上からJavaプログラムを実行する際のいろいろな設定について紹介します。
Javaプログラムを起動するときに、コマンドラインオプションを指定することができます。JDEEでは、あらかじめプロジェクト設定においてオプションを記述する方法と、実行する際に(毎回)コマンドラインオプションを入力する方法が提供されています。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Run Options |
変数名 | Jde Run Option Application Args |
値 | コマンドラインに渡すオプション |
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Run Read App Args |
値 | on (non-nil) |
JDEEでは、以下の2種類のデバッグ方法が提供されています。
JDBコマンドは、JDK1.1の頃から装備されていたコマンド指向のデバッガです。JDEEから起動すると、ソースコードとは独立したバッファ上で実行されます。
JPDAは、JDK1.3から装備された新しいデバッグ機構です。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Debugger |
値 | JDEbug/jdb/old jdbの三択 |
デフォルトでは、jdbが選択されています。
[JDE]メニューの[Debug App](C-c C-v C-d)を選択すると、jdbのコマンドを実行するバッファが表われます。ここに、通常のコンソールからjdbを実行したときと同じようにコマンドを入力をするとデバッガの機能を実行することができます。
[JDE]メニューの[Debug App](C-c C-v C-d)を選択すると、デバッグプロセスの出力バッファが表われます。また、ローカル変数を表示する別ウィンドウが表われます。JDEbugの場合、ソースコードを表示するバッファ上にブレークポイントや現在実行している行を示す表示があります。
デバッガでデバッグする際には、コンパイルオプションに'-g'を追加しておく必要があります(ローカル変数を見るには)。デバッグ情報のコンパイルオプションを指定するには、以下の設定を使用します。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Compile Options |
変数名 | Jde Compile Option Debug |
値 | all/none/selected の三択、selectedの場合さらに、Line Numbers/Variables/Sourceそれぞれにon/offを選択 |
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Db Options |
変数名 | Jde Db Option Application Args |
値 | コマンドラインオプションとして渡す文字列を設定する |
JavaDoc形式のコメントは、クラス、フィールド、メソッドに対して記述します。その際、カーソルをクラス、フィールド、メソッドの宣言行に置いてから[JDE]→[Documentaion]→[Add]を実行すると、その宣言行に合ったドキュメントコメントが生成されます。例えば、mainメソッドの宣言行で実行すると、
/** * Describe <code>main</code> method here. * * @param args a <code>String[]</code> value */ public static void main(String[] args) {
のように、引数の名前を@paramに取り込んでくれます。
JDE→Project→Options→Autocodeで開かれるCustomize Aproposバッファ中で、Jde Gen Buffer Boilerplateの項目に記述する。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Gen |
変数名 | Jde Gen Buffer Boilerplate |
値 | 実際のコードを記述。 |
Jde Gen Buffer Boilerplate: [Hide] [INS] [DEL] Line: /* [INS] [DEL] Line: * Torutk jde mastering project. [INS] [DEL] Line: * Copyright (C) 2000 by Toru TAKAHASHI, all rights reserved. [INS] [DEL] Line: * [INS] [DEL] Line: */ [INS] [DEL] Line: [INS] [State]: you have edited the value as text, but you have not set the option. Lines of boilerplate text to put at the head of a buffer template.
登録されている省略語を入力した後にスペースキーを押すと、省略語をキーワードに展開することができます。キーワード展開はデフォルトでは無効になっています。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Enable Abbrev Mode |
値 | on / off |
キーワード展開が有効になっていると、EmacsのステータスバーにAbbrevが表示されます(下図参照)。
省略語とキーワードは、カスタマイズで登録することができます。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Mode Abbreviations |
Abbreviation | 略語 |
Expansion | 展開する文字列 |
デフォルトでは以下のキーワード補完リストが登録されています。
略語 | 補完されるキーワード |
---|---|
ab | abstract |
bo | boolean |
br | break |
by | byte |
byv | byvalue |
cas | cast |
ca | catch |
ch | char |
cl | class |
co | const |
con | continue |
de | default |
dou | double |
el | else |
ex | extends |
fa | false |
fi | final |
fin | finally |
fl | float |
fo | for |
fu | future |
ge | generic |
go | goto |
impl | implements |
impo | import |
ins | instanceof |
in | int |
inte | interface |
lo | long |
na | native |
ne | new |
nu | null |
pa | package |
pri | private |
pro | protected |
pu | public |
re | return |
sh | short |
st | static |
su | super |
sw | switch |
sy | synchronized |
th | this |
thr | throw |
throw | throws |
tra | transient |
tr | true |
vo | void |
vol | volatile |
wh | while |
制御構文を展開することができます。制御構文展開を有効にした後、例えばmainとキー入力してから直後にスペースキーを押します。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Gen |
変数名 | Jde Gen Cflow Enable |
値 | on / off |
制御構文展開を有効にすると、デフォルトでは以下のリストの制御構文の展開が可能になります。
略語 | 展開される構文 |
---|---|
if | if ( ) { } |
else | else { } |
ife | if ( ) { } else { } |
eif | else if ( ) { } |
while | while () { } |
for | for () { } |
fori | for (int = 0; < ; ++) { } |
foriter | for (Iterator = .iterator(); .hasNext();) { .next(); } |
main | public static void main(String[] args) { } |
switch | switch () { case: break; default: break; } |
case | case : break; |
try | try { } catch ( e) { } |
catch | catch ( e) { } |
tryf | try { } catch ( e) { } finally { } |
finally | finally { } |
ここで記述した展開される構文では改行やインデントを省略しています
また、展開した制御構文の閉じ括弧の後にコメントを生成するかしないかを設定することができます。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Gen |
変数名 | Jde Gen Comments |
値 | on / off |
// コメント生成有の場合、[i][f][スペース]で以下のコードが生成 if ( ) { } // end of if () // コメント生成無の場合、[i][f][スペース]で以下のコードが生成 if ( ) { }
コードを書いているときに、新しいクラスを使用するために、import文を書くのは面倒な作業です。JDEでは、コマンド1つでimport文を追加する機能があります。既にimport済みなら、2重にimport文を加えることはありません。
操作内容 | コマンド | メニュー |
---|---|---|
import文の追加 | C-c C-v C-z | [JDE]→[Code Generation]→[Wizards]→[Import class..] |
ミニバッファにClass:とクラス名を聞いてくるので、クラス名を入力します。本コマンド実行時にあらかじめキャレット(カーソル)をimportしたいクラス名の上または直後に置いておくと、ミニバッファにそのクラス名が現れます。
import文追加時に、指定したクラス名が複数のパッケージに存在する場合はどれをimportするかダイアログバッファを開いて聞いてきます。ほとんど使用しないパッケージがあるならば以下の設定で指定しておくことで外すことができます。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Import Excluded Packages |
値 | パッケージ名(正規表現可) |
開発が進んでいくと、Javaのソースコードにあるimport文が不要になっているにもかかわらず残ってしまっていることがあります。ソースコードを目で追いかけて不要なimport文を探し出すのは面倒だし困難で間違いも起きやすいです。
操作内容 | コマンド | メニュー |
---|---|---|
import文の削除 | M-x jde-import-kill-extra-imports | なし |
コーディングしながら随時import文を自動生成していると、import文の並びがばらばらになってしまいます。ソースコードの美しさの観点ではimport文はやっぱりパッケージごとに整然と並んでいて欲しいです。
操作内容 | コマンド | 備考 |
---|---|---|
import文の並び換え | M-x jde-import-organize | |
import文の並び換え | M-x jde-import-sort | アルファベットの昇順(降順)に並べ換える |
また、以下の設定をしておくと、import文の追加時に自動的にソートされます。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Project |
変数名 | Jde Import Auto Sort |
値 | on |
クラスやインスタンスのフィールドやメソッド名を補完する機能があります。コーディング中、クラス名または変数名をタイプ後にピリオド('.')をタイプし、その後、以下の表の操作のどちらかを実行します。
操作内容 | キーバインド | メニュー |
---|---|---|
最初の補完候補の挿入 | C-c C-v . | なし |
補完候補の一覧表示 | C-c C-v C-. | なし |
ミニバッファに候補が現れます。例えば、StringBuffer型の変数bufferに対して、buffer.apとタイプした後にC-c C-v .とタイプすると、ミニバッファにappend(...)と候補となるフィールド・メソッド名が表示され、バッファにはその最初の候補が挿入されます。候補が複数あるときは、C-c C-v .とタイプする毎に次の候補がミニバッファに表示されます。
ポップアップメニューに候補の一覧が表示されます。
System.out.println("...");というコードを書くことは非常に多いですが、タイプするのは長くて面倒です。そこで、、、
操作内容 | キーバインド | メニュー |
---|---|---|
println補完 | C-c C-v C-l | [JDE]→[Code Generation]→[Templates]→[println...] |
ミニバッファにPrint out:と、printlnメソッドへ渡す引数を聞いてくるので、キータイプします。ミニバッファに入力した文字列がprintlnメソッドの引数として記述されます。例えばSystem.out.println("Hello, World");とコーディングしたい場合は、ミニバッファには"Hello, World"とキータイプします。
Javaでは(というかオブジェクト指向プログラミングでは)、委譲を使うことがよくあります。委譲は機械的なコーディングをしなければならないので、かなり苦痛です。それをやわらげてくれる機能がJDEEにあります。
操作内容 | コマンド | メニュー |
---|---|---|
委譲コード生成 | [JDE]→[Code Generation]→[Wizards]→[Delegate Methods...] |
ミニバッファに属性名を聞いてくるので、フィールド名をキータイプします。フィールド名のオブジェクトへ、そのクラスが持つpublicメソッドの呼び出しを委譲するコードを生成します。
スーパークラスで定義したメソッドをオーバーライドするときに、サブクラスでそのメソッドのシグネチャを1からキータイプするのは手間であるだけでなく、メソッド名に1文字でもスペルミスがあるとオーバーライドではなく新規メソッドとして定義されてしまうため、デバッグに非常に苦労します。JDEEでは、このオーバーライドしたいメソッドのシグネチャ記述を自動で行うことが出来ます。
操作内容 | キーバインド | メニュー |
---|---|---|
オーバーライドメソッド生成 | C-c C-v o | [JDE]→[Code Generation]→[Wizards]→[Override Method] |
ミニバッファにMethod name:と聞いてくるので、メソッド名をタイプします。
Interfaceで定義したメソッドを実装するときに、実装クラスでそれらメソッドのシグネチャを1から打ち込むのは手間です。JDEEでは、この手間をコード生成機能で省いてくれます。実装したいInterfaceで定義されているメソッドがコメント付きで挿入されるほか、クラス定義のimplementsの生成、Interfaceで定義されているメソッドの引数・戻り値型がimport文として生成されます。実装したいインタフェースのクラスがクラスパスに含まれている必要があります。クラスパスは、JDEEのプロジェクトで設定します。
操作内容 | キーバインド | メニュー |
---|---|---|
インタフェース実装コード生成 | C-c C-v i | [JDE]→[Code Generation]→[Wizards]→[Implement Interface...] |
ミニバッファにInterface Nameを聞いてくるので、クラス名をキータイプします。ここで補完可能なクラスは既にJDEEのクラスパスで指定している中になくてはなりません。
Javaでは、インスタンス変数はメソッドを介してアクセスすることがよいコーディングとされています。したがって、コーディング中はインスタンス変数の定義とそのアクセス用メソッドをひたすら記述していく、やや機械的な作業を強いられます。そんなときにこのコード生成機能を使います。JDEには2通りの生成方法があります。
操作内容 | コマンド | メニュー |
---|---|---|
1組のGetter/Setter生成 | jde-gen-get-set | [JDE]→[Code Generation]→[Templates]→[Get/Set Pair...] |
クラスで定義したフィールドのGetter/Setter生成 | jde-wiz-get-set-methods | [JDE]→[Code Generation]→[Wizards]→[Generate Get/Set Methods] |
ミニバッファにVariable typeを聞いてくるので、生成するフィールドの型名をタイプします。次に、Variable nameを聞いてくるので、生成するフィールドの変数名をタイプします。すると、下記のようなソースコードがカーソル位置に展開されます。
String firstName; /** * Get the FirstName value. * @return the FirstName value. */ public String getFirstName() { return firstName; } /** * Set the FirstName value. * @param newFirstName The new FirstName value. */ public void setFirstName(String newFirstName) { this.firstName = newFirstName; }
クラスに定義されているフィールドのGetメソッドとSetメソッドを自動生成します。既にGet/Setメソッドが存在していれば、二重に生成されないようになっています。以下設定について述べます。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Wiz |
変数名 | Jde Wiz Get Set Variable Prefix |
値 | 接頭辞の文字列を指定する。例:new |
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde Wiz |
変数名 | Jde Wiz Get Set Variable Convention |
値 | Prefix/Postfix/Everything after the first upcase letter/nilの4択。Prefix/Postfixの場合はその文字列を指定。 |
"Get followed by set for each field" "Set followed by get for each field" "All get methods followed by all set methods" "All set methods followed by all get methods"
Emacs自身にも、コーディングを強力に支援する様々な機能が備わっています。順次紹介していきます。
Emacsの最強機能の一つです。Emacsが開いているファイル内の文字を略語展開の候補として拾ってきます。事前に略語の登録が不要なので動的と呼ばれています。以下の使用例を見ると一目瞭然でしょう。
ObjectOutputStream ostream = new Ob
Javaでは、比較的長い文字列が繰り返し登場します。これを手で一文字一文字タイプするのは苦痛です。かといって、マウスで選択してペーストするのは操作が繁雑でますます苦痛です。Emacsでは、このようなときに'Ob'とタイプした後にM-/を実行すると、Emacsが開いている各ファイルから'Ob'で開始する単語を拾って単語を展開してくれます。
ObjectOutputStream ostream = new ObjectOutputStream
複数の候補が合致するときは、繰り返しM-/を押すと次々単語が置き換わります。もし、候補を一覧したいときは、C-M-/を押すと別バッファが開いて候補一覧が表示されます。
操作内容 | コマンド |
---|---|
カーソル位置に候補を展開 | M-/ |
バッファを開いて候補一覧を表示 | C-M-/ |
Javaの場合、クラス名や変数名は大文字・小文字を区別します。そこで、動的略語展開の時に、大文字・小文字を区別する設定にしておく方が使い易いでしょう。
; 動的略語展開の設定(大文字・小文字を区別する) (setq dabbrev-case-fold-search nil)
JDEEは依存している各パッケージのバージョンチェックを行っています。あまり新し過ぎるパッケージを入れた場合にチェックでエラーとなってしまうことがあります。以下のカスタマイズ変数でパッケージバージョンチェック機構を無効にすることができます。
カスタマイズ項目 | 内容 |
---|---|
グループ | Jde |
変数名 | Jde Check Version Flag |
値 | off (nil) |
CEDETに含まれるSemanticパッケージのデフォルト設定では、ファイルが存在するディレクトリに、semantic.cacheという名前のデータベースファイルを作成します。これを、以下のように設定してあるディレクトリに集めることができます。
;semantic cache is ~/.semantic (setq semanticdb-default-save-directory (expand-file-name "~/.semantic"))
eieio、speedbar、semantic bovinatorの3つがセットになったcedetパッケージを使用せず、個別に利用する場合の情報を以下に示します。
パッケージ種類 | ファイル名 | バージョン | 入手先 | 備考 |
---|---|---|---|---|
eieio | eieio-0.17.tar.gz | 0.17 | http://cedet.sourceforge.net/eieio.shtml | 0.17beta3以上を要求 |
speedbar | speedbar-0.14beta4.tar.gz | 0.14 beta4 | http://cedet.sourceforge.net/speedbar.shtml | 0.14beta2以上を要求 |
Semantic Bovinator | semantic-1.4.4.tar.gz | 1.4.4 | http://cedet.sourceforge.net/semantic.shtml | 1.4beta13以上を要求 |
統合パッケージであるCEDETを使わず、speedbar、eieio、semanticを個別にインストールする場合の例を紹介します。
tar+gz形式のアーカイブを解凍して、site-lispディレクトリ下に展開します。これだけでOKですが、もしバイトコンパイルしたいなら、GNU makeコマンドを入手してmakeを実行します。
torutk$ cd /win32app/Meadow/site-lisp site-lisp$ tar xzf /tmp/speedbar-0.14beta4.tar.gz site-lisp$ cd speedbar-0.14beta4 speedbar-0.14beta4$ make \ EMACS=/win32app/Meadow/1.15/bin/MeadowNT.exe : speedbar-0.14beta4$
tar+gz形式のアーカイブを解凍して、site-lispディレクトリ下に展開します。これだけでOKですが、もしバイトコンパイルしたいなら、GNU makeコマンドを入手してmakeを実行します。
torutk$ cd /win32app/Meadow/site-lisp site-lisp$ tar xzf /tmp/eieio-0.17.tar.gz site-lisp$ cd eieio-0.17 eieio-0.17$ make EMACS=/win32app/Meadow/1.15/bin/MeadowNT.exe \ LOADPATH=../speedbar-0.14beta4 : eieio-0.17$
tar+gz形式のアーカイブを解凍して、site-lispディレクトリ下に展開します。これだけでOKですが、もしバイトコンパイルしたいなら、GNU makeコマンドを入手してmakeを実行します。
torutk$ cd /win32app/Meadow/site-lisp site-lisp$ tar xzf /tmp/semantic-1.4.4.tar.gz site-lisp$ cd semantic-1.4.4 semantic-1.4.4$ make EMACS=/win32app/Meadow/1.15/bin/MeadowNT.exe \ "LOADPATH=../eieio-0.17 ../speedbar-0.14beta4" : semantic-1.4$
tar+gz形式のアーカイブを解凍して、site-lispディレクトリ下に展開します。これだけでOKですが、もしバイトコンパイルしたいなら、GNU makeコマンドを入手してmakeを実行します。
torutk$ cd /win32app/Meadow/site-lisp site-lisp$ tar xzf /tmp/jde-latest.tar.gz site-lisp$ cd jdee-2.3.2/lisp lisp$ make EMACS=/win32app/Meadow/1.15/bin/MeadowNT.exe \ EIEIO=../../eieio-0.17 ELIB=../../elib-1.0 \ SEMANTIC=../../semantic-1.4.4 \ SPEEDBAR=../../speedbar-0.14beta4 : lisp$
バージョン | リリース日 |
---|---|
2.1.5 | 1999.03.12 |
2.1.6 | 2000.06.02 |
2.1.8 | 2000.06.24 |
2.1.9 | 2000.07.24 |
2.2.1 | 2000.08.08 |
2.2.2 | 2000.08.14 |
2.2.3 | 2000.09.05 |
2.2.4.1 | 2000.09.19 |
2.2.5.2 | 2000.10.10 |
2.2.6 | 2000.12.22 |
2.2.7 | 2001.05.23 |
2.2.7.2 | 2001.05.24 |
2.2.8 | 2001.08.26 |
2.2.9b5 | 2001.11.09 |
2.2.9b6 | 2001.11.22 |
2.2.9b7 | 2001.11.29 |
2.2.9b8 | 2002.01.19 |
2.2.9b9.1 | 2002.03.12 |
2.2.9b10 | 2002.06.18 |
2.2.9b11 | 2002.09.10 |
2.2.9b12 | 2002.09.11 |
2.2.9 | 2002.11.11 |
2.2.9.2 | 2002.11.21 |
2.3.0 | 2002.12.2 |
2.3.1 | 2002.12.10 |
2.3.2 | 2002.12.31 |
2.3.3b1 | 2003.06.17 |
2.3.3b2 | 2003.06.18 |
2.3.3b3 | 2003.06.22 |
2.3.3b4 | 2003.06.26 |
2.3.3b5 | 2003.07.08 |
2.3.3b6 | 2003.09.29 |
2.3.3 | 2003.12.9 |
2.3.4b1 | 2004.04.26 |
2.3.4 | 2004.11.9 |
2.3.5 | 2004.12.17 |