如何在emacs语义中包含标准的jdk库?
我正在使用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库。 例如,如果我在String变量上尝试使用semantic-ia-complete-symbol
,我就会Cannot find types for 'String blah'
。
有谁知道如何将jdk库加载到semanticdb中,因此可以使用像String这样的标准对象类型的代码完成?
从CEDET 1.1开始,Semantic支持通过javap检索类信息。 您需要将cedet-java-jdk-root
变量设置为JAVA_HOME,并使用Java系统jar的路径列表填充semanticdb-javap-classpath
变量,如rt.jar
等。
有一篇文章 (俄文,但你可以得到翻译 )关于为Java完成设置语义 – 请查看更多详细信息。
如果你解压缩在$ 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解决了我的问题。
有一段时间没有尝试过CEDET,所以我会盲目地问几个问题,这些问题可能会让你深入了解你的问题。
- 我假设JDK在你的道路上,Emacs可以找到它吗?
- 既然JDK基本上是一堆没有源代码的jar文件,可以用语义解析吗? 示例:如果您创建自己的
Class1.java
,将其编译为Class1.class
然后删除Class1.java
,当您编写Class2.java
并从Class1
引用某些方法时,Semantic可以找到它们吗? - 你试过JDEE吗?