Java 如何在emacs语义中包含标准jdk库?

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))

我使用的是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))
(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,但我的目标是在增加复杂性之前先理解语义。我想这主要是因为我不知道语义是如何工作的,所以我会继续挖掘,但谢谢你的回答!