设置 Emacs 23.4、CEDET 1.1 和 SemanticDB 以在 Windows 上使用 GNU Glob



我一直在尝试让我的Emacs配置用于Java开发。 这很好 - 我已经得到了马拉巴尔模式的工作,并让GNU Global为标签浏览工作。 我无法工作的一件事是让语义数据库正确使用 gnu 全局。 找不到我的导入。

首先,这是一个 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 全局搜索表">
  • 我将JDK源文件夹设置为系统包含文件夹,因此可以正确解析核心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)))

答案与您的项目的设置方式以及您是否使用 EDE 有关。 EDE是Emacs开发环境(在IDE上播放(,是CEDET跟踪哪些文件属于你的项目的方式。 该限制器与性能(搜索较少的内容(和防止一个项目的配置渗入另一个项目有关。

不幸的是,CEDET/EDE尚未支持Maven。 但是,您可以只标记项目的根目录,我想ede-cpp-root(通常用于C++项目(可能就足够了。 我们可能应该做一个Java版本。

无论如何,EDE可以配置为使用GNU Global来快速查找文件(请参阅GNU Global支持EDE和语义的手册(,但是您的GTAGS文件需要在项目根目录下。

如果您在项目 1 中,并且

希望跳转到项目 2 中的文件,并且 GTAG 是项目 1 的根目录,那么它将不起作用。 您必须将 GTAGS 文件和 EDE 项目移动到一个公共的父目录。

在当前的设置中,如果所有内容都已经在GTAGS的公共目录下,那么您更有可能只需要设置一个EDE项目来挂起GTAGS文件查找功能。

在cedet-devel邮件列表存档中有一些线程,有几个人在这方面取得了一些成功。

最新更新