sbt
がgitリポジトリから依存関係を取得できることを聞いたことがあります(そして、どこかを覚えていれば例も見たことがあります)。
Githubから依存関係 harrah/up を取得しようとしています。リポジトリは、アーティファクトJARファイルを提供せず、sbt
を使用して構築されるように設定されたソースツリーのみを提供します。私が想像しているプロセスは、sbt
がソースリポジトリをダウンロードしてビルドし、それを依存関係アーティファクトとして使用するということです。
sbt
は実際にこのようなことができると想像しているかもしれません。それをできる?もしそうなら、どのように?
はい、そうです。 Project
演算子を使用してdependsOn
に依存関係を指定できます。また、RootProject(uri("git://github.com/dragos/dupcheck.git"))
などのURIでGithubプロジェクトを参照できます。または、プロジェクトを_git clone
_して、RootProject(file(...))
を使用してローカルコピーを参照することもできます。詳細と例については、SBT wikiの "Full Configuration" を参照してください。
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
を設定する価値があることに注意してください( 手順はこちら を参照)。
ライブラリの依存関係を解決する際に問題が発生したため(推奨される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/
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"))