2017-01-26 15 views
1

は私がSBTについていくつか質問がある:「dependOn」句を使用するオプションがある理由SBT、カップルの質問:DEPENDSON

1)私は思ったんだけど。私はそれがプロジェクトに参加することを完全に理解しています。 あなたがProjectBのにPROJECTAのバージョンを指定することはできません。私は、このコードには好きではない何

lazy val projectA = Project("A", file("a")) 
lazy val projectB = Project("B", file("b")).dependsOn(projectA) 

。常に最新のprojectAの条件を集計します。すべてのサブプロジェクトが緊密に結合されている場合、アプリケーションをマルチプロジェクトに分割する理由は何ですか?

別のオプションがあります。サブプロジェクトをバージョン付きのバイナリリポジトリに公開し、それを設定に依存関係として追加することができます。このコードを使用しないのはなぜ

:カウスの

lazy val projectA = project("A", file("a")) 
lazy val projectB = Project("B", file("b")).settings(libraryDependencies ++= Seq("groupOfA" %% "A" % "versionOfA")) 

は、あなたは、このために、バイナリのリポジトリを持っている必要があります。しかし、それは問題ではありません。ネクサスをローカルにインストールすることができます(ほとんどすべてをサポートし、自由に使用できます)。あるいは、oss.sonatype.orgを使用してください。

2)この質問は最初の質問に関連していますが、なぜ「publishLocal」タスクがあるのか​​分かりません。私はSBTがIvy2リポジトリを使用していることを知っていますが、プロジェクトをnexusまたはoss.sonatype.orgに公開すると、maven2リポジトリに公開されます。この問題は、sbtがローカルで公開され、mavenからキャッシュされたことを検出したときに発生します。それはエラーを投げる。私はこれがsbtバグだと思う(https://github.com/sbt/sbt/issues/2687)。私はpublishLocalをもう使用しません。あなたのアプリケーションを複数のコンポーネントに分割したいのであれば、あなたのマシンにバイナリリポジトリをインストールしていないのはなぜか分かりません。

答えて

1

あなたが指摘したように、libraryDependenciesは、マルチプロジェクト管理の場合、厳密にはdependsOnよりも強力であり、複雑さが増します。

別個のバイナリリポジトリをインストールする必要はありません。ローカルリポジトリは、publishLocalで公開するには十分です。

私はあなたの次の質問に私たちをもたらします。なぜそれがpublishLocalをデフォルトでIvyに公開するのですか? 2つのこと:まずMaven形式で公開するローカル公開を設定します:http://www.scala-sbt.org/0.13/docs/Publishing.html#Modifying+the+generated+POMpublishMavenStyle := true)。

第2に、同じバージョンがMaven Centralからローカルに公開され、キャッシュされている場合の問題に関する。短い答え:それをしないでください。 Maven Centralに公開する場合は、テストのみのローカル公開を使用する必要があります。publishLocalの「SNAPTSHOT」バージョンが必要です。固定バージョン番号のみをMaven Centralに公開する必要があります。それから、紛争はありません。これは、Mavenの設計方法です。バージョン番号は不変でなければならず、 'SNAPSHOT'はテストのためだけでなければなりません。

+0

ありがとうございます –