torutkのブログ

ソフトウェア・エンジニアのブログ

JDEE試行錯誤メモ(bshを起動するJVM)

JDK1.6のプログラミングをする際に、bshもJDK1.6を指して欲しいのだが、なぜかJDK1.5をbshが使おうとしてしまう。

.emacsに、jde-jdkおよびjde-jdk-registryを記述している場合に発生するようだ。
プロジェクトファイルに保存するようにするとOKなのが不可思議。

解析メモ

bshは、C-c C-v C-k(jde-bsh-run t) で実行される。まず、jde-bsh-runの定義を調べると

;; jde.el
(defun jde-bsh-run ()
   (interactive)
   (bsh-launch (oref 'jde-bsh the-bsh) t)

となっている。次に、bsh-launchの定義を調べると

;; jde.el
(defmethod bsh-launch :BEFORE ((this jde-bsh) &optional display-buffer)
  (let* ((project-ant-home
         ...
     (oset this vm (oref (jde-run-get-vm) :path))
         ...

続いて、jde-run-get-vmの定義を調べると

;; jde-run.el
(defun jde-run-get-vm ()
  (let* ((jdk-version (jde-java-version))
         (vm
          (find-if
           (lambda (vm-x)
             (string-match
              (oref vm-x :version)
              (if jdk-version jdk-version "")))
           jde-run-virtual-machines)))
           ...

scratchバッファでjde-java-versionを評価すると"1.5.0"となっている。jde-java-versionの定義は、

;; jde.el
(defun jde-java-version ()
  (let ((java-version (if jde-jdk (car jde-jdk)
                        (getenv
                         (nth 0 jde-java-environment-variables)))))
    (if (not-java-version)
    ...

だが、jde-jdkを評価すると"1.5.0"となっている。jde-jdkはcustomize-variableなのだが、.emacsで定義するとどうも不都合があるようだ。