私はそれらの間に依存関係を持ついくつかのモジュールを開発しており、1つのIDEAプロジェクトで一緒に作業したいと思います。 sbt-idea を使用して生成していますIDEA sbtビルド定義からのプロジェクト。個々のプロジェクトに最適です。ただし、複数モジュールの場合、これまで試したことがうまくいきません。
sbt-ideaを使用してIDEA .imlファイルをモジュールごとに個別に生成します;次にマスターを作成しますIDEAプロジェクトを最初から作成し、それらのモジュールを追加します。これにより、モジュールのソースはすべて同じウィンドウで編集可能になりますが、それらの間の依存関係は追跡されません(したがって、foobarにあるものに投影すると、ローカルソースではなくbarのインポートされたライブラリバージョンに移動します)。
sbt マルチプロジェクトビルド (別名サブプロジェクト)を使用します。ここで、親プロジェクトのBuild.scalaには次のようなものが含まれます。
_lazy val foo = Project(id = "foo", base = file("foo"))
lazy val bar = Project(id = "bar", base = file("bar")) dependsOn(foo)
_
Sbt-ideaがマスターIDEAプロジェクトを生成し、サブプロジェクト間の依存関係を追跡するという点で、これはほとんど機能します。ただし、2つの注意点があります。
file("../foo")
は許可されません)。これは実際には私が望むものではありません(「utils」または「commons」パッケージなどのモジュールが2つの異なるマスタープロジェクトで使用されている場合はどうなりますか)。要約すると、モジュールを収集したい既にサブプロジェクトを持っている可能性があるを1つの大きなIDEA便利な編集のために追跡された依存関係を持つプロジェクト。 !
マルチプロジェクトビルドのアプローチは正しいものです。任意の長さのサブプロジェクトのネストされたツリーを持つことができますが、複数の親プロジェクトに属するモジュールを持つことはできません。これは絶対に理にかなっており、Mavenでも同じことが起こります。
その理由は、同じモジュールを複数のプロジェクトに組み込み、ソースの同期を維持するのが難しいためです。通常のワークフローは次のとおりです。
しかし、Idea内の現在のプロジェクトに属していないモジュールをロードする場合は、これを外部モジュールとしてワークスペースに追加できるため、これは実行可能です。
サブプロジェクトはマスタープロジェクトのサブディレクトリに存在する必要があるというsbtの制限のようです(つまり、file( "../ foo")は許可されません)。これは実際に私が望むものではありません(「utils」または「commons」パッケージなどのモジュールが2つの異なるマスタープロジェクトで使用されている場合はどうなりますか?).
Sbt 13.5およびintellij 13.xでは、Build.scalaを使用して、相対パスでプロジェクト間の依存関係を指定できます。コアプロジェクトcommonsと別のプロジェクトfooの2つのプロジェクトがあり、どちらも共通のディレクトリcode /にあるとします
このコードスニペットinsde Build.scala
object ProjectDependencies {
val commons = RootProject(file("../commons"))
}
object ProjectBuild extends Build {
import ProjectDependencies._
lazy val root = Project(id = "foo", base = file(".")).dependsOn(commons)
}
sbt gen-idea
によってsbt経由でIntelliJプロジェクトを生成します