私の会社の一人の男が、かなり汎用的なcommons
というsbtプロジェクトを持っているとします。このプロジェクトは伝統的なsbtの方法で定義されています:project/Build.scala
ファイルのビルド定義を持つメインフォルダにあります。これを指定してプロジェクトをビルドする方法別のプロジェクトBを最初にビルドする必要がありますか?
commons
に依存するdatabinding
というプロジェクトを開発している男がいます。このプロジェクトは同じ方法で定義したいと考えています。project/Build.scala
です。
私たちは、次のディレクトリのレイアウトを持っている:
dev/
commons/
src/
*.scala files here...
project/
Build.scala
databinding/
src/
*.scala files here...
project/
Build.scala
どのように私はdatabinding
が最初に構築され、出力クラスファイルを使用することがcommons
が必要であることを指定することができますか?
私はMulti-project buildsを読み、databinding
のビルド定義のために、次のを思い付いた:
object MyBuild extends Build {
lazy val root = Project(id = "databinding", base = file(".")) settings (
// ... omitted
) dependsOn (commons)
lazy val common = Project(id = "commons",
base = file("../commons")
)
}
それが動作しない場合を除き:SBTは..
が好きでAssertionErrorがをスローしません。明らかに、commons
はdatabinding
のフォルダにする必要があります。しかし、これらの2つのプロジェクトは別々のgitリポジトリに保存されています。
どのようにこの依存関係を適切に指定できますか?
感謝を使用するためのサンプルです。これは奇妙に思えます。他のプロジェクトが私のプロジェクト 'commons'を使用しているだけなので、' .scala'ファイルに完全な定義を持つことはできませんか? –
さらに、依存するプロジェクトによって生成されたjarをルックアップするリゾルバを追加するなどの方法がありますか? –
あなたの最初の質問に関しては、あなたが '* 'を使うのを妨げるのはSBTの制限です。サブプロジェクトを定義するための「scala」ファイルを作成します。 SBTがプロジェクト定義ファイルをマージする方法の限界だと私は思う。幸いにも '* .sbt'ファイルはルートプロジェクト' Build.scala'からval、settings ...にアクセスできます。 2番目のコメントでそれを言及すると、ローカル(publish-local)に 'common'を公開し、リゾルバはそれを取得しなければなりません。 SNAPSHOTシステムを使用する場合は、依存関係定義に 'isChanging()'を追加してください。これが役立つことを願っています。 – David