web-dev-qa-db-ja.com

別のsbtプロジェクトから外部sbtプロジェクトを参照するには?

私はScalaアプリケーションと共通コアライブラリの次のセットアップを持っています:ルート

 -> /ApplicationA
   -> /project
     -> /build.sbt
 -> /CoreLibrary
   -> /project
     -> /build.sbt

ApplicationAからEclipseプロジェクトリファレンスのCoreLibraryへの参照を追加したいので、CoreLibraryが変更されるたびにApplicationAもビルドされます。 ApplicationAのbuild.Scalaの次のコンテンツを試しました。

  val core = Project(
      id = "platform-core",
      base = file("../CoreLibrary"))

  val main = Project(id = "application, base = file(".")).dependsOn(core)

ただし、ApplicationA SBTをコンパイルすると、依存関係はサブディレクトリのみである可能性があると警告されます!!:

Java.lang.AssertionError: assertion failed: Directory C:\git\CoreLibrary is not contained in build root C:\git\ApplicationA

これは完全に簡単なようですが、このプロジェクトの依存関係を持つ正しい方法は何ですか?

52
Diego

あなたはそのようなプロジェクトのソース依存関係を行うことができます:

 lazy val core = RootProject(file("../CoreLibrary"))

 val main = Project(id = "application", base = file(".")).dependsOn(core) 

マルチモジュールプレイビルドの実際の例があります: https://github.com/ahoy-jon/play2MultiModule/blob/master/playapp/project/Build.scala

しかし、私はそれを行う適切な方法(それはあなたのコンテキストに依存します)を作成することだと思います

 -> /project/
   -> Build.scala
 -> /ApplicationA
   -> /project
     -> /build.sbt
 -> /CoreLibrary
   -> /project
     -> /build.sbt

2つのプロジェクトとそれらの間の依存関係を参照します。

45
jwinandy

Sbt 0.12.1では、プロジェクトへの単純な参照を取得することが可能に思われます:

ProjectRefの代わりにRootProjectを使用しました

http://www.scala-sbt.org/0.12.1/api/sbt/ProjectRef.html

ProjectRef(file("../util-library"), "util-library")

sbt-Eclipseも機能します。

22
Maxence

sbt 0.1なので、.sbtファイルを必要とせずに、Build.scalaに直接マルチプロジェクト定義を作成できます。

したがって、以下をApplicationA/project/build.sbtに追加するだけで十分です。

lazy val core = RootProject(file("../CoreLibrary"))

val main = Project(id = "application", base = file(".")).dependsOn(core) 
12
Mustafa