Появилась у меня в последнее время необходимость основательно познать Java. Очень долго не смотрел в его сторону, были у меня некоторые предубеждения. Я всегда думал, что plain C и Lisp это наше все. И этого достаточно. А сейчас работа повернулась стороной с Java лицом и соответственно захотел быстренько познать его особенности, а также настроить свой любимый редактор для удобной работы с этим популярным языком программирования.
Для каждого языка программирования в Emacs я стараюсь настроить следующие возможности:
- Подсветка синтаксиса (есть из коробки)
- Авто дополнения (желательно через auto-complete)
- Навигация по коду
- Работа с проектами (опционально, люблю работать в консоли вне Emacs)
- REPL (также опционально, но очень помогает во время обучения)
Из коробки в java-mode
фактически работает только подсветка синтаксиса. Cedet
идущий с Emacs'ом также позваляет настроить автодополнения и навигацию внутри
классов. Но вот, например, системные вещи наотрез отказывается предлагать в
качестве дополнений.
В общем я решил посмотреть, какие сейчас есть удобств для работы с Java в Emacs. При этом я наткнулся на следующие вещи:
- JDEE
- malabar-mode
- Eclime for Emacs
- Auto Java Complete
- CEDET Developer Version (Bazaar repo)
Немного впечатлений о каждом расширении. Все пробовал на MacBook Air, OS X, Emacs 24.3.1 из MacPorts.
JDEE
Старое и похоже переставшее развиваться расширение. Сразу не понравилось, что
тянет с собой свою цветовую схему. Мелочи, но они всегда бросаются в глаза.
Также JDEE каким-то образом умудряется нарушить работу whitespace-mode
,
который перестает подсвечивать вообще что-либо. Данную проблему решить не смог.
Есть у меня подозрение, что это связано с перекрашиванием буфера, но глубока не
капал за ненадобностью. Нечто похожее сейчас есть в markdown-mode
. Ну и
каких-то особых возможностей здесь не нашел. Все плюшки сделаны через Cedet,
соответственно их можно получить и без JDEE.
Malabar-mode
Завязан на Maven, про который ранее слышал совсем чуть-чуть и
отдаленно. Быстренько глянул, как работать с этим менеджером проектов. Создал
тестовый проект, но производительность malabar-mode
вообще не порадовала. Он
как я понял использует Groovy console для формирования дополнений. И это
похоже порой не быстрый процесс. В общем от этого варианта тоже
отказался. Кроме того проект также загибается. Хотя в знакомстве с
malabar-mode
есть свой плюс: я узнал что такое Maven и как с ним работать.
Eclime
Вот это вообще монстр. Идея затащить в Emacs (изначально в Vim) функционал Eclipse через некий интерфейс тоже на деле оказывается не шибко производительна. В данном случае eclime запускает Eclipse на заднем плане и общается с ним, чтобы получить автодополнения и еще некоторый функционал (рефакторинг, навигация по коду и т.п.). Скорость отзывчивости данной системы еще меньше, чем у Malabar.
Auto Java Complete
Смысл данного расширения прост: сгенерировать теги необходимых Java библиотек
и предоставить интерфейс для auto-complete
. Я попробовал использовать готовые
теги и это работает достаточно быстро и удобно. Но тут мы получаем только
информацию системных библиотек и того что сами укажем ручками при генерации
тегов. В принципе в связке со стандартным Cedet идущим с Emacs'ом должно
всего этого хватить.
Cedet Dev
Самый удобный, как мне кажется, вариант это использовать последнюю версию Cedet из Bazaar репозитория. Тут сейчас Java хорошо поддерживается. Maven проекты кстати тоже отлично воспринимаются. По работе и настройке Cedet лучше обращаться к статье Alex Ott'а.
На данный момент я остановился на последнем варианте: Cedet Dev +
auto-complete
. Есть у кого еще предложения как улучшить жизнь в Emacs при
работе с Java? Или все таки Cedet это наше все и смотреть в другие стороны
лучше не стоит?
5 комментариев:
Я в своей ветке разработки (https://github.com/alexott/cedet/tree/devel) допинываю потихоньку интеграцию с разными системами сборки - ant, maven, lein, rebar. Там сейчас пока больше чем в нормальном CEDET, так что можно пробовать. Я планирую слить это обратно в CEDET, но не знаю когда будет время.
кстати, я почему на яве, а не на Clojure? все ближе к лиспу ;-)
2 Alex
Интересно. Попробую твою ветку. Было бы еще везде все в одной системе контроля версий. bzr-git тут поможет? Плоховато знаком с Bazaar. Или git-bzr есть?
А Clojure это конечно клева. Но не получается все сразу узнавать и использовать. Всего по немногу. Может быть и до этого языка доберусь ) Я тут до кучи со Scala иногда балуюсь )
я втянул в git через git-bzr, мне просто нужно работать из нескольких мест, а с bzr это не всегда получается удобно
Ок, попробую на досуге разобраться с git-bzr. Хотя это наверное лишнее для того чтобы всего лишь попробовать твою ветку )
Хотя я нагородил себе такую хитрую структуру Emacs конфигов в связке с el-get (надо будет написать про это как-нибудь), что видимо будет полезно узнать как быстренько заэкспортировать что-то из bzr в git, и положить себе на git сервачок.
Отправить комментарий