2010-11-13 40 views
6

我正在使用Emacs 23.2。下面是我如何加载语义:如何在emacs语义中包含标准的jdk库?

(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,则获得Cannot find types for 'String blah'

有谁知道如何将jdk库加载到semanticdb中,以便标准对象类型(如String)的代码完成可用?

回答

0

有段时间没有尝试过CEDET,所以我会盲目地提出几个问题,以便深入了解您的问题。

  1. 我假定JDK在你的路上,Emacs能找到它吗?
  2. 由于JDK基本上是一堆没有源代码的jar文件,可以语义解析吗?例如:如果你自己制作Class1.java,编译它到Class1.class,然后删除Class1.java,当你编写Class2.java并引用Class1的一些方法时,是否可以通过语义找到它们?
  3. 你试过JDEE
+0

是的,jdk在我的路上。我在os x jdk里面找到了src.jar,甚至尝试了解压缩并访问String.java。它似乎语义分析String.java到semanticdb,但是当我回到我的自定义Java项目中,似乎无法找到字符串的方法。我看了JDEE,但是我的目标是在增加更多复杂性之前首先理解语义。我认为这主要是我对语义工作的无知,所以我会继续挖掘,但是谢谢你的回应! – Upgradingdave 2010-11-17 18:51:08

1

如果解压缩src.zip是在$ JAVA_HOME发现你可以添加一个挂钩,你的java模式是这样的:

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

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

3

从CEDET 1.1开始,Semantic支持通过javap检索类信息。你需要设置cedet-java-jdk-root变量JAVA_HOME,并填充semanticdb-javap-classpath变量与Java的系统罐子的路径列表,像rt.jar

an article(在俄罗斯,但你可以得到translation)有关设置语义了对Java完成 - 请在那里查看更多详情。