6

我正在使用 Emacs 23.2。这是我加载语义的方式:

(setq semantic-default-submodes '(global-semantic-idle-scheduler-mode
                  global-semanticdb-minor-mode
                  global-semantic-idle-summary-mode
                  global-semantic-mru-bookmark-mode))
(semantic-mode 1)

因此,如果我创建一个简单的 java 文件并访问它,我将获得本地定义的方法和类的代码完成。但我不知道如何让语义感知 jdk 库。例如,如果我尝试semantic-ia-complete-symbol使用 String 变量,我会得到Cannot find types for 'String blah'.

有谁知道如何将 jdk 库加载到语义数据库中,以便可以使用 String 等标准对象类型的代码完成?

4

3 回答 3

3

从 CEDET 1.1 开始,Semantic 支持通过 javap 检索类信息。您需要将变量设置为 JAVA_HOME,并使用 Java 系统 jar 的路径列表cedet-java-jdk-root填充变量,例如等。semanticdb-javap-classpathrt.jar

一篇文章(俄语,但你可以得到翻译)关于设置 Semantic 以完成 Java - 请查看那里了解更多详细信息。

于 2012-05-09T06:18:22.783 回答
1

如果您解压缩 $JAVA_HOME 中的 src.zip,您可以为您的 java 模式添加一个钩子,如下所示:

(add-hook 'java-mode-hook
  '(lambda ()
     (semantic-add-system-include (getenv "JAVA_HOME") 'java-mode)))

它用 Emacs 23.3 和 CEDET 1.1 为我解决了这个问题。

于 2012-05-08T15:24:10.133 回答
0

有一段时间没有尝试过 CEDET,所以我会盲目地问一些可能会深入了解您的问题的问题。

  1. 我假设 JDK 在您的路径上,并且 Emacs 可以找到它吗?
  2. 由于JDK基本上是一堆没有源代码的jar文件,Semantic可以解析吗?例子:如果你自己做Class1.java,编译成Class1.class然后删除Class1.java,当你写Class2.java和引用一些方法的时候Class1,Semantic能找到吗?
  3. 你试过JDEE吗?
于 2010-11-16T08:40:28.060 回答