Java 如何在emacs语义中包含标准jdk库?
我使用的是Emacs23.2。下面是我加载语义的方式:Java 如何在emacs语义中包含标准jdk库?,java,emacs,emacs-semantic,Java,Emacs,Emacs Semantic,我使用的是Emacs23.2。下面是我加载语义的方式: (setq semantic-default-submodes '(global-semantic-idle-scheduler-mode global-semanticdb-minor-mode global-semantic-idle-summary-mode global-semantic-mru-bookmark-mode))
(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库具有语义意识。例如,如果我尝试对字符串变量执行语义ia complete symbol
,我会发现找不到“String blah”的类型
有人知道如何将jdk库加载到semanticdb中,这样就可以使用标准对象类型(如String)的代码完成了吗?有一段时间没有尝试过CEDET,所以我会盲目地问一些问题,这些问题可能会帮助您深入了解问题
我假设JDK在您的路径上,Emacs可以找到它
既然JDK基本上是一堆没有源代码的jar文件,那么语义能解析它吗?示例:如果您自己制作Class1.java
,将其编译为Class1.class
,然后删除Class1.java
,当您编写Class2.java
并引用Class1
中的一些方法时,语义可以找到它们吗
你试过了吗
如果您解压缩$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 1.1开始,Semantic支持通过javap检索类信息。您需要设置cedet java jdk root
变量到java_HOME,并用java系统jar的路径列表填充semanticdb javap classpath
变量,如rt.jar
,等等
关于为Java完成设置语义(俄语,但您可以得到),请查看那里的详细信息。是的,jdk正在我的道路上。我在OSXJDK中找到了src.jar,甚至尝试提取和访问String.java。它似乎将String.java解析为semanticdb,但当我回到自定义java项目中时,它似乎找不到字符串的方法。我看过JDEE,但我的目标是在增加复杂性之前先理解语义。我想这主要是因为我不知道语义是如何工作的,所以我会继续挖掘,但谢谢你的回答!