Sau rất nhiều thử và sai, đây là phương pháp tốt nhất mà tôi tìm thấy cho đóng gói ứng dụng Scala để phân phối:
Đầu tiên, tạo một lớp Java là điểm vào chính cho ứng dụng như mô tả của Gary Boon . Điều này cho phép bạn chạy ứng dụng từ một JAR với lệnh java. Tôi thấy rằng chạy một lớp Scala với lệnh java là có vấn đề, ngay cả khi bạn có libs Scala trên con đường nguồn:
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]));
}
}
Bây giờ bạn có thể sử dụng Xuất Runnable JAR lệnh của Eclipse để gói lên tất cả lớp học của bạn và các thư viện vào một tệp JAR. Đặt lớp chính của JAR đến điểm vào Java. Bạn cũng có thể lưu các cài đặt đầu ra do Eclipse tạo ra như một tệp xây dựng ANT để bạn có thể thực hiện các điều chỉnh. Sử dụng ANT để tạo JAR với một điểm vào Java mang lại kết quả tốt nhất. Bạn cũng có thể đóng gói các phụ thuộc JAR khác theo cách này, điều này làm cho nó đơn giản hơn rất nhiều khi cố gắng chạy JAR trên một máy chủ khác. Tối thiểu bạn sẽ cần thư viện Scala và các công cụ Scala JAR.
<zipfileset excludes="META-INF/*.SF" src="${scala.lib.jar}"/>
<zipfileset excludes="META-INF/*.SF" src="${scala.tools.jar}"/>
Nếu bạn đang sử dụng nhúng Jetty, như tôi, bạn có thể chạy các máy chủ như một quá trình Daemon bằng cách sử dụng lệnh sau đây (source):
nohup java -jar MyJettyServer.jar </dev/null>> server.log 2>> server_error.log &
này chạy chương trình như một nền tảng quá trình độc lập với phiên người dùng hiện tại để quá trình này sẽ tiếp tục sau khi bạn đăng xuất máy chủ lưu trữ.
Cảm ơn bạn đã nhập Thomas. Tôi sợ tôi là một chút của một newb khi nói đến công cụ xây dựng Java. Tôi không chắc chắn nếu một tập tin WAR là những gì tôi muốn. Tôi đang chạy Jetty trong chế độ nhúng vì vậy tôi đã hy vọng để gói tất cả mọi thứ lên trong một JAR runnable hoặc một cái gì đó. Hay tôi đang sủa cây sai? – lach
WAR là tiêu chuẩn (Tệp lưu trữ ứng dụng web SRV.9.6 - http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index2.html) cách đóng gói ứng dụng của bạn cho một thùng chứa servlet (http: // wiki.eclipse.org/Jetty/Howto/Deploy_Web_Applications). –