sbtはどのようにgitから依存関係のアーティファクトをプルできますか?


102

sbtgitリポジトリから依存関係を取得できると聞いたことがあります(また、どこかを思い出せば、例も見ました)。

依存関係harrah / upをgithub から取得したいと考えています。リポジトリはアーティファクトJARファイルを提供せず、を使用して構築するように設定されたソースツリーのみを提供しsbtます。私が想像しているプロセスはsbt、ソースリポジトリをダウンロードしてビルドし、それを依存関係のアーティファクトとして使用することです。

私はsbt実際にこのようなことができると想像しているかもしれません。それをできる?もしそうなら、どうやって?

回答:


77

はい、そうです。演算子を使用しProjectて依存関係を与えることができます。dependsOnたとえば、URIでGithubプロジェクトを参照できますRootProject(uri("git://github.com/dragos/dupcheck.git"))。または、git cloneプロジェクトを作成し、ローカルコピーをで参照することもできますRootProject(file(...))。参照「フル構成」の詳細と例については、SBTのwikiに。


6
これを含めることが可能かどうか知っていbuild.sbtますか?
オーウェン

13
素晴らしい洞察力。しかし、そのプロジェクトが変更された場合、どのようにして強制的sbtに再コンパイルしますか?clean助けていないようです。
axel22 '22

2
Axel22様、問題の解決策は見つかりましたか?
ジミールオン2014

4
git repoがプライベートな状況でこれをどのように構成できますか?dotfileまたは環境変数で設定できる展開キーを送信するようにSBTを構成する方法はありますか?
acjay 2016年

1
私はまた、githubリポジトリに新しいコミットをプッシュした後にsbtがプル変更を行う方法を知りたいのですが、それをポイントして#masterリロードすると、それが複製され、マスターに新しいコミットをプッシュし、sbtは元の複製されたリポジトリで引き続き機能します新しいコミットに気づかずに。この時点で、それを削除し/.sbt/0.13/staging/てsbtで再度クローンするか、そこに行って実行する必要がありますgit pull
lisak

99

dependsOnオペレーターを使用して、パッケージ化されていない依存関係をGitHubからプロジェクトの依存関係として扱うことにより、それらをプロジェクトにインポートできます。(これは、プリコンパイルされたライブラリの依存関係が含まれる方法とは異なります)。

#表記法を使用して、プルするブランチを指定できることに注意してください。以下は、私にとってうまく機能しているScala SBTコードの一部です。

object V {
  val depProject = "master"
  // Other library versions
}

object Projects {
  lazy val depProject = RootProject(uri("git://github.com/me/dep-project.git#%s".format(V.depProject)))
}

// Library dependencies
lazy val myProject = Project("my-project", file("."))
.settings(myProjectSettings: _*)
.dependsOn(Projects.depProject)
.settings(
  libraryDependencies ++= Seq(...

同じ外部プロジェクトに依存している複数のSBTプロジェクトがある場合は、sbt.boot.directory不要な再コンパイルを回避するために中央を設定することをお勧めします(こちらの手順を参照)。


7
sbtはローカルgitを "git pull"で更新し続けることもできますか?それとも手動で行う必要がありますか?
Arne 2013

プロジェクトのルートから"my-project"name := "MyProject"設定を使用して動的に設定することは可能build.sbtですか?
Danyel

2
git://プロトコル構文は、play / sbt 13.0では動作しないようです。https://でも動作します。これは、git固有の設定が原因である可能性もあります。
セバスチャングラフ

sbt 0.13.9とsbtを使用すると、シャロークローン(git clone --depth 1)を使用してgit依存関係が正しく更新されます。
Martin Tapp、2015年

2
セットならば枝にのみに動作しますmaster:それ以外の場合は私が得る、[error] No project 'project_name' in 'ssh://git@github.com/user/project.git#branch'
ニール・

9

ライブラリの依存関係を解決するのに問題があったので(提案されたを使用してRootProject)、というオブジェクトを指摘したいと思いますProjectRef。したがって、gitにあるライブラリに依存する必要がある場合は、次のようにすることをお勧めします。

import sbt.Keys._
import sbt._

object MyBuild extends Build {

  lazy val root = Project("root", file("."))
    .dependsOn(myLibraryinGit)
    .settings(
      ...,
      libraryDependencies ++= Seq(...))

  lazy val myLibraryinGit = ProjectRef(uri("git://git@github.com:user/repo.git#branch"), "repo-name")

}

ソース:http : //blog.xebia.com/git-subproject-compile-time-dependencies-in-sbt/


1
git cloneエラーの場合は、https uriバージョンを試してください。
WaldemarWosiński2017年

6

sbt 0.13+の回答を追加したかった。次のようなものbuild.sbtをプロジェクトのルートフォルダに配置します(ではありませんBuild.scala):

lazy val root = (project in file(".")).dependsOn(playJongo)

lazy val playJongo = RootProject(uri("https://github.com/bekce/play-jongo.git"))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.