Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sbt如何从git中提取依赖项工件?_Git_Scala_Build_Sbt_Build Dependencies - Fatal编程技术网

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