我听说过(我也知道我曾经看到过一些示例,只是我记不起来在哪里了),sbt
可以从Git仓库中获取依赖。
我想从github上获取依赖harrah/up。该仓库没有提供任何构件JAR文件,只有一个使用sbt
设置为构建的源代码树。我想象的过程是sbt
将下载源代码仓库,进行构建,然后将其用作依赖构件。
我可能在想像sbt
实际上是否能够做到这一点。如果可以,那么如何操作?
您可以使用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
以避免不必要的重新编译(参见这里的说明)。
确实可以。您可以使用 dependsOn
运算符为您的Project
添加依赖项,并且您可以通过其URI引用Github项目,例如:RootProject(uri("git://github.com/dragos/dupcheck.git"))
。或者,您可以使用 git clone
命令克隆该项目,然后使用 RootProject(file(...))
引用您的本地副本。有关详细信息和示例,请参见 SBT wiki 上的“完整配置”。
build.sbt
中吗? - Owensbt
重新编译它?clean
似乎没有帮助。 - axel22#master
,重新加载,它会克隆它,然后我将新提交推送到主分支,并且sbt仍然使用最初克隆的存储库而不注意到新提交。此时,必须从/.sbt/0.13/staging/
中删除它并让sbt再次克隆它,或者进入该目录并执行git pull
。 - lisak由于我在解决库依赖问题时遇到了困难(使用建议的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/
https uri
版本。 - Waldemar Wosiński我想为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"))
build.sbt
中的name := "MyProject"
设置动态地设置"my-project"
? - Danyelgit://
协议语法似乎对我无效。不过,https://
可以正常工作。这可能也是由于git特定的设置引起的。 - Sebastian Graf[error] No project 'project_name' in 'ssh://git@github.com/user/project.git#branch'
。 - Neilproject_name
,但在子项目的build.sbt
中可能将其引用为其他名称。val
名称决定了项目名称。 - John Smith