设置Emacs 23.4,CEDET 1.1和SemanticDB以在Windows上使用GNU Global

Duc*_*ppy 5 java windows emacs cedet maven

我一直在努力让我的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全局搜索表"
  • 我将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)))
Run Code Online (Sandbox Code Playgroud)

Eri*_*ric 3

答案与您的项目设置方式以及您是否使用 EDE 有关。EDE 是 Emacs Development Envornment(在 IDE 上运行),是 CEDET 跟踪哪些文件属于您的项目的方式。该限制器与性能(搜索更少的内容)和防止一个项目的配置渗透到另一个项目有关。

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

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

如果您在project-1中,并希望跳转到project-2中的文件,并且GTAGS作为project-1的根,那么它将无法工作。您必须将 GTAGS 文件和 EDE 项目移至公共父目录。

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

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