我一直在尝试让我的Emacs配置用于Java开发工作。这是非常好的 - 我已经使用了malabar模式并让GNU Global用于标签浏览。我无法工作的一件事是让semanticdb正确使用gnu global。我的所有进口都没有找到。
首先,这是一个Maven多模块项目,其中所有源都从顶级根项目文件夹中签出。目录树中的所有其他项目都低于此项目。此根文件夹中有一个GTAGS数据库,涵盖所有内容。
有效的方法:
M-x gtags-find-tag RET symbol RET
工作正常,因此数据库很好,全局都可以找到它。M-x cedet-gnu-global-version-check
有效并报告我的版本不错。M-x cedet-gnu-global-expand-filename
正常工作M-x semanticdb-find-test-translate-path
在Java缓冲区中显示“GNU全局搜索表”我的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)))
答案 0 :(得分:3)
答案与您的项目设置方式以及使用EDE有关。 EDE是Emacs Development Envornment(在IDE上播放),也是CEDET跟踪哪些文件属于您的项目的方式。该限制器与性能(搜索较少的东西)和防止一个项目的配置流入另一个项目有关。
不幸的是,CEDET / EDE尚不支持Maven。但是,您可以只标记项目的根目录,我猜ede-cpp-root(通常用于C ++项目)可能就足够了。我们应该制作一个java版本。
无论如何,EDE可以配置为使用GNU Global快速查找文件(请参阅EDU和Semantic的GNU Global支持手册),但您的GTAGS文件需要位于项目根目录。
如果你在project-1中,并期望跳转到project-2中的文件,并且GTAGS是project-1的根,那么它将无法工作。您必须将GTAGS文件和EDE项目移动到公共父目录。
在您当前的设置中,如果所有内容都已经在GTAGS的公共目录下,那么您更有可能只需要设置EDE项目来挂起GTAGS文件查找功能。
cedet-devel邮件列表档案中有几个人在这方面取得了一些成功。