2012-05-16 4 views
5

Próbowałem zainstalować moją konfigurację Emacsa do pracy w Javie. Jest całkiem niezła - dostałem pracę w trybie malabar i działam w GNU Global, pracując nad przeglądaniem tagów. Jedną rzeczą, której nie mogę uzyskać, jest uzyskanie semanticdb, aby poprawnie używać gnu global. Nie znaleziono żadnego z moich importów.Konfigurowanie Emacsa 23.4, CEDET 1.1 i SemanticDB do korzystania z GNU Global na Windows

Po pierwsze, jest to wielomodułowy projekt Maven ze wszystkimi źródłami wyrejestrowanymi z głównego folderu projektu głównego. Wszystkie inne projekty znajdują się poniżej tego w drzewie katalogów. W tym folderze głównym znajduje się jedna baza danych GTAGS.

rzeczy, które działają:

  • M-x gtags-find-tag RET symbol RET działa dobrze, więc baza jest dobra i globalna może go znaleźć.
  • M-x cedet-gnu-global-version-check działa i zgłasza, że ​​moja wersja jest dobra.
  • M-x cedet-gnu-global-expand-filename działa
  • M-x semanticdb-find-test-translate-path pokazuje „GNU Global Search Table”, gdy w buforze Java
  • Mam folder źródłowy JDK ustawiony jako systemu to folder, więc rdzeń import Java są odpowiednio przeanalizowany.

Mój java config wygląda następująco (inicjalizacji cedet jest wcześniej w pliku):

(add-local-load-path "malabar/lisp") 

(require 'malabar-mode) 
(setq malabar-groovy-lib-dir (concat emacs-local-site-lisp "malabar/lib")) 
(add-to-list 'auto-mode-alist '("\\.java\\'" . malabar-mode)) 

;; enable semanticdb support for gnu global 
(when (cedet-gnu-global-version-check t) 
    (semanticdb-enable-gnu-global-databases 'java-mode)) 

(add-hook 'java-mode-hook 
    (lambda() 
    (gtags-mode 1))) 

(add-hook 'java-mode-hook 'flymake-mode-on) 

(defun my-java-flymake-init() 
    (list "javac" (list (flymake-init-create-temp-buffer-copy 
        'flymake-create-temp-with-folder-structure)))) 

(add-to-list 'flymake-allowed-file-name-masks 
     '("\\.java$" my-java-flymake-init flymake-simple-cleanup)) 

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

Proszę spojrzeć na moje [odpowiedź na podobne pytanie] [1] - to opisuje jak używać javap + semantyczna [1]: http://stackoverflow.com/questions/4173737/how- to-include-standard-jdk-biblioteka-w-emacs-semantic/10510736 # 10510736 –

+1

Dzięki, ale już to widziałem i ustawiłem. Problem polega na tym, że Semantic nie wie, gdzie znajdują się inne pliki źródłowe. Ponieważ znajduje się on w zagnieżdżonym submodule Mavena, pliki źródłowe będą znajdować się w folderze innego projektu.Jeśli nie zbudowałem tego projektu, nie będzie nawet plików klas dla javap do przetworzenia. W niektórych przypadkach pliki klas są w słoiku gdzieś w moim lokalnym repozytorium maven. Używanie globalnej bazy danych GNU umożliwi co najmniej SemanticDB znalezienie i przeanalizowanie nieznanych plików z innych projektów częściowych przy użyciu bazy danych znaczników. – DuckPuppy

+0

Proszę wypróbować najnowszą wersję CEDET (z bzr) - została ona rozszerzona do pracy z Maven, a także wprowadzono pewne poprawki związane z Javą, więc otrzymasz uzupełnienie nazw również dla bibliotek 3rd party –

Odpowiedz

3

Odpowiedź jest związane, jak Twoje projekty są ustawione, a jeśli używasz Ede. EDE to Emacs Development Envornment (gra na IDE) i to, jak CEDET śledzi, które pliki należą do twojego projektu. Ogranicznik ten jest związany zarówno z wydajnością (wyszukiwaniem mniejszych elementów), jak i zapobieganiem przeplataniem konfiguracji z jednego projektu do drugiego.

Niestety, Maven nie jest jeszcze obsługiwany w CEDET/EDE. Możesz jednak po prostu oznaczyć katalog główny projektu i domyślam się, że ede-cpp-root (zwykle używany w projektach C++) może wystarczyć. Prawdopodobnie powinniśmy stworzyć wersję java tego.

W każdym razie EDE można skonfigurować tak, aby używało GNU Global do szybkiego znajdowania plików (patrz podręcznik dla wsparcia GNU Global z EDE i Semantic), ale plik GTAGS musi znajdować się w katalogu głównym projektu.

Jeśli jesteś w projekcie-1 i spodziewasz się przeskoczyć do plików w projekcie-2, a GTAGS jest katalogiem głównym projektu-1, to nie zadziała. Musisz przenieść swój plik GTAGS i projekt EDE do wspólnego katalogu nadrzędnego.

W obecnej konfiguracji, jeśli wszystko znajduje się już we wspólnym katalogu z GTAGS, jest bardziej prawdopodobne, że wystarczy skonfigurować projekt EDE, aby zawiesić funkcję wyszukiwania plików GTAGS.

Istnieją wątki w archiwum listy mailingowej cedet-devel kilka osób, które odniosły sukces w tym.

+0

Tak więc projekt EDE byłby wymagane do SemanticDB do korzystania z globalnej bazy danych GNU? Pomyślałem, że włączenie obsługi GNU Global dla SemanticDB będzie po prostu korzystało z domyślnej strategii wyszukiwania globalnego GNU do znajdowania plików znaczników i korzystania z nich. – DuckPuppy

+0

Jeśli plik źródłowy znajduje się w tym samym katalogu co plik GTAGS, można go użyć do znalezienia innych tagów. Jeśli chcesz użyć GTAGS do znalezienia lokalizacji plików (takich jak pliki dołączane), która jest częścią EDE, a nie SemanticDB. SemanticDB polega na EDE, aby znaleźć pliki, aby mogły być indeksowane i wyszukiwane symbole. – Eric

+0

Muszę zapytać - jaki jest cel baz danych semanticdb-enable-gnu-global? – DuckPuppy

Powiązane problemy