Я пытался заставить мою конфигурацию Emacs для Java-разработки работать. Это довольно хорошо - у меня работает режим malabar, и GNU Global работает для просмотра тегов. Единственное, что я не могу заставить работать, это заставить semanticdb правильно использовать gnu global. Ни один из моих импортов не найден.
Во-первых, это многомодульный проект Maven, в котором все исходные коды извлечены из корневой папки проекта верхнего уровня. Все остальные проекты находятся ниже этого в дереве каталогов. В этой корневой папке есть единая база данных GTAGS, охватывающая все.
Вещи, которые работают:
M-x gtags-find-tag символ RET RET
работает нормально, так что база данных в порядке, и ее можно найти по всему миру.M-x cedet-gnu-global-version-check
работает и сообщает, что моя версия хороша.Mx cedet-gnu-global-expand-filename
работаетMx semanticdb-find-test-translate-path
показывает «Таблицу глобального поиска GNU» в буфере JavaМоя конфигурация java выглядит следующим образом (инициализация cedet находится в файле ранее):
(add-local-load-path "malabar/lisp")
(require 'malabar-mode)
(setq malabar-groovy-lib-dir (concat emacs-local-site-lisp "malabar/lib"))
(add-to-list 'auto-mode-alist '("\\.java\\'" . malabar-mode))
;; enable semanticdb support for gnu global
(when (cedet-gnu-global-version-check t)
(semanticdb-enable-gnu-global-databases 'java-mode))
(add-hook 'java-mode-hook
(lambda ()
(gtags-mode 1)))
(add-hook 'java-mode-hook 'flymake-mode-on)
(defun my-java-flymake-init ()
(list "javac" (list (flymake-init-create-temp-buffer-copy
'flymake-create-temp-with-folder-structure))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.java$" my-java-flymake-init flymake-simple-cleanup))
(add-hook 'java-mode-hook
'(lambda ()
(semantic-add-system-include (getenv "JAVA_HOME") 'java-mode)))