2013-10-23 17 views
5

sbt'u aşağıdaki şekilde kullanıyorum: sbt'de ~ test:compile çalıştırıyorum ve IDE'de çalışırken, proje hala derlenmişse, IDE'nin sunum derleyicisi buggy olma eğilimindeyken zaman zaman çalışıyorum. Ben git pull bazı kod, project/ dosyalarında değişiklikler olabilir, bu yüzden yeniden yüklemek istiyorum. Hem kaynak dosyaları hem de proje dosyalarını nasıl izleyeceğinizin bir yolu var, bu yüzden proje dosyalarında değişiklik olduğunda, aslında güncelleştirmeyi aldım?Ayrıca proje dosyaları için de izleyin

cevap

3

Aslında kendisi belirlemek için ~ <task> kullanabilir ve ~ <task> ihtiyaçları inşa tanımını okumak için, çünkü, şu anda projeyi kendisi yeniden olamaz:

  1. Ne kaynak dosyaları nasıl çalıştırmak için
  2. izlemek için görev.

Yaptığınız şey yapılandırma whe proje/değişiklikler değiştirerek olduğunu. Bu, yeni yapılandırmayı çekmek için tam bir reload veya reboot sbt gerektirir.

Yani, sbt 0.13 itibariyle bu mümkün değildir. o kaynak kodu project/ değişiklikler ancak yapı tanımı yeniden oluşturmak zorunda kalmadan, pek yardımcı yeniden inşa edecek böylece bunu sahip olabilir.

Sen, yeni bir sbt istemini veya görev yaratabilecek çalışma projesinde kaynak dosyaları/güncellenmektedir olmadığını görmek ve yeniden başlatmak için bilmeleri için bir uyarı/hata sorunu kontrol edebilir geldiğinde. Muhtemelen şu anda en iyi seçenek budur. jsuereth olarak

+1

Değişim için proje klasörünü izlemek ve SBT'nin kapatılmasına izin vermek mümkün mü? – Schleichardt

6

bu SBT 1 durumda işleyebilir bir görev değildir açıkladı. Gereken şey, izleme işlemini iptal etmek ve kendi yapılandırmasını yeniden yüklemek için SBT'nin yeniden başlatılmasıdır.

aşağıdaki Scala komut

tam olarak bunu yapar, bu bir yol izlemek ve bir işlemini yeniden başlatmak için Java MİT WatchService ve Scala Süreci kullanır. senin sbt dir

#!/usr/bin/env scala 

import java.nio.file._ 
import scala.collection.JavaConversions._ 
import scala.sys.process._ 

val file = Paths.get(args(0)) 
val cmd = args(1) 
val watcher = FileSystems.getDefault.newWatchService 

file.register(
    watcher, 
    StandardWatchEventKinds.ENTRY_CREATE, 
    StandardWatchEventKinds.ENTRY_MODIFY, 
    StandardWatchEventKinds.ENTRY_DELETE 
) 

def exec = cmd run true 

@scala.annotation.tailrec 
def watch(proc: Process): Unit = { 
    val key = watcher.take 
    val events = key.pollEvents 

    val newProc = 
    if (!events.isEmpty) { 
     proc.destroy() 
     exec 
    } else proc 

    if (key.reset) watch(newProc) 
    else println("aborted") 
} 

watch(exec) 

Kullanımı olacaktır: Kod anlamak için oldukça basit olmalıdır

watchr.scala project/ "sbt ~ test:compile" 

şey sormaya çekinmeyin açık değilse, elbette herhangi bir komut dosyası dili kullanılabilir Bu davranışı uygulamak için.

İlgili konular