После долгих проб и ошибок это лучший метод, который я нашел для упаковки приложения Scala для распространения:
Сначала создайте класс Java, который будет главной точкой входа для приложения, как описано Гари Бун . Это позволяет вам запускать приложение из JAR с помощью команды java. Я обнаружил, что запуск класса Scala с помощью команды java проблематичен, даже если у вас есть библиотеки Scala на исходном пути:
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]));
}
}
Теперь вы можете использовать команду Eclipse Export Runnable JAR , чтобы упаковать все ваши классы и библиотеки в файл JAR. Установите основной класс JAR на точку входа Java. Вы также можете сохранить сгенерированные Eclipse параметры вывода в виде файла сборки ANT, чтобы вы могли внести изменения. Использование ANT для создания JAR с точкой входа Java дало наилучшие результаты. Таким способом вы также можете упаковать другие зависимости JAR, что значительно упрощает попытки запуска JAR на другом хосте. Как минимум вам понадобится библиотека Scala и JAR-инструменты Scala.
<zipfileset excludes="META-INF/*.SF" src="${scala.lib.jar}"/>
<zipfileset excludes="META-INF/*.SF" src="${scala.tools.jar}"/>
Если вы используете встроенный Jetty, как и я, вы можете запустить сервер как процесс Daemon, используя следующую команду ( source ):
nohup java -jar MyJettyServer.jar < /dev/null >> server.log 2>> server_error.log &
Это запускает программу как фоновый процесс, который не зависит от текущего сеанса пользователя, поэтому процесс будет продолжен после выхода из системы.