Как развернуть проект Scala из Eclipse?
У меня есть проект Scala в Eclipse, который мне нужно упаковать, чтобы я мог развернуть его на сервере. Он основан на Jetty, но работает как отдельное приложение. Он содержит классы Scala, классы Java и ряд сторонних баннеров.
Я предположил, что в плагине Scala Eclipse будет какой-то вариант развертывания, но я нарисовал пробел.
Каков самый простой способ упаковать проект Scala в исполняемый файл, чтобы его можно было развернуть?
Любая помощь очень ценится.
Приветствия.
Ответы
Ответ 1
После большого количества проб и ошибок, это лучший метод, который я нашел для упаковки приложения Scala для распространения:
Сначала создайте класс Java как основную точку входа для приложения, как описано Gary Boon. Это позволяет запускать приложение из JAR с помощью команды java. Я обнаружил, что запуск класса Scala с помощью java-команды проблематичен, даже если у вас есть Scala libs в исходном пути:
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 и инструменты Scala JAR.
<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 &
Это запускает программу как фоновый процесс, который не зависит от текущего пользовательского сеанса, поэтому процесс будет продолжаться после выхода из системы хоста.
Ответ 2
Sbt поддерживает развертывание веб-приложений. Вы можете, конечно, использовать Ant, Maven или другие инструменты сборки для упаковки развертывания WAR для Jetty. Вы можете запустить sbt в качестве внешнего инструмента из eclipse.
Sbt, похоже, поддерживает конфигурацию JRebel. После запуска вы должны иметь возможность изменять ресурсы и классы из затмения без дополнительного этапа развертывания войны.
Ответ 3
Я делаю точно то же самое: создайте код на стороне сервера, который работает внутри простого приложения, которое включает Jetty. В настоящее время это в основном код Scala, он был Java. В любом случае я просто запускаю код Java из одного или нескольких файлов JAR.
В обоих случаях я использую Ant для развертывания. Мои проекты Scala иногда используют существующие Java-классы. Для этого я добавляю цель Ant, которая компилирует классы Java в JAR, который впоследствии используется как в моем плагине Eclipse Scala, так и в Ant целях сборки сборки.
Ответ 4
Простым решением является создание небольшого класса Java, который вызывает основной метод программы Scala. Затем можно использовать стандартный экспорт контейнера eclipse.
public class Main {
public static void main (String[] args) {
MyScalaObjectWithMainMethod.main(args);
}
}
Важно: Перед экспортом убедитесь, что scala -library.jar находится в пути сборки в качестве внешнего jar (а не как библиотека), чтобы он экспортироваться вместе с вашей банкой.
Я нашел это решение в качестве комментария Jesper Villadsen на странице страницы Гэри Бун (кто предлагает несколько сложный подход). Хотя у меня были проблемы с запуском решения Gary, это решение Jesper отлично работает для меня. Спасибо!
Ответ 5
Вы используете способность затмений создавать WAR файл, как и для Java. Или файл jar, как и для Java. Потому что во время выполнения это java.
Больше не нужно магии.