Sbt bağımlılık yapılarını git'ten nasıl çekebilir?


102

Duydum (ve biliyorum ben de örnekler gördüm, keşke nerede olduğunu hatırlayabilirsem) sbtBir git deposundan bağımlılıkları elde edebileceklerini .

Bağımlılık harrah / up github'dan almak istiyorum. Depo herhangi bir yapay JAR dosyası sağlamaz, yalnızca kullanılarak oluşturulacak bir kaynak ağacı sağlar sbt. Hayal ettiğim süreç sbt, kaynak depoyu indirecek, inşa edecek ve sonra bunu bağımlılık eseri olarak kullanacak.

sbtAslında bunun gibi bir şey yapabileceğini hayal ediyor olabilirim. Olabilir mi? Ve eğer öyleyse, nasıl?

Yanıtlar:


77

Evet kesinlikle. Operatörle Projectbir bağımlılık verebilir dependsOnve örneğin bir Github projesine URI ile başvurabilirsiniz RootProject(uri("git://github.com/dragos/dupcheck.git")). Alternatif olarak, git cloneprojeyi yapabilir ve ardından yerel kopyanıza referans verebilirsiniz RootProject(file(...)). Ayrıntılar ve örnekler için SBT wiki'deki "Tam Yapılandırma" bölümüne bakın .


6
Eğer in dahil etmek mümkün olup olmadığını biliyor musunuz build.sbt?
Owen

13
Harika fikir. Ancak bu proje değişirse, sbtonu yeniden derlemeye nasıl zorlarsınız ? cleanyardımcı görünmüyor.
axel22

2
Merhaba Axel22, sorununuz için herhangi bir çözüm buldunuz mu?
Jimmy Luong

4
Git deposunun özel olduğu durumlarda bunu nasıl yapılandırabilirsiniz? SBT'yi bir nokta dosyasında veya ortam değişkeninde ayarlanabilen bir dağıtım anahtarı gönderecek şekilde yapılandırmanın bir yolu var mı?
acjay

1
Ayrıca, github havuzuna yeni commit yükledikten sonra sbt çekme değişikliklerini nasıl yapacağımı bilmek istiyorum, eğer onu işaret edersem #master, yeniden yükler, klonlar, sonra master'a yeni commit'i zorlarım ve sbt hala orijinal klonlanmış depo ile çalışır yeni bir taahhüt fark etmeden. Bu noktada kişi ya onu silmeli /.sbt/0.13/staging/ve tekrar klonlamalıdır ya da oraya gidipgit pull
lisak

99

dependsOnİşleci kullanarak, paketlenmemiş bağımlılıkları proje bağımlılıkları olarak değerlendirerek GitHub'dan projenize aktarabilirsiniz . (Bu, önceden derlenmiş kitaplık bağımlılıklarının dahil edilme biçiminden farklıdır).

#Gösterimi kullanarak hangi dalın çekileceğini belirtebileceğinizi unutmayın . İşte benim için iyi çalışan bazı Scala SBT kodu:

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(...

Aynı harici projeye bağlı birden fazla SBT projeniz varsa, sbt.boot.directorygereksiz yeniden derlemelerden kaçınmak için bir merkez kurmaya değer olduğunu unutmayın ( buradaki talimatlara bakın ).


7
sbt yerel git'i "git pull" ile güncel tutabilir mi? Yoksa bunu manuel olarak yapmam mı gerekiyor?
Arne

Proje kök dizinindeki ayarı "my-project"kullanarak dinamik olarak ayarlamak mümkün mü ? name := "MyProject"build.sbt
Danyel

2
git://protokol sözdizimi play / sbt 13.0'da benim için çalışmıyor gibi görünüyor. https://yine de çalışıyor. Bu, git'e özel bir ayardan da kaynaklanıyor olabilir.
Sebastian Graf

Sbt 0.13.9 ve sbt kullanmak, sığ bir klon (git clone --depth 1) kullanarak git bağımlılığını doğru şekilde günceller.
Martin Tapp

2
Şube yalnızca ayarlandığında çalışır master, aksi takdirde şunu elde ederim:[error] No project 'project_name' in 'ssh://git@github.com/user/project.git#branch'
Neil

9

Kitaplığımın bağımlılıklarının çözülmesinde sorunlar yaşadığım için (önerileni kullanarak RootProject), çağrılan nesneye işaret etmek istiyorum ProjectRef. Bu nedenle, git'te ikamet eden bir kütüphaneye bağımlı olmak gerekirse, bunu şu şekilde yapmanızı öneririm:

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

}

Kaynak: http://blog.xebia.com/git-subproject-compile-time-dependencies-in-sbt/


1
Git klon hatası durumunda https urisürümle deneyin .
Waldemar Wosiński

6

Sbt 0.13+ için bir cevap eklemek istedim. Bunun gibi bir şeyi build.sbtproje kök klasörünüze koyun (değil Build.scala):

lazy val root = (project in file(".")).dependsOn(playJongo)

lazy val playJongo = RootProject(uri("https://github.com/bekce/play-jongo.git"))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.