Какая лучшая система сборки Scala? [закрытый]


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

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

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

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

обновление 2 - из тестов, которые я видел, Даниэль Спивак прав, что buildr быстрее, чем Maven (и, если вы делаете инкрементные изменения, задержка Maven составляет 10 секунд раздражает), поэтому, если можно создать совместимый файл сборки, то это, вероятно, стоит того...

8 51

8 ответов:

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

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

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

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

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

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

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

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

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

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

главное отличие это то, что он предназначен не только для scala (а написан на python, кстати) а моделируется после google build system.

Это не так раздуто, как sbt, поэтому для первокурсников это намного проще, но я никогда не слышал об использовании штанов за пределами twitter и квадрат.

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

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

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

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

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

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

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

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

его также можно приложить к строителям за исключением СБТ.

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