Mar 29, 2011 00:40
Как сделать разработку на Scala/Lift комфортнее? Наверное, самое главное - это иметь возможность не отвлекаться на рутинные операции, такие как компиляция и развертывание (deploy) приложения. В мире классической Java-разработки эти операции уже давно автоматизированы: тот же Eclipse c плагином Sysdeo и Apache Tomcat. Но в мире Scala пока не все так хорошо отшлифовано.
Я использую Maven в качестве средства управления сборкой, зависимостями, развертыванием приложения. Да, я знаю о sbt, но пока что не было возможности по-настоящему опробовать этот инструмент.
Итак, для непрерывной компиляции нам доступна maven-цель (goal) scala:cc - сервис, который будет отслеживать изменения в коде и автоматически пересобирать его. Отличительной особенностью является использование fsc (Fast Scala Compiler), что значительно ускоряет повторную компиляцию: для проекта в 1000 строк scala-кода первоначальная сборка занимает около 50-60 сек, последующие - 5-11 сек.
Теперь о том, что касается т.н. hot deploy, когда измененный код автоматически подгружается контейнером. Для разработки я использую легкий веб-сервер Jetty, и maven-цель jetty:run. Для того, чтобы Jetty автоматически делал этот самый hot deploy, нужно установить значение параметра scanIntervalSeconds в значение, отличное от 0. Теоретически, теперь нам просто надо запустить обе цели - scala:cc и jetty:run и наслаждаться, а практически - Jetty будет зависать и вываливаться через каждые 2-3 раза этого самого hot deploy. Опытным путем было установлено, что если запускать Jetty со следующим набором параметров - -Xmx1024m -Xms512m -XX:MaxPermSize=1024m, то ситуация исправляется, и Jetty отлично переносит 15-20 автоматических перезапусков (больше просто не пробовал, не нужно было). Если вы пользуетесь Maven'ом из консоли, то перед запуском jetty:run можно просто добавить export MAVEN_OPTS="-Xmx1024m -Xms512m -XX:MaxPermSize=1024m". Либо же отредактировать pom.xml, или создать соответствующую Run Configuration в используемой IDE.
development,
scala,
liftweb