[git] sbt는 git에서 종속성 아티팩트를 어떻게 가져올 수 있습니까?

나는 sbtgit repo에서 의존성을 얻을 수있는 것을 들었다 (그리고 나는 내가 어디에서 기억할 수만 있다면 예제도 보았다는 것을 알고있다) .

github에서 종속성 harrah / up 을 얻으려고합니다 . 저장소는 아티팩트 JAR 파일을 제공하지 않으며 .NET을 사용하여 빌드하도록 설정된 소스 트리 만 제공합니다 sbt. 내가 상상하는 프로세스 sbt는 소스 저장소를 다운로드하고 빌드 한 다음 종속성 아티팩트로 사용하는 것입니다.

나는 sbt실제로 이와 같은 일 을 할 수 있다고 상상할 수 있습니다 . 할 수 있습니까? 그렇다면 어떻게?



답변

네 확실합니다. 연산자에 Project종속성을 부여 dependsOn할 수 있으며 URI로 Github 프로젝트를 참조 할 수 있습니다 (예 : RootProject(uri("git://github.com/dragos/dupcheck.git")). 또는 git clone프로젝트를 수행 한 다음 RootProject(file(...)). 자세한 내용과 예제는 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불필요한 재 컴파일을 방지하기 위해 중앙 을 설정하는 것이 좋습니다 ( 여기 지침 참조 ).


답변

내 라이브러리의 종속성을 해결하는 데 문제가 있었기 때문에 (제안 된 사용 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/


답변

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


답변