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


102

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

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

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

답변:


77

네 확실합니다. 연산자에 Project종속성을 부여 dependsOn할 수 있으며 URI로 Github 프로젝트를 참조 할 수 있습니다 (예 : RootProject(uri("git://github.com/dragos/dupcheck.git")). 또는 git clone프로젝트를 수행 한 다음 RootProject(file(...)). 자세한 내용과 예제는 SBT 위키의 "전체 구성" 을 참조하십시오 .


6
이것을 포함 할 수 있는지 알고 build.sbt있습니까?
Owen 2011 년

13
훌륭한 통찰력. 그러나 프로젝트가 변경되면 어떻게 강제 sbt로 다시 컴파일합니까? clean도움이되지 않는 것 같습니다.
axel22

2
안녕하세요 Axel22, 문제에 대한 해결책을 찾았습니까?
Jimmy Luong 2014

4
git repo가 ​​비공개 인 상황에서 어떻게 구성 할 수 있습니까? dotfile 또는 환경 변수에 설정할 수있는 배포 키를 보내도록 SBT를 구성하는 방법이 있습니까?
acjay

1
나는 또한처럼 나는를 가리 경우 GitHub의 저장소에 커밋 새 누른 후 SBT 풀을 변경하는 방법을 알고 것 #master, 다시로드, 그것은 그때 마스터에 커밋 새로운 밀어 SBT 여전히 원래 복제 저장소와 함께 작동, 그것을 클론 새로운 커밋을 알아 차리지 않고. 이 시점에서 하나를 삭제하고 /.sbt/0.13/staging/sbt 에서 다시 복제하거나 거기에 가서 수행해야합니다git pull
lisak

99

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불필요한 재 컴파일을 방지하기 위해 중앙 을 설정하는 것이 좋습니다 ( 여기 지침 참조 ).


7
sbt는 "git pull"을 사용하여 로컬 git을 업데이트 할 수도 있습니까? 아니면 수동으로해야합니까?
Arne

프로젝트 루트 "my-project"name := "MyProject"설정을 사용하여 동적으로 설정할 수 build.sbt있습니까?
Danyel

2
git://프로토콜 구문이 play / sbt 13.0에서 작동하지 않는 것 같습니다. https://그래도 작동합니다. 이것은 git 특정 설정으로 인해 발생할 수도 있습니다.
Sebastian Graf

sbt 0.13.9 및 sbt를 사용하면 얕은 클론 (git clone --depth 1)을 사용하여 git 종속성이 올바르게 업데이트됩니다.
Martin Tapp

2
분기는로 설정된 경우에만 작동합니다 master. 그렇지 않으면 다음을 얻습니다.[error] No project 'project_name' in 'ssh://git@github.com/user/project.git#branch'
Neil

9

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


1
git clone 오류의 경우 https uri버전으로 시도하십시오 .
Waldemar Wosiński

6

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"))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.