Как развернуть проект Scala из Eclipse? - PullRequest
11 голосов
/ 27 мая 2010

У меня есть проект Scala в Eclipse, который мне нужно упаковать, чтобы я мог развернуть его на сервере. Он основан на Jetty, но работает как отдельное приложение. Он содержит классы Scala, классы Java и ряд сторонних jar-файлов.

Я предполагал, что в плагине Scala Eclipse будет какой-то вариант развертывания, но я нарисовал пробел.

Какой самый простой способ упаковать проект Scala в исполняемый файл, чтобы его можно было развернуть?

Любая помощь с благодарностью. Приветствия.

Ответы [ 5 ]

5 голосов
/ 29 мая 2010

После долгих проб и ошибок это лучший метод, который я нашел для упаковки приложения 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 &

Это запускает программу как фоновый процесс, который не зависит от текущего сеанса пользователя, поэтому процесс будет продолжен после выхода из системы.

5 голосов
/ 27 мая 2010

Sbt поддерживает развертывание веб-приложений . Конечно, вы можете использовать Ant, Maven или другие инструменты сборки для упаковки вашей WAR для развертывания Jetty. Вы можете запустить sbt как внешний инструмент из eclipse.

Sbt поддерживает JRebel конфигурацию. Как только он запустится, вы сможете изменять ресурсы и классы из затмения без дополнительного шага развертывания войны.

2 голосов
/ 23 сентября 2012

Простое решение - создать небольшой класс Java, который вызывает основной метод программы Scala. Затем можно использовать стандартный экспорт Jar Eclipse.

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

Важно: Перед экспортом убедитесь, что файл scala-library.jar находится в пути сборки как внешний jar (не как библиотека), чтобы он был экспортирован вместе с твой кувшин

Я нашел это решение как комментарий Джеспера Вилладсена на Страница Гари Буна (который предлагает несколько сложный подход). В то время как у меня были проблемы с запуском решения Гэри, это решение от Jesper отлично работает для меня. Спасибо!

2 голосов
/ 27 мая 2010

Я делаю то же самое: разрабатываю код на стороне сервера, который запускается в простом приложении, которое встраивает Jetty. В настоящее время это в основном Scala-код, раньше это был Java. В любом случае я просто запускаю код Java из одного или нескольких файлов JAR.

В обоих случаях я использую Ant для развертывания сборок. Мои проекты Scala иногда используют существующие классы Java. Для этого я добавляю цель Ant, которая компилирует классы Java в JAR, который впоследствии используется как в моем плагине Eclipse Scala, так и в целях сборки Ant deploy.

0 голосов
/ 28 мая 2010

Вы используете способность eclipses для создания файла WAR, как и для Java Или jar-файл, как и для Java. Потому что во время выполнения это Java. Больше не нужно магии.

...