sbt如何从git中提取依赖项工件?
我听说过(我知道我也看到过一些例子,只要我能记得在哪里,sbt如何从git中提取依赖项工件?,git,scala,build,sbt,build-dependencies,Git,Scala,Build,Sbt,Build Dependencies,我听说过(我知道我也看到过一些例子,只要我能记得在哪里,sbt可以从git回购获得依赖关系 我希望从github获得依赖关系。存储库不提供任何工件JAR文件,只提供一个源代码树,它是使用sbt构建的。我想象的过程是,sbt将下载源repo,构建它,然后将其用作依赖工件 我可能想象sbt实际上可以做这样的事情。可以吗?如果是,怎么做?确实是。您可以使用dependsOn运算符为您的Project提供依赖项,并且您可以通过其URI引用Github项目,例如RootProject(URI(“git:/
sbt
可以从git回购获得依赖关系
我希望从github获得依赖关系。存储库不提供任何工件JAR文件,只提供一个源代码树,它是使用sbt
构建的。我想象的过程是,sbt
将下载源repo,构建它,然后将其用作依赖工件
我可能想象
sbt
实际上可以做这样的事情。可以吗?如果是,怎么做?确实是。您可以使用dependsOn
运算符为您的Project
提供依赖项,并且您可以通过其URI引用Github项目,例如RootProject(URI(“git://github.com/dragos/dupcheck.git)
。或者,您可以git clone
该项目,然后使用RootProject(文件(…)
引用您的本地副本。有关详细信息和示例,请参见SBT wiki上的。您可以使用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://git@github.com:user/repo.git#branch"), "repo-name")
}
来源:我想为sbt 0.13+添加一个答案。只需将类似的内容放入项目根文件夹中的
build.sbt
(而不是build.scala
):
您知道是否可以将其包含在
build.sbt
中吗?非常有洞察力。但是如果项目发生变化,您如何强制sbt
重新编译它clean
似乎没有帮助。您好,Axel22,您找到了解决问题的方法吗?在git回购为私有的情况下,您如何配置此方法?有没有办法将SBT配置为发送部署密钥(可以在dotfile或环境变量中设置)?我还想知道如何在将新提交推送到github存储库后进行SBT拉式更改,如果我将其指向#master
,重新加载,它将克隆它,然后我将newcommit推送到master,sbt仍然使用最初克隆的存储库,而没有注意到新的提交。此时,您必须从/.sbt/0.13/staging/
中删除它并让sbt再次克隆它,或者去那里执行git pull
sbt也可以用“git pull”更新本地git吗?或者我需要手动设置吗?是否可以使用项目根目录中的build.sbt
中的name:=“MyProject”
设置动态设置“我的项目”
?git://
协议语法在游戏/sbt 13.0中似乎对我不起作用<代码>https://虽然有效。这也可能是由特定于git的设置引起的。使用sbt 0.13.9和sbt,可以使用浅层克隆(git克隆--深度1)正确更新git依赖项。分支仅在设置为master
时有效,否则我会得到:[error]中没有项目“project\u name”ssh://git@github.com/user/project.git#branch'
如果出现git克隆错误,请尝试使用https uri
版本。
lazy val root = (project in file(".")).dependsOn(playJongo)
lazy val playJongo = RootProject(uri("https://github.com/bekce/play-jongo.git"))