воскресенье, 14 апреля 2013 г.

Настройка окружения Clojure и IntelliJ IDEA на MS Windows

Во-первых, необходимо установить leiningen2. Заходим на leiningen.org, читаем инструкции.

Качаем lein.bat куда-нибудь, например, в q:\programs\lein. Затем необходимо прописать этот путь в переменную %PATH% таким образом, чтобы lein.bat был доступен отовсюду.



Откройте cmd.exe и выполните команду lein self-install. Leiningen скачает и самостоятельно установит свою последнюю версию.

Домашний каталог утилиты lein -- C:\users\<user>\.lein, где <user> -- имя вашего пользователя. В домашнем каталоге lein находятся файлы настройки. Создайте там файл profiles.clj с таким содержимым:

{:user {:plugins [[lein-pprint "1.1.1"]
                  [lein2-eclipse "2.0.0"]
                  [lein-idea "1.0.1"]]
        :dependencies [[slamhound "1.3.1"]]}}

Здесь перечислино несколько плагинов для интеграции с IDE Eclipse и IntelliJ IDEA.

Мы в любом случае будем использовать lein для того, чтобы создавать проекты и управлять зависимостями. На данный момент lein делает это гораздо лучше IDE.

Чтобы создать новый проект, выполните команду lein new myclojure1, где myclojure1 -- имя нового проекта.

Зайдите в каталог myclojure1 и выполните там команду lein deps. Leiningen  подятянет все зависимости (в том числе и саму Clojure).

Сконвертируйте полученный проект в IDEA-project командой lein idea.

Далее, необходимо импортировать этот проект в IntelliJ IDEA. Чтобы IDEA могла работать с Clojure -- установите плагин LaClojure. Затем импортните проект myclojure1 (не забудьте настроить JDK для этого проеката, если не настроили для всей IDEA).

Запустить REPL можно выбрав пункт меню Tool -> Start Clojure Console.

Скомпилировать исходник на Clojure можно выбрав его в дереве проекта (src\myclojure1\core.clj), и выбрав пункт меню Tools -> Clojure REPL -> Load file in REPL.

Для того, чтобы перейти в неймспейс этого файла, обратите внимание на первую строчку core.clj:

(ns myclojure1.core)

Введите в REPL следующий текст:

(in-ns 'myclojure1.core)

После выполнения этой команды, все определения, доступные в core.clj станут доступны и в REPL.

Успехов!

10 комментариев:

  1. Вопрос: если проект состоит из java и clojure (например как https://github.com/nathanmarz/storm), можно ли настроить идею так что на вызове Build -> "Make project", clojurные сорцы тоже компилялись?

    Пока что не придумал ничего умнее, чем компилять отдельный clj скрипт, с наибольшим числом зависимостей, перед тем как вызывать сборку модуля.

    ОтветитьУдалить
  2. Ответы
    1. На emacs'е свет клином не сошёлся:) Надо отметить, что управлления окнами/воркспейсами в емаксе нет, и это огорчает.

      Удалить
    2. Про недостатки emacs я в курсе. Интересно, из-за каких конкретных недостатков отказался Дмитрий.

      Удалить
  3. Друзья, этот пост был для студентов БГУ, где я сейчас читаю лекции по ФП и Clojure. Они хотят IntelliJ IDEA, но при этом не осилили запуск из неё программ на Clojure. И еще у них там у всех Windows, представляете? Вот и пришлось дать подробное руководство.

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

    Я им показывал на сравнение две программы: java-версию поиска по файловой системе и clojure-версию (в три раза короче). Преподаватель, которая там сидела и тоже слушала, сказала, что их не испугать таким жава-кодом. Т.е. приходится объяснять даже такие очевидные вещи, что чем меньше кода, тем проще и быстрее его написать... Не думаю, что мне удастся объяснить им преимущества Emacs...

    ОтветитьУдалить
    Ответы
    1. > Я попытался им объяснить, что Emacs важен из-за простоты программирования.

      Только вы забываете, что зачастую на нормальное освоение Emacs (запоминание хоткеев, отвыкание от использования только оконных интерфейсов) у людей уйдёт слишком много времени, если ограничиваться рамками одного семестра. Что может быть критично, т.к. они потеряют много времени на это и не смогут сконцентрироваться на освоении содержательной части курса.

      Так что, имхо, IDEA тут однозначно лучшее решение.

      Удалить
    2. Да я на Emacs и не настаивал, поэтому и написал пост с инструкциями по настройке IDEA. Другое дело, что они по крайней мере должны знать о существовании более простых и удобных инструментов.

      Удалить
  4. в emacs через nrepl(замена slime swank) можно редактировать код в работающей jvm как бы, тут есть такая возможность ?

    ОтветитьУдалить
  5. Да, там примерно такой же REPL. Кстати, недавно nrepl переименовали в CIDER.

    ОтветитьУдалить
  6. новый плугин к идее https://github.com/cursiveclojure/cursive

    ОтветитьУдалить