2016-04-01 9 views
4

Dizin yapısında böyle bir ayar yapıyorum.Birden çok uygulamayı sbt ile çalıştırma

src/main/scala/main/Main.scala 
src/main/scala/scripts/MainScript.scala 

Komut dosyası, çalışacak bir arka plan işidir.

Dağıtılacak bir kavanoza ana dosyayı paketlemek için önce sbt-assembly kullanıyorum ama sbt-assembly veya sbt-native-packager ile iki ayrı kavanozun nasıl oluşturulacağından emin değilim. Bunu yapmaya nasıl başlarım ve bu problem için en iyi yaklaşım hangisi olurdu?

Buna benzer bir şey yapmak isterim.

java -jar main.jar $PORT 
java -jar scriptMain.jar 
+0

Sbt yerli packager sizin için konuşlandırılabilir eserler oluşturur. Sbt montajı ve Sbt yerli paketleyiciyi birlikte kullanabilirsiniz. Sbt montajı tarafından oluşturulan yağ kavanozu kullanıldığında kıvılcım için rpm paketleri oluşturuyoruz. – Manas

+0

@Manas Aynı anda iki ayrı JAR oluşturmak için 'build.sbt' içinde 'sbt-assembly' ile bir çözüm kodlamak mümkün mü? Tek bir JAR oluşturmak için daha önce kullandım. Çünkü, bir kere sahip olduktan sonra, yukarıdaki kod bloğunda olanı yapmak için başka bir dosya oluşturabilirim. – Petesta

+0

@Manas Çok projeli bir yapı oluşturmalı mıyım? Bu yüzden, "ortak", "komut dosyasındaki" MainScript ve "ana" deki ortak kodları kullanırdım. Ve JAR'ları bu şekilde mi inşa ettin? – Petesta

cevap

1

Bunu yalnızca yerel paketleyiciyle çözmenin bir yolu şudur.

  • Verdiğiniz istiyoruz src/universal/bin varsayılan
  • add additional scripts olarak çalışmalıdır bir mainClass in Compile := Some("foo.bar.Main") tanımlayın src/main/scala
  • tüm ana sınıfları koyun. Bu komut dosyaları, aramak istediğiniz sınıfa özgün paketleyici and set the-main parametresi tarafından oluşturulan ana komut dosyasını çağırabilir.

Şimdi, aşağıdaki yapıya sahip bir çıktı paketiniz (örneğin, bir zip, rpm, deb) var. Varsayarsak uygulama myApp aradı ve adı verilen diğer bin komut verilir otherApp1/Maalesef otherApp2

lib/ (jars live here) 
conf/ (configuration files here, if any) 
bin/ 
    myApp 
    otherApp1 
    otherApp2 

benim bash-foo an için yeterince iyi değil (komut dosyası için hiçbir örnek var SO üzerinde büyü). Sonunda betikler (otherApp1, otherApp2) aldıkları parametreleri yerel paketleyici komut dosyasına (myApp) iletmelidir.

Böyle bir komut dosyası oluşturmak için otomatik bir yol sağlayan an issue #633 vardır. yardımcı olur

umut, Muki