He intentado hacer funcionar mi configuración de Emacs para el desarrollo de Java. Es bastante bueno: tengo el modo malabar funcionando y tengo GNU Global trabajando para la navegación de etiquetas. Lo único que no puedo hacer es obtener semántica para usar gnu global correctamente. Ninguna de mis importaciones se encuentra.Configuración de Emacs 23.4, CEDET 1.1 y SemanticDB para usar GNU Global en Windows
En primer lugar, este es un proyecto de varios módulos de Maven con todas las fuentes extraídas de la carpeta del proyecto raíz de nivel superior. Todos los otros proyectos están debajo de este en el árbol de directorios. Hay una única base de datos GTAGS en esta carpeta raíz que cubre todo.
cosas que funcionan:
M-x gtags-find-tag RET symbol RET
funciona bien, por lo que la base de datos es buena y global puede encontrarlo.M-x cedet-gnu-global-version-check
funciona e informa que mi versión es buena.M-x cedet-gnu-global-expand-filename
funcionaM-x semanticdb-find-test-translate-path
muestra una "GNU global de búsqueda de tabla", cuando en un buffer de Java- tengo la carpeta de origen JDK configurar como un sistema incluyo carpeta, por lo que las importaciones de núcleo de Java se analizan correctamente.
Mi config java es el siguiente (inicialización CEDET es anterior en el archivo):
(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)))
Por favor, mira a mi [respuesta a la pregunta similares] [1] - que describe cómo utilizar javap + Semántica [1]: http://stackoverflow.com/questions/4173737/how- to-include-standard-jdk-library-in-emacs-semantic/10510736 # 10510736 –
Gracias, pero ya lo he visto y lo he configurado. El problema es que Semántica no sabe dónde están los otros archivos fuente. Como está en un submódulo Maven anidado, los archivos fuente estarán en la carpeta de algún otro proyecto.Si no he construido ese proyecto, ni siquiera habrá archivos de clase para que javap los procese. En algunos casos, los archivos de clase están en un contenedor en algún lugar de mi repositorio Maven local. El uso de la base de datos global de GNU permitirá al menos que SemanticDB encuentre y analice los archivos desconocidos de los otros proyectos de submódulos utilizando la base de datos de etiquetas. – DuckPuppy
Pruebe la versión más reciente de CEDET (de bzr): se extendió para que funcione con Maven, además de que se realizaron algunas correcciones relacionadas con Java, por lo que obtendrá nombres completados también para bibliotecas de terceros –