Какая система сборки Scala лучшая?

Я видел вопросы об IDE здесь - Какой самый лучший IDE для разработки Scala? и каково текущее состояние инструментов для Scala?, но у меня был смешанный опыт с IDE. Прямо сейчас я использую Eclipse IDE с опцией автоматического обновления рабочей области и Kate 4 в качестве моего текстового редактора. Вот некоторые из проблем, которые я хотел бы решить:

  1. использовать мой собственный редактор IDE действительно ориентированы на всех, кто использует свои компоненты. Мне больше нравится Kate, но система обновления очень раздражает (скорее, она не использует inotify, скорее, интервал опроса 10 с). Причина, по которой я не пользуюсь встроенным текстовым редактором, заключается в том, что из-за нарушенных функций автозаполнения среда IDE зависает на 10 секунд.
  2. перестраивать только измененные файлы. Система сборки Eclipse не работает. Он не знает, когда восстанавливать классы. Я почти половину времени собираюсь проектировать -> чистить. Хуже того, кажется, что даже после того, как он завершил сборку моего проекта, через несколько минут он высветится с какой-то странной ошибкой (правка - эти ошибки кажутся вещами, которые ранее были решены с помощью проекта> clean, но затем возвращаются обратно...). Наконец, установка "Предпочтения / Продолжить запуск, если проект содержит ошибки" в "приглашение", похоже, не оказывает влияния на проекты Scala (т.е. он всегда запускается, даже если есть ошибки).
  3. Настройка сборки Я могу использовать "ночной" выпуск, но я хочу изменить и использовать мои собственные сборки Scala, а не компилятор, встроенный в плагин IDE. Также было бы неплохо пройти [например] -Xprint:jvm компилятору (распечатать пониженный код).
  4. Быстрая компиляция Несмотря на то, что Eclipse не всегда собирается правильно, он выглядит быстрым, даже более fsc,

Я посмотрел на Муравья и Мэйвена, хотя еще не работал (мне также нужно потратить время на решение проблем № 3 и № 4). Я хотел узнать, есть ли у кого-то другие предложения, прежде чем я потрачу время на то, чтобы заставить работать неоптимальную систему сборки. Заранее спасибо!

ОБНОВЛЕНИЕ - я сейчас использую Maven, передавая проект как плагин компилятора к нему. Это кажется достаточно быстрым; Я не уверен, что делает кэвинг в Maven. Текущий репозиторий для Scala 2.8.0 доступен [ ссылка]. Архетипы очень крутые, и кроссплатформенная поддержка кажется очень хорошей. Однако, что касается проблем компиляции, я не уверен, что fsc на самом деле исправлен, или мой проект достаточно стабилен (например, имена классов не меняются) - запуск его вручную не беспокоит меня так сильно. Если вы хотите увидеть пример, не стесняйтесь просматривать файлы pom.xml, которые я использую [ github].

ОБНОВЛЕНИЕ 2 - из тестов, которые я видел, Даниэль Спивак прав в том, что сборщик быстрее, чем Maven (и, если кто-то делает инкрементные изменения, 10-секундная задержка Maven становится раздражающей), так что если кто-то может создать совместимый файл сборки, то это, вероятно, стоило того...

8 ответов

Решение

Точки 2 и 4 чрезвычайно сложны для управления с помощью текущего скаляка. Проблема в том, что компилятор Scala немного туповат в построении файлов. По сути, он будет создавать то, что вы ему кормите, независимо от того, действительно ли этот файл нужно создавать. Scala 2.8.0 будет иметь некоторые огромные улучшения в этом отношении, но до тех пор... Eclipse SDT на самом деле имеет очень сложный (и очень хакерский) код для обнаружения изменений и отслеживания зависимостей. В целом, это делает достойную работу, но, как вы видели, есть морщины. Eclipse SDT 2.8.0 будет опираться на вышеупомянутые улучшения самого скаляка.

Таким образом, создание только измененных файлов в значительной степени исключено. Помимо SDT, единственный известный мне инструмент, который даже пробует это, - это SBT ( Simple Build Tool). Он использует плагин компилятора для отслеживания файлов по мере их компиляции и запроса графика зависимостей, вычисленного самим компилятором. На практике это дает улучшение примерно на 50% по сравнению с подходом перекомпиляции. Еще раз, это взломать, чтобы обойти недостатки в скайпе до 2.8.0.

Хорошей новостью является то, что достаточно быстрая компиляция все еще возможна, даже не беспокоясь об обнаружении изменений. FSC использует ту же технологию (о, это звучит так "Чарли Эппс"), которую Eclipse SDT использует для реализации быстрой инкрементной компиляции. Короче говоря, это довольно быстро.

Лично я использую Apache Buildr. Его конфигурация значительно чище, чем у Maven или SBT, а время запуска на порядки меньше (при работе под MRI). Он интегрируется с FSC и пытается выполнить некоторое базовое обнаружение изменений самостоятельно (довольно примитивно). Он также имеет автоматическую поддержку основных тестовых сред Scala (ScalaTest, ScalaCheck и Specs), а также поддержку совместной компиляции с исходными кодами Java и генерации метаданных IDE для IntelliJ и Eclipse. Да, и он поддерживает все функции Maven (разрешение зависимостей и т. Д.) И некоторые другие. Я даже работаю над расширением, которое позволило бы поддерживать интерактивную оболочку, интегрированную с JavaRebel, и поддерживать несколько поставщиков оболочек (Scala, JIRB, Clojure REPL и т. Д.). Он еще не готов для SVN, но я сделаю коммит, как только он будет готов (возможно, вовремя для 1.3.5).

Как вы видите, я твердо убежден в том, что Buildr - лучший инструмент для сборки Scala. Его документация немного скучна в том, что касается Scala, но это потому, что все так просто, что трудно документировать, не чувствуя себя многословным. Вы всегда можете проверить один из моих репозиториев GitHub для примеров. Удачи!

Вы смотрели на Intellij IDEA и его интеграцию с Scala? Intellij имеет лояльных (фанатичных?) Последователей среди разработчиков Java, так что вы можете найти, что это соответствует вашим потребностям.

Для полноты картины я должен сказать, что есть также Pants - инструмент для сборки, который используется в Twitter (один из первых пользователей scala)

Основное отличие заключается в том, что он предназначен не только для Scala (и, кстати, написан на Python), а смоделирован по системе сборки Google.

Он не такой раздутый, как sbt, поэтому для новичков это намного проще, но я никогда не слышал об использовании Pants за пределами твиттера и foursquare.

Если вы боитесь SBT, может быть, другой альтернативный инструмент для сборки, ABT, может быть для вас альтернативой?

Я также очень разочарован плагином Scala на Eclipse, и я могу добавить еще несколько проблем в список:

  • автозаполнение работает только в некоторых случаях
  • отладчик не работает должным образом (особенно при попытке отладки scala xml)
  • отладчик забывает точки останова
  • "перейти к определению" не работает чаще, чем нет.

Я рад слышать, что Buildr звучит как лучшая альтернатива (во всяком случае, на фронте сборки), я попробую - спасибо!

Если вы используете Emacs, я думаю, что Ensime - довольно хорошая IDE. Я думаю, что на момент написания статьи Ensime является единственной IDE, которая обеспечит вам быстрое и точное автозаполнение объектов Scala и Java, включая неявные преобразования.

Есть поддержка просмотра кода с использованием Speedbar, шаблоны кода с использованием превосходного Yasnippet и меню автозавершения кода с помощью автозаполнения. Все это очень современные, активно поддерживаемые пакеты Emacs. Также есть встроенная поддержка для построек Maven и SBT.

Там гораздо больше, таких как интерактивная отладка, рефакторинг и интерпретатор Scala в низшем процессе. Все, что вам нужно в современной IDE для Scala, уже есть в Ensime. Настоятельно рекомендуется для Emacsens.

Я пошел по той же дороге, и вот где я нахожусь: - После некоторого первоначального расследования я бросил Кейт. Я люблю использовать его для большинства вещей, но когда дело дошло до таких вещей, как определение завершений табуляции, я обнаружил, что этого крайне не хватает. Я бы порекомендовал вам вместо этого взглянуть на gedit, который гораздо более эффективен для разработки на Scala. Благодаря редактору gedit я использую SBT и считаю его отличным инструментом для сборки. Я могу перевести его в "тестовый" режим, где при изменении любого кода он перекомпилирует соответствующие файлы и запускает мой набор тестов. Это был чрезвычайно эффективный способ работы.

Я еще не взглянул на Buildr. Я хотел бы сказать, что так и будет, но, честно говоря, имея в своем распоряжении SBT, у меня нет особой необходимости смотреть на другой инструмент для сборки.

Если вы хотите использовать Eclipse, но собрать проект с использованием sbt и все еще иметь возможность отладки, посмотрите этот пост здесь:

zikaprog.wordpress.com/2010/04/19/scala-eclipse-sbt-and-debugging/

Это также может быть применено к строителям кроме sbt.

Последняя версия плагина Maven Scala поддерживает Zinc/Nailgun для более быстрого запуска и ускоренных сборок. Смотрите Цинк и Инкрементный сборник.

Другие вопросы по тегам