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łaM-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)))
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 –
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
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 –