Работа с Java из Emacs в рамках проекта Leiningen

На SO есть много тесно связанных вопросов, просто чтобы назвать некоторые из них:

Отличие моих вопросов в том, что я хочу знать, как сделать работу с Java такой же простой, как с Clojure прямо из Emacs в смешанном проекте Clojure/Java Leiningen.

Я имею в виду возможность (в порядке приоритета):

  • скомпилировать Java-код прямо из Emacs (примечание: его можно скомпилировать из оболочки с помощью lein javac)
  • используйте завершение кода для Java (такие инструменты, как JDEE, предоставляют эту функцию, но она отдельный инструмент, который не касается настройки проекта Leiningen)
  • отладка кода Java

person ffriend    schedule 19.02.2012    source источник
comment
JDEE — ваш лучший вариант, если вы действительно хотите работать с Java в Emacs. ИМО не стоит, но это адекватно.   -  person Dave Newton    schedule 19.02.2012
comment
Для интеллектуального завершения вы можете попробовать eclim, который также имеет интерфейс emacs.   -  person Tom    schedule 19.02.2012


Ответы (4)


Ознакомьтесь с проектом Emacs LSP. Он обеспечивает поддержку Java.

person Benjamin Cassidy    schedule 14.10.2020

Я хочу попробовать автоматическое заполнение, но еще не дошел до этого.

Учитывая то, как работают leiningen/Clojure, я не уверен, насколько легко вы могли бы сделать компиляцию. Когда вы компилируете код Java, вам не нужно перезапускать repl/application для JVM, чтобы перезагрузить его в любом случае?

person Bill    schedule 19.02.2012
comment
На самом деле можно перезагрузить класс из запущенного процесса Java с помощью пользовательского ClassLoader (см. пример). Тем не менее, я не слишком часто переключаюсь между Java и Clojure, поэтому я могу время от времени перезапускать slime-clojure. - person ffriend; 20.02.2012

Malabar-mode — заброшенное ПО, но я думаю, что оно обеспечивает тот уровень функциональности, который вам нужен. Мне кажется, что механизм автозаполнения на основе сопроцесса должен быть возможен с CEDET, leiningen и swank-clojure, но у меня есть дневная работа и подработка...

person Steven Huwig    schedule 28.03.2012

Вероятно, это не совсем то, что вы хотели, но это должно обрабатывать пулю 1 для вас:

(defun lein-javac (&optional PROJECT-DIR)
  (interactive)
  (let ((output-buffer (progn
                         (with-output-to-temp-buffer "*lein-javac*" nil )
                         (select-window (get-buffer-window "*lein-javac*"))
                         (read-only-mode 'toggle)
                         (window-buffer)) ))
   (shell-command (concat "cd " (or PROJECT-DIR default-directory) 
                         " && lein javac &") "*lein-javac*")))
person l.k    schedule 22.04.2019