5

Java開発用のEmacs構成を機能させようとしています。それはかなり良いです - 私は malabar-mode が動作し、タグブラウジングのために GNU Global が動作しています。私がうまくいかないことの1つは、セマンティックDBにgnu globalを適切に使用させることです。私のインポートが見つかりません。

まず、これはすべてのソースが最上位のルート プロジェクト フォルダーからチェックアウトされた Maven マルチモジュール プロジェクトです。他のすべてのプロジェクトは、ディレクトリ ツリーでこのプロジェクトの下にあります。このルート フォルダーには、すべてをカバーする単一の GTAGS データベースがあります。

機能するもの:

  • M-x gtags-find-tag RET symbol RET正常に動作するため、データベースは良好であり、グローバルで見つけることができます。
  • M-x cedet-gnu-global-version-check動作し、私のバージョンが良好であると報告します。
  • M-x cedet-gnu-global-expand-filename作品
  • M-x semanticdb-find-test-translate-pathJava バッファにある場合の「GNU グローバル検索テーブル」を示します
  • JDK ソース フォルダーをシステム インクルード フォルダーとして設定しているため、コア Java インポートは適切に解析されます。

私のJava設定は次のとおりです(cedeの初期化はファイルの前にあります):

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

1 に答える 1

3

答えは、プロジェクトの設定方法と、EDE を使用しているかどうかに関連しています。EDE は Emacs Development Envornment (IDE で再生) であり、CEDET がプロジェクトに属するファイルを追跡する方法です。そのリミッターは、パフォーマンス (より少ないものを検索する) と、あるプロジェクトの構成が別のプロジェクトに流れ込むのを防ぐことの両方に関連しています。

残念ながら、Maven はまだ CEDET/EDE でサポートされていません。ただし、プロジェクトのルートにタグを付けることができます。ede-cpp-root (通常は C++ プロジェクトで使用されます) で十分かもしれません。おそらくそれの Java バージョンを作成する必要があります。

とにかく、EDE は GNU グローバルを使用してファイルをすばやく検索するように構成できます (EDE とセマンティックの両方での GNU グローバル サポートのマニュアルを参照してください) が、GTAGS ファイルはプロジェクト ルートにある必要があります。

プロジェクト 1 にいて、プロジェクト 2 のファイルにジャンプすることを期待していて、GTAGS がプロジェクト 1 のルートになっている場合、それは機能しません。GTAGS ファイルと EDE プロジェクトを共通の親ディレクトリに移動する必要があります。

現在のセットアップで、すべてが既に GTAGS と共通のディレクトリにある場合は、EDE プロジェクトをセットアップして GTAGS ファイル検索機能を停止する必要がある可能性が高くなります。

cedet-devel メーリング リストのアーカイブには、これである程度の成功を収めた 2 人の人々のスレッドがあります。

于 2012-05-24T23:15:34.910 に答える