EmacsでJava の環境構築、CEDETとyasnippetとmalabar-mode
JavaといえばEclipseなんだけど、Eclipseの重さが以前から気になっていたのと、CourseraのおかげでEmacsに慣れてきたので、EmacsでJava開発環境を整える気分になりました。調べてみたらこちらがとても参考になります。
JDEEというのもあってそちらを推してる記事もあったけど、上記のブログによるとJDK7の様々な機能に対応していないとのこと。初学者としての自分は、先達の知恵をとにかくそっくりそのまま模倣しようとおもいます。さて、anything.elはすでに導入済みなので、malabar-modeとyasnippetを入れることにします。
yasnippetは特に難しいことはなかった。github(GitHub - joaotavora/yasnippet: A template system for Emacs)からとってきて、.emacs.d/site-lisp以下に展開、init.elのload-pathに加えrequireするだけだから。しかしmalabar-modeは単純ではなかった。こちらの拡張はそのままでは使えず、事前にCEDETなるEmacs拡張を入れ、さらにmavenなるJavaのビルドツールにてmalabar-modeをビルドする必要があるそうだ。
...
なんだかこの時点で相当げんなりしてました。Vimで編集出来ればいいじゃないか、Emacsで面倒なことはやめようかなと何度か思った。だけど、とりあえずやるだけやってみよう。そう、なにしろ将来的にはいろいろJavaやScalaで作りたいから。やったことを忘れないように書こう。
1. malabar-modeをgithub(GitHub - m0smith/malabar-mode: EMCS JVM Integration for Java and other JVM based languages)からとってきた。なにこれよくわかんない。
2. CEDETをsourceforge(CEDET download | SourceForge.net)からダウンロード、EMACS_HOME/.emacs.d/site-lispのしたに、cedet-1.1として展開
3. cedet-1.1のディレクトリに移り、以下のコマンドを打ち込む。なお、emacs.exeをフルパスで実行するのは大変なので、事前にemacs.exeへのaliasを作るかパスを通しおくと調子いい
emacs -Q -l cedet-build.el -f cedet-build
4. init.elに以下の記述を追加。たぶんこれでCEDETが動いてるんだろう。どうやって確認すればよいのかわからんが、メニュー−Toolsのしたに「Project Support (EDE)」とか出てくるからきっとうまく入ったのだろう。
(load-file "~/.emacs.d/site-lisp/cedet-1.1/common/cedet.el") (global-ede-mode 1) ; Enable the Project management system (semantic-load-enable-code-helpers) ; Enable prototype help and smart completion (global-srecode-minor-mode 1) ; Enable template insertion menu
5. Maven3をダウンロード(Maven – Download Apache Mavenより)。3.0.5というのを選んだ。
6. 自分のデスクトップ以下にdevというフォルダがあるので、そこにapache-maven-3.0.5を展開。
7. 環境変数のJAVA_HOMEをJRE7のインストールパス(自分の場合はデスクトップ以下 dev/Java/jre7)を設定。
8. Mavenのbinディレクトリにパスを通す。
9. コマンドプロンプトから 「mvn --version」 とやって次のような表示がでればMavenは適切にインストールされているということ。
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 22:51:28+0900) Maven home: C:\Users\MY_NAME\Desktop\dev\apache-maven-3.0.5\bin\.. Java version: 1.7.0_07, vendor: Oracle Corporation Java home: C:\Users\MY_NAME\Desktop\dev\Java\jre7 Default locale: ja_JP, platform encoding: MS932 OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
10. これでやっとmalabar-modeをビルドする準備が整ったわけです
11. malabar-modeのpom.xmlがある階層に移動。コマンドプロンプトから「mvn package」を実行する。色々ダウンロードしてきてビルドしてくれる...のはずだが、エラーが出てビルドに失敗する。
12. mvnを-eと-Xオプションをつけて実行してみては?とMavenに提案をうけるので仰せに従う
13. とにかくエラーがどかどかでる。依存関係が解決できないらしい。ログをみると、maven-compat:jar:3.0-SNAPSOT is missingとでているので、あたりをつけてpom.xmlの3.0-SNAPSHOTを3.0.5にする
14. 再度Mavenを実行するとさらにいろいろダウンロードしてきて結構進むが、最後にJava compilerがみつからないとのエラーがでる。
Caused by: org.apache.maven.plugin.CompilationFailureException: Compilation failure Unable to locate the Javac Compiler in: C:\Users\MY_NAME\Desktop\dev\Java\jre7\..\lib\tools.jar Please ensure you are using JDK 1.4 or above and not a JRE (the com.sun.tools.javac.Main class is required). In most cases you can change the location of your Java installation by setting the JAVA_HOME environment variable.
15. JAVA_HOMEをJREではなくJDKのディレクトリに設定する。
16. javacをつかって、ビルドがすすむがまた変なエラー
Running org.grumblesmurf.malabar.ClasspathTest Tests run: 7, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 6.931 sec <<< FAILURE! Running org.grumblesmurf.malabar.GroovyServerTest SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 5.306 sec <<< FAILURE! : : : [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.10:test (default-test) on project malab r: There are test failures. [ERROR] [ERROR] Please refer to C:\Users\MY_NAME\Desktop\dev\OSS\from_github\malabar-mode\target\surefire-reports for the indiv dual test results. [ERROR] -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-surefire- lugin:2.10:test (default-test) on project malabar: There are test failures. Please refer to C:\Users\MY_NAME\Desktop\dev\OSS\from_github\malabar-mode\target\surefire-reports for the individual te t results.
17. いい加減うんざりしてきたが、すなわち「org.slf4j.impl.StaticLoggerBinder」がCLASSPATHにはいってないからエラーがでてるんだろう、dependanciesに以下を追加。
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.6</version> </dependency>
18. しかしそれでも失敗する。なんだかやけになってきた。とりあえず最初からやり直そうとおもって、一旦.m2のディレクトリをごっそり消して、手順17で追加したslf4jのあたりもコメントアウト、そして再度 mvn -e -X packageを行ったが、やはりだめ。テストで失敗しているようなので、そこを乗り越えたい。
19. こちら(malabar-modeのインストール - 飼育係(べべ)日記(2011-02-22))を参考に以下ビルドコマンドを変えてを打ち込む。テストスキップのオプションです。
mvn -e -X -Dmaven.test.skip=true package
20. Emacsのパスが通ってなかったのでエラーとなる。しかし、パスを一時的に通して再度手順19のコマンドを実行する
21. ビルドが完了して、malabar-1.5-SNAPSHOT-dist.zipができた。.emacs.d/site-lisp/malabar-mode以下に展開
22. malabar-modeのインストール手順をみて、init.elにCEDETインストールで記述したところをコメントアウトそして、最後の一行を追加
;; ====== CEDET ====== (load-file "~/.emacs.d/site-lisp/cedet-1.1/common/cedet.el") ;;(global-ede-mode 1) ;;(semantic-load-enable-code-helpers) ;;(global-srecode-minor-mode 1) (semantic-load-enable-minimum-features)
23. init.elの以下追加。
;; ====== malabar-mode ====== (setq load-path (cons "~/.emacs.d/site-lisp/malabar-mode/lisp" load-path)) (require 'malabar-mode) (setq malabar-grooby-lib-dir "~/.emacs.d/site-lisp/malabar-mode/lib") (add-to-list 'auto-mode-alist '("\\.java\\'" . malabar-mode))
24. Emacsを起動してJavaのコードを開くと、malabarなるメニューが追加されている。めでたしめでたし。
25. まったくマルっと真似するべくyasnippet-java-modeもいれました。こちらは、yasnippet/snippetsの階層にて、以下を行っただけです。
git clone https://github.com/nekop/yasnippet-java-mode java-mode
とにかくはまって大変でした、、、
(2013/04/6 12:24 手順18にリンクを張ってなかったので、追加した)