我正在尝试为即将开始的Java项目设置Emacs + JDEE,但是我无法使JDEE正常工作。我要解决的第一个想法是能够跳转到给定类名的源文件。我正在使用Cassandra源作为使用JDEE的游乐场。

我已经安装了一个新的Ubuntu 12.04 VM,并将Emacs 23.3.1作为我的测试环境。我正在使用默认Ubuntu存储库中的openjdk-1.6,JDEE似乎正在使用它。我下载了jdee tar球并将其提取到~/.emacs.d中。 Cassandra源代码树已 checkin ~/cassandra。我的~/.emacs.d/init.el包含以下内容:

(setq jde-sourcepath '("~/cassandra/src/java"))
(add-to-list 'load-path "~/.emacs.d/jdee-2.4.1/lisp")
(load "jde")

当我打开~/cassandra/src/java/org/apache/cassandra/db/ColumnFamily.java时,我希望能够跳转到org.apache.cassandra.config.CFMetaData类。当我在该类名上运行jde-open-class-at-point时,出现以下错误:
Cannot determine the class of "CFMetaData".

同样地,如果我运行
(jde-find-class-source "org.apache.cassandra.config.CFMetaData")

我收到此错误:
jde-read-class: No match for CFMetaData

我需要怎么做才能让JDEE查找源文件?

最佳答案

我不确定到底是什么问题,但是根据文档,jde-open-class-at-point首先在jde-sourcepath中搜索源文件,然后在jde-global-classpath中搜索,然后在$CLASSPATH中搜索,然后在当前目录中搜索。因此,也许您需要设置这些变量。

我将我的jdee设置发布在这里,希望它能对您有所帮助:(对我来说效果很好)

.emacs

(add-to-list 'load-path "~/.emacs.d/plugins/jdee-2.4.1/lisp")
(autoload 'jde-mode "jde" "JDE mode" t)
(setq auto-mode-alist
      (append '(("\\.java\\'" . jde-mode)) auto-mode-alist))

我为每个项目使用prj.el:

prj.el
(jde-project-file-version "1.0")
(jde-set-variables
 '(jde-jdk-registry (quote (("1.6" . "/usr/java/jdk1.7.0_51"))))
 '(jde-jdk (quote ("1.6")))
 '(jde-xref-db-base-directory "./xrefdb")
 '(jde-xref-store-prefixes (quote ("")))
 '(jde-build-function (quote jde-ant-build))
 '(jde-ant-enable-find t)
 '(jde-sourcepath (quote ("./src")))
 '(jde-built-class-path (quote ("./bin")))
 '(jde-global-classpath (quote ("./bin" "./src" "./lib")))
 '(jde-electric-return-p t)
 '(jde-enable-abbrev-mode t))

09-27 05:43