15

これらのいくつかが他のコンポーネントに依存している、緩やかに関連する一連のコンポーネントがあります。具体的に言うと、「共通」、「a」、「b」というコンポーネントがあるとします。「共通」には依存関係はありませんが、他のすべてのプロジェクトは「共通」を使用します。さらに、「a」は「b」に依存します。すべてのコンポーネントは Scala で書かれており、sbt を使用してビルドしたいと考えています。

次のプロパティがあると便利です。

  1. 複数の人が異なるプロジェクトに取り組んでいるため、単一のリポジトリではなく、プロジェクトごとに 1 つのリポジトリが必要です。
  2. プロジェクトのビルドは簡単で、すべての依存関係は (必要に応じて) 自動的にビルドされる必要があります。つまり、"common" を変更してから "b" をビルドすると、まず "common" をビルドしてから "b" をビルドする必要があります。
  3. リファクタリングや同様の IDE タスクが正しく機能し、影響を受けるすべてのプロジェクトが正しく変更されるように、すべてのプロジェクトを IDE に含めることができます。

私が見る限り、sbt でこの種の依存関係を持つ可能性は 2 つあります。サブプロジェクトを使用するか、管理された依存関係 (ローカルなどのどこかにプッシュされる) を使用します。ただし、これらのオプションはどちらも上記の (1) または (2) を提供していないようです。特に

  • サブプロジェクトを使用すると、単一のリポジトリを使用する必要があります。これは、すべてのサブプロジェクトがメイン プロジェクトのサブディレクトリにある必要があるためです。
  • プロジェクトをローカルで公開し、管理された依存関係を使用するのは面倒です。"common" を変更してから "b" をビルドすると、そのプロジェクトが最初にビルドされて公開された場合にのみ "common" の変更が反映されるためです。管理された依存関係は多くの場合に役立つことがわかりますが、私たちの特定のユースケースではうまく機能していないようです. 私たちは頻繁に複数のプロジェクトに取り組み、同時にそれらを変更します。このため、公開しなければならないことは、非常に複雑に思えることがよくあります。

sbt プロジェクトが特定の (相対的な) 場所にある別の sbt プロジェクトに依存し、sbt に依存関係を構築するタイミングを判断させると言う方法は本当にありませんか?

4

2 に答える 2

6

SBT では、ソースの依存関係を使用できます。

lazy val root = Project("root", file("."), settings = ...) dependsOn(dispatchLiftJson)

lazy val dispatchLiftJson = uri("git://github.com/dispatch/dispatch-lift-json#0.1.0")

この例では、git から取得します。例は見つかりませんが、ディスク上のファイルの場所を指定できる場合があります。もしかして

lazy val dep = file("/path/to") 

また

lazy val dep = uri("file:///path/to")

私はこれに苦労しています-現時点では、正常に機能しているパブリッシュローカルメソッドを使用しています。

于 2012-10-07T00:58:25.110 に答える