2010-11-13 32 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完成 - 請在那裏查看更多詳情。