web-dev-qa-db-ja.com

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

sbtがgitリポジトリから依存関係を取得できることを聞いたことがあります(そして、どこかを覚えていれば例も見たことがあります)。

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

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

99
Owen

はい、そうです。 Project演算子を使用してdependsOnに依存関係を指定できます。また、RootProject(uri("git://github.com/dragos/dupcheck.git"))などのURIでGithubプロジェクトを参照できます。または、プロジェクトを_git clone_して、RootProject(file(...))を使用してローカルコピーを参照することもできます。詳細と例については、SBT wikiの "Full Configuration" を参照してください。

78
Kipton Barros

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を設定する価値があることに注意してください( 手順はこちら を参照)。

96
Alex Dean

ライブラリの依存関係を解決する際に問題が発生したため(推奨される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://[email protected]:user/repo.git#branch"), "repo-name")

}

出典: http://blog.xebia.com/git-subproject-compile-time-dependencies-in-sbt/

8
Marc Juchli

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"))
6
bekce