2011-09-13 7 views
5

Ben derlemek ve packageBin görevleri çağıran bir görev, tanımlamak istediğiniz ve sonra onun şeyler yapıyor. Bunu nasıl yaparım? Şu anda bu sadece ikinci kısmı yapar ve & packageBin görevlerini derler.Diğer görevlere nasıl bağlanır ve kodunuzu SBT 0.10'da nasıl yaparsınız?

lazy val dist = TaskKey[Unit](
    "dist", "Creates a project distribution in dist/ folder." 
) 
def distTask = { 
    dist <<= dist.dependsOn(compile, packageBin) 
    dist <<= (update, crossTarget).map { case (updateReport, out) => 
    updateReport.allFiles.foreach { srcPath => 
     val destPath = out/"lib"/srcPath.getName 
     IO.copyFile(srcPath, destPath, preserveLastModified=true) 
    } 
    } 
} 
+0

Şimdiye kadar geçici bir çözüm olarak kullanmam ~ başardı paket; dist görev harika cevap için – arturaz

cevap

3

<<=, TaskKey'de bir değer döndüren bir yöntemdir. Her yerde değişebilir durumu güncellemez, bu nedenle örnek kodda, ilk aramanın sonucu atılır. Bunu düzeltmek için, packageBin'i de bir girdi olarak ilan edin, ancak ortaya çıkan değeri göz ardı edin. PackageBin'in derlemeye bağlı olduğunu unutmayın, bu nedenle derlemeye bağlı olarak gereksizdir.

dist <<= (update, crossTarget, packageBin in Compile) map { (updateReport, out, _) => 

dosya adının yalnızca dayalı bir dizine bir UpdateReport tüm dosyaların kopyalamak istediğiniz olası değildir. Farklı bağımlılıkların aynı dosya adına sahip olması mümkündür. Ayrıca, bu, test bağımlılıkları dahil olmak üzere tüm yapılandırmalardan bağımlılıkları içerecektir.

İlk sorun için, retrieveManaged := true adresindeki lib_managed dizininde olduğu gibi, hedef dizindeki yolu oluşturmak için ilişkili ModuleID kullanın. İkinci problem için, sadece istediğiniz konfigürasyon için dosyaları seçin.

updateReport.matching(configurationFilter(Runtime.name)).foreach... 

diğer yararlı yöntemler için sbt.UpdateReport ve sbt.RichUpdateReport API dokümanlarını görün. Eğer dosya adı çarpışmaları endişe değilseniz

, sen dependencyClasspath gelen bağımlılık dosyaları alabilirsiniz. Örneğin:

dist <<= (crossTarget, packageBin in Compile, dependencyClasspath in Runtime) map { (out, _, cp) => 

ve cp.files den Seq[File] olsun. derlemek;;

+0

teşekkürler. Ancak, packageBin'i bağımlılık olarak eklemeye çalıştığımda şunu elde ederim: [hata] sbt.Init $ Uninitialized: Başlatılmamış ayarlara referans {dosya:/home/arturas/work/spacegame/server/vendor/SpaceMule /} SpaceMule/*: SpaceMule/*: mesafe [hata] Kullan 'son' tam günlüğü: {/ home/arturas/iş/Spacegame/sunucu/satıcı/SpaceMule/dosya} paket. – arturaz

+0

'Derleme' bölümüne dahil ettiniz mi? –

+1

Oh, onu kaçırmış olmalıyım. Şimdi çalışıyor, teşekkürler :) – arturaz

İlgili konular