よし, 認めよう. 私は, Eclipse フリークだった.
Eclipse ですべての開発環境の統合を夢見て, あらゆるプラグインを試した.
全 C/C++ プログラマに捧ぐ!Eclipse CDT を使う時のオススメ機能/ プラグインまとめ | Futurismo
歳をとるにつれて, 若かりし誤った考えを改めた. 真の統合開発環境は Emacs なのでは?
いや, うすうすは気づいている. Java 開発では Eclipse が最強なことくらい.
しかし, それを分かっていてあえて Emacs を使うことは美しい行為ではないか?
それは, 死を覚悟して決戦に挑む武士のように.
この記事は, そんな不安と挑戦の記録です.
Environment
- Linux Mint 16
- Eclipe 4.3 Kepler
- Emacs 24
Java 開発環境について
まずは, Emacs における Java 開発環境を調べた.
以下の 3 つが選択肢としてある. 詳細な解説はリンク先に譲る.
JDEE
CEDET ベースのツール. あまりメンテナンスされていないようだ.
- Emacs 中毒者に贈る JDEE による Java 開発環境の構築|ざる魂
- https://epian-wiki.appspot.com/wiki/Emacs/JDEEEmacs/JDEE%20-%20epian-wiki
- EmacsWiki: Java Development Environment
malabar-mode
JDEE にかわってでてきたモダンな java のメジャーモード.
- Emacs で Java を書く - nekop の日記
- Emacs で Java の環境構築, CEDET と yasnippet と malabar-mode - 趣味プログラマがまれになんかしたことの記録
Eclim
Emacs から Eclipse をつかう. その発想があったか!
選定する
選ぶに当たって重視する機能は,
- JUnit 連携機能
- リファクタリング
- コード補完・タグジャンプ
- Android 開発連携
malabar-mode に挑戦したが, maven がよくわからずに挫折.
なので, eclim を試す.
開発環境を整える
eclim
インストーラがあるので, 指示にしたがって入れればよい.
eclim-emacs
emacs から利用するためには, eclim-emacs を入れる.
使い方
設定ファイルに以下を追記.
(require 'eclim)
(require 'eclimd)
;; java-mode で有効
(add-hook 'java-mode-hook 'eclim-mode)
M-x start-eclimd で eclipse を eclim デーモンとして起動.
M-x eclim-project-mode で workspace にあるプロジェクト一覧が表示される.
適当にソースを選んでごにょごにょ. 詳しくは, README 参照. まだ, あんまりいじくりまわしていない.
M-x stop-eclimd で eclipse を eclim デーモンを終了.
このページがとても詳しいのでリンクをはっておきます.
- [[https://www.skybert.net/emacs/java/][.:: skybert.net :: emacs
- java ::.]]
auto-complete/company-mode で自動補完
auto-complete/company-mode で eclipse の補完機能と連携できる.
;; regular auto-complete initialization
(require 'auto-complete-config)
(ac-config-default)
;; add the emacs-eclim source
(require 'ac-emacs-eclim-source)
(ac-emacs-eclim-config)
;; for company-mode
;; (require 'company-emacs-eclim)
;; (company-emacs-eclim-setup)
タグジャンプ
‘eclim-java-find-references で定義元にジャンプできる. しかし, gtags をしてもいい.
(define-key eclim-mode-map (kbd "C-c C-e l") 'eclim-java-find-references)
Program 起動
org.eclim.java.run.mainclass にメインクラスを設定.
- Java / Jps - eclim (eclipse + vim)
- Settings - eclim (eclipse + vim)
- vim - Eclim - What to set org.eclim.java.run.mainclass to? - Stack Overflow
設定方法は, .settings/org.eclim.prefs というファイルを作成して,以下を書き込む
org.eclim.java.run.mainclass=<Class Name>
しかし, これだけでは動作しなかった. main メソッドの場所で eclim-run-class を実行すると, ようやく eclim 経由で java program が起動.
起動は, eclim の機能を利用するのではなくて, 別のビルドツールを利用したほうがいいな.
JUnit を動かす
これで JUnit が動いた. これはいいな.
(defun eclim-run-test ()
(interactive)
(if (not (string= major-mode "java-mode"))
(message "Sorry cannot run current buffer."))
(compile (concat eclim-executable " -command java_junit -p " eclim--project-name " -t " (eclim-package-and-class))))
最後に
使いこなすには, 時間がかかりそうな.
今は, まだ eclipse のほうがいいと思っている. いや, 負けるな Emacs!
.emacs の設定
最後に設定を張り付けておく.
(require 'eclim)
;; java-mode で有効
(add-hook 'java-mode-hook 'eclim-mode)
;; eclim daemon
(require 'eclimd)
;; regular auto-complete initialization
(require 'auto-complete-config)
(ac-config-default)
;; add the emacs-eclim source
(require 'ac-emacs-eclim-source)
(ac-emacs-eclim-config)
;; for company-mode
;; (require 'company-emacs-eclim)
;; (company-emacs-eclim-setup)
;; Displaying compilation error messages in the echo area
(setq help-at-pt-display-when-idle t)
(setq help-at-pt-timer-delay 0.1)
(help-at-pt-set-timer)
;; add keybinds
(define-key eclim-mode-map (kbd "C-c C-e p q") 'eclim-problems)
(define-key eclim-mode-map (kbd "C-c C-e p o") 'eclim-problems-open)
(define-key eclim-mode-map (kbd "C-c C-e p n") 'eclim-problems-next)
(define-key eclim-mode-map (kbd "C-c C-e p p") 'eclim-problems-previous)
;; Re-map `eclim-project-create' to C so that I can use c for
;; `eclim-problems-correct'
(define-key eclim-mode-map (kbd "C-c C-e p C") 'eclim-project-create)
(define-key eclim-mode-map (kbd "C-c C-e p c") 'eclim-problems-correct)
(define-key eclim-mode-map (kbd "M-.") 'eclim-java-find-declaration)
;; find-references = list-callers.
(define-key eclim-mode-map (kbd "C-c C-e l") 'eclim-java-find-references)
;; skip warning error
(setq compilation-skip-threshold 2)
(setq eclim-eclipse-dirs "/opt/eclipse/kepler")
(setq eclim-executable "/opt/eclipse/kepler/eclim")
(setq eclimd-executable "/opt/eclipse/kepler/eclimd")
(setq eclimd-default-workspace "/mnt/win/src/coursera")