2010-05-27 22 views
11

Eclipse'de paketlemem gereken bir Scala projem var, böylece bir sunucuya dağıtabiliyorum. Jetty'ye dayanıyor, ancak bağımsız bir uygulama olarak çalışıyor. Scala sınıfları, Java sınıfları ve bir dizi 3. parti kavanoz içerir.Scala projesi Eclipse'den nasıl dağıtılır?

Scala Eclipse eklentisinde bir çeşit dağıtım seçeneği olacağını varsaydım ama boş bir çizim yaptım.

Scala projesini çalıştırılabilir bir dosyaya paketlemenin en basit yolu nedir?

Herhangi bir yardım büyük beğeni topladı. Şerefe.

cevap

5

, bu şimdiye dağıtım için Scala uygulamasını ambalaj için bulunan en iyi yöntemdir:

Birincisi, Gary Boon tarafından açıklanan uygulama için ana giriş noktası olarak bir Java sınıfı oluşturmak . Bu, uygulamayı java komutuyla bir JAR'dan çalıştırmanıza izin verir.

import java.util.ArrayList; 

import scala.tools.nsc.MainGenericRunner; 


public class Main { 
    public static void main (String[] args) { 
     ArrayList<String> argList = new ArrayList<String>(); 
     argList.add("fully.qualified.ClassName"); 
     for (String s : args) { 
      argList.add(s); 
     } 
     MainGenericRunner.main(argList.toArray(new String[0])); 
    } 
} 

Şimdi bütün derslerini paketlemek için Eclipse'nın İhracat Runnable JAR komutunu kullanabilirsiniz: Ben java komutuyla Scala sınıfını çalıştıran Kaynak yolunda Scala kütüphanelerini sahip olsa bile, problemli olduğunu buldular ve kütüphaneleri bir JAR dosyasına dönüştürür. JAR'ın ana sınıfını Java giriş noktasına ayarlayın. Ayrıca, Eclipse tarafından üretilen çıktı ayarlarını ANT oluşturma dosyası olarak kaydedebilirsiniz, böylece ayarlamalar yapabilirsiniz. Java giriş noktası ile JAR oluşturmak için ANT kullanarak en iyi sonuçları verdi. Diğer JAR bağımlılıklarını da bu şekilde paketleyebilirsiniz, bu da JAR'ı farklı bir ana bilgisayarda çalıştırmaya çalışırken çok daha basit hale getirir. En azından Scala kütüphanesine ve Scala araçları JAR'a ihtiyacınız olacak. Bu arka plan olarak programını çalıştıran

nohup java -jar MyJettyServer.jar </dev/null>> server.log 2>> server_error.log & 

: Benim kadar, aşağıdaki komutu (source) kullanarak Daemon süreci olarak sunucuyu çalıştırabilir, iskelesi gömülü kullanarak ediyorsanız

<zipfileset excludes="META-INF/*.SF" src="${scala.lib.jar}"/> 
<zipfileset excludes="META-INF/*.SF" src="${scala.tools.jar}"/> 

Geçerli kullanıcı oturumundan bağımsız olan süreç, böylece ana bilgisayardan çıktıktan sonra işlem devam edecektir.

5
S12 supports web application deployments. Tabii ki, Jetty dağıtımına yönelik savaşınızı paketlemek için Ant, Maven veya başka bir inşa aracını kullanabilirsiniz. Sbt'yi tutulmadan harici bir araç olarak başlatabilirsiniz.

Sbt, JRebel yapılandırmasını destekliyor gibi görünüyor. Bir kez yürüdüğünüzde, ek bir savaş konuşlandırma adımı olmaksızın tutulmaları gereken kaynakları ve sınıfları değiştirebilmelisiniz.

+0

Thomas için teşekkürler. Korkarım ki, Java oluşturma araçları söz konusu olduğunda biraz yeniim. Bir WAR dosyasının istediğim şey olduğundan emin değilim. Gömülü modda Jetty'yi çalıştırıyorum, böylece her şeyi koşulabilir bir JAR'a veya başka bir şeye paketlemeyi umuyordum. Yoksa yanlış ağacın havlamasını mı yapıyorum? – lach

+0

A WAR, uygulamanızı bir sunucu-kapsayıcı (http: //) için paketlemek için standarttır (SRV.9.6 Web Uygulaması Arşiv Dosyası - http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index2.html) wiki.eclipse.org/Jetty/Howto/Deploy_Web_Applications). –

2

Tam olarak aynı şeyi yapıyorum: Jetty'yi içine alan düz bir uygulama içinde çalışan sunucu tarafı kodu geliştirin. Günümüzde çoğunlukla Scala kodu, eskiden Java idi. Her iki durumda da Java kodunu bir veya daha fazla JAR dosyasından (dosyaları) çalıştırıyorum.

Her iki durumda da dağıtım için Ant kullanırım. Scala projelerim bazen mevcut Java sınıflarını kullanıyor. Bunun için, Java sınıflarını daha sonra hem Eclipse Scala eklentimde hem de Ant dağıtımı oluşturma hedeflerinde kullanılan bir JAR'a derleyen bir Ant hedefi ekliyorum.

+0

Merhaba Silvio. Teşekkürler! İhtiyacım olan şey gibi geliyor. Sunucu uygulamanızı oluşturmak için kullandığınız ANT dosyasının bir örneğini gönderir misiniz? – lach

+0

Bir sakınca örneğini şu adreste bulabilirsiniz: http://www.jambo-software.com/download/build.xml –

0

Tutuklulukların Java için yaptığınız gibi bir WAR dosyası oluşturma yeteneğini kullanırsınız. Ya da bir kavanoz dosyası, tıpkı Java için yaptığınız gibi. Çünkü, çalışma zamanında java. Daha fazla sihire gerek yok. deneme yanılma bir sürü sonra

+0

Hayır, bu benim için işe yaramıyor. Sınıf çalıştırıldığında kavanoz çalıştırıldığında seçilebilir bir seçenek yoktur. Belki de kavanozdan el işi yaparsanız işe yarayacaktı? – fadedbee

2

Basit bir çözüm, Scala programının ana yöntemini çağıran küçük bir Java sınıfı oluşturmaktır. Daha sonra standart eclipse kavanoz ihracatı kullanılabilir. Önemli

public class Main { 
    public static void main (String[] args) { 
     MyScalaObjectWithMainMethod.main(args); 
    } 
} 

: Scala-library.jar bir harici kavanoz olarak inşa yolunda olduğundan emin olmak ihracat Önce (bir kitaplık olarak) sizin kavanoz ile birlikte ihraç edilecek şekilde yerleştirin.

Bu çözümü Jesper Villadsen tarafından Gary Boone's page (bir şekilde karmaşık bir yaklaşım öneren) yorumunda buldum. Gary'nin çözümünü çalıştırırken sorunlar yaşarken, Jesper'ın bu çözümü benim için mükemmel bir şekilde çalışıyor. Teşekkürler!

İlgili konular