CLOVER🍀

That was when it all began.

sbtの依存関係管理をIntelliJから使用する

sbtを使うのなら、依存関係の管理はsbtに任せたいところですが、IntelliJにsbtで管理しているライブラリを認識させるには、一手間必要です。

やっぱり、今回も使用するのはsbt-ideaプラグインです。
https://github.com/mpeltonen/sbt-idea

では、実際やってみましょう、ということで。
なお、今回使用しているIntelliJプロジェクトは、sbtを使用しておりかつすでにsbt-ideaプラグインの設定は記載していることが前提になっています。

まずは普通にbuild.sbtに依存関係を追加します。今回もスケープゴートは、やっぱりCommons Langです。

name := "sbt-project-example"

version := "0.0.1-SNAPSHOT"

scalaVersion := "2.9.1"

organization := "littlewings"

libraryDependencies += "commons-lang" % "commons-lang" % "2.6"

で、この状態でSBT Consoleでreload、updateしても、IntelliJはCommons Langを認識しません。

StringUtilsを使おうとしても、Commons Langのクラスがimport候補に現れませんね。build.sbtに書いただけなので、IntelliJのライブラリ管理は何も変わらないので当然といえば当然なのですが。

ではここで、SBT Consoleで「gen-idea」コマンドを実行します。

すると、IntelliJの設定ファイルが更新され、以下のようなダイアログが現れるので「Reload project」にチェックが入っているのを見て、「OK」を押してプロジェクトを再ロードします。

再起動すると、今度はCommons LangのStringUtilsクラスが見えるようになっています。

どうなっているかというと、単純な話で「Project Structure」を開いて「Libraries」を見ると…

sbt、というかIvyが取得したライブラリにクラスパスを通すように設定が変わったということですね。

もちろん、最初から依存関係を記述したsbtプロジェクトから「gen-idea」を実行する場合はこうやって更新することなど必要ないでしょうが、開発途中で依存関係を変更した場合には毎回「gen-idea」コマンドを実行してくださいってことですね。