読者です 読者をやめる 読者になる 読者になる

ポクポク

ポクッとしてツナッ

ENSIMEをsbt0.10に対応させる

Scala

今まで使ってたsbt0.7をガラっと変わった0.10にしてみました。
そしたらENSIMEが補完してくれなくなった!!!!!!!!!!!!!!!!!!!!!


なんでかっていうと、sbt0.10(xsbt)以前はプロジェクトディレクトリにlib_managedというディレクトリが作られ、設定ファイルに書いた外部のjarをsbtがダウンロードしてくれてたんです。
でも毎回毎回プロジェクト作るごとにダウンロードするのは不毛なので、~/.ivy2/ 以下にキャッシュするように変更された。


ensimeは起動したらlib_managedとかを辿って依存するjarからインデックスを作って補完をする。
sbt0.10はlib_managed以下を作らないので補完ができなくて死んでしまうという理屈です。


しとしとと泣きながら調べてたら解決手段がありました。
https://github.com/aemoncannon/ensime/issues/157
sbt-ensime-pluginを使うといいみたいですね。


英語のREADMEを読むのがめんどくさいひとのために使い方を説明すると

$ git clone https://github.com/fhars/sbt-ensime-plugin.git
$ cd sbt-ensime-plugin
$ sbt
> publish-local

するとsbtのためのプラグインがコンパイルされローカルのIvyリポジトリ(~/.ivy2/local/)以下にjarが保存されます。
自分のプロジェクトじゃなくてsbt自体が呼ぶプラグインなので、sbtの設定ファイル(~/.sbt/plugins/built.sbt)に以下を書きます。

libraryDependencies += "de.hars" %% "ensime-plugin" % "0.1"

(僕は勘違いして自分のプロジェクトに書いてたり、自分のプロジェクトのバージョンに合わせるため2.9.0-1でコンパイルしようとしたりしてハマりました。)


sbtを起動するとプラグインがロードされて使えるようになるはずです。reload、updateでも読み込まれるんじゃないでしょうか、sbt0.10.1なら警告がでるけど問題ないですからほっときましょう。

> ensime

で、依存してるjarのパスが.ensimeの:compile-jarsに書かれるので、EmacsからM-x ensimeして一件落着です。


よかったですね。