CLOVER🍀

That was when it all began.

Emacs 24にauto-java-completeをインストールする

Emacsでプログラムを書く環境を整えたくて設定等をしているのですが、そのうちで困っているのがJava

これまで、普通にjava-modeで書いていたのですが(会社ではJDEE使っていました…)、ちょっとこれをなんとかしたくて。

で、最初にチャレンジしたのがmalabar-mode。

malabar-mode
https://github.com/m0smith/malabar-mode

Mavanと統合できてよさそうみたいな感じだったのですが、Melpaから入れたところelispでエラーになって、うまく起動せず…。手順通りcedetをmakeしたり、昔のバージョンを引っ張ってきたりしましたけど、解決できず挫折。

まあ、補完ができればいいかぁくらいに思っていたので、他に名前をちらほら見ていたauto-java-completeを導入することにしてみました。

auto-java-complete
https://github.com/emacs-java/auto-java-complete

インストール

elispのパスが通っている場所で、auto-java-completeをGithubからclone。Melpaには入っていません。

$ git clone https://github.com/emacs-java/auto-java-complete.git

タグファイル

auto-java-completeを動作させるためには、タグファイルというものが必要なようです。Javaの基本的なAPIが定義されたデフォルトのものは

java_base.tag.bz2

としてcloneしたディレクトリに入っているので、これを展開して

${HOME}/.java_base.tag

という名前で配置すればOKだったりもします。

ただ、これだと定義済みの範囲でしか補完できないので、補完対象を追加するには、自分でタグファイルを生成します。

cloneしたディレクトリに、

Tags.java

というファイルがあるので、これをコンパイル

$ javac Tags.java

あとは、生成したい対象をクラスパスに加えて、このクラスを実行します。

$ java -cp /usr/lib/jvm/java-8-oracle/jre/lib/rt.jar:. Tags

つまり、補完対象を変えたかったらタグファイルを作れと…。

設定

設定は、Emacsの設定ファイル(init.elとか)に以下を設定。

; yasnippet
(require 'yasnippet)
(yas/global-mode 1)

;; auto-complete
(require 'auto-complete)
(global-auto-complete-mode t)
(define-key ac-complete-mode-map "\C-n" 'ac-next)
(define-key ac-complete-mode-map "\C-p" 'ac-previous)

;; auto-java-complete
(require 'ajc-java-complete-config)
(add-hook 'java-mode-hook 'ajc-java-complete-mode)

あとは、Javaファイルを開くと勝手に補完してくれるようになります。

これで、一歩前進ですね。

参考)
emacs 23系でのJava編集
http://d.hatena.ne.jp/torutk/20120422/p1
EmacsJava〜ajc-java-completeを使う
http://boronology.blogspot.jp/2012/01/emacsjavaajc-java-complete.html
Android開発にも役立つEmacsの補完プラグイン - Ajc-java-complete
http://blog.clouder.jp/archives/001141.html