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

标签 java windows maven emacs cedet

我一直在尝试让我的 Java 开发 Emacs 配置正常工作。这非常好 - 我已经让 malabar-mode 工作并且让 GNU Global 工作用于标签浏览。我无法工作的一件事是让 semanticdb 正确使用 gnu global。没有找到我的导入。

首先,这是一个 Maven 多模块项目,所有源都从顶级根项目文件夹中 check out 。在目录树中,所有其他项目都在这个项目之下。此根文件夹中有一个涵盖所有内容的 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 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 的公共(public)目录下,那么您更有可能只需要设置一个 EDE 项目来挂起 GTAGS 文件查找功能。

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

关于java - 设置 Emacs 23.4、CEDET 1.1 和 SemanticDB 以在 Windows 上使用 GNU Global,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10625328/

相关文章:

java - 如何调用未知对象的方法

Java OpenCV haarcascade_frontalface_default.xml

Android Studio 不显示我的真实设备来调试应用程序

mysql - 我如何在 Maven 中启动 MySQL 数据库以用于我们的 JUnit 测试?

maven - Findbugs 和 Maven 3.x

java - 找到二叉树的宽度

java - jit会优化新对象吗

linux - 等同于 .cmd 中的 find -o (shell)

c# - 如何从进程列表中隐藏 .net 应用程序

java - 如何从其他模块测试 Maven 插件 (Mojo)