Pleiades Eclipse 3.5 + Ant + Javadoc コンソール停止問題の解決

前エントリー「Eclipse 3.5 + Ant + Javadoc 文字化け、コンソール停止(最終章)」の対応では MergeDoc Project の Pleiades には効果がない。確認したのは以下のバージョン。

調べたところ、文字化け対応用にコンソールの文字コードを環境に合わせて変更する対応がされているようで、そのため本家と同じ対応をしても強制的にエンコーディングが変更されてしまい、うまくいかないようだ。
この問題は Ant の出力エンコーディングの調整ではなく、javadoc.exe の出力エンコーディングを変更しなくてはならないところがめんどくさい。そして、Ant が javadoc.exe の出力を受け取ってコンソール出力処理する部分で StringIndexOutOfBoundsException や NumberFormatException が発生して落ちている。

詳しくは調べていないが、3.5 Galileo からは UTF-8 を期待して動いている箇所があるのではないだろうか。環境に合わせたエンコーディングでは正しく処理できないようだ。
試行錯誤したのだが(私の技量では)スマートな解決方法がないのでお勧めな方法ではないのだが、困っている人向けにとりあえずの方法をメモしておきます。

例によって前置き長いですね。

対応は2ステップ

  1. Pleiadesのエンコーディング補正を停止させる
  2. 本家と同じbuild.xmlの対応を行う

Pleiadesのエンコーディング補正を停止させる

該当するPointCutを削除又はコメントアウトするか、UTF-8に固定する。
前者は本家と同じ状態にする方法。後者はコンソールエンコードをUTF-8に固定する意味になる。

ファイル eclipse/dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config.xml の
1507 行からの 「エンコーディング設定 (before)」 の部分がまるまる削除します。コメントアウトでも良いです。

<!-- エンコーディング設定 (before) -->
<pointCut editPoint="execution" timing="before">
     <advice><![CDATA[
        org.eclipse.debug.core.ILaunchConfigurationWorkingCopy c = (org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) $1;
	String vmArgs = c.getAttribute("org.eclipse.jdt.launching.VM_ARGUMENTS", "");
	String newArgs = "-Dfile.encoding=" + org.apache.commons.lang.SystemUtils.FILE_ENCODING + " " + vmArgs;
	c.setAttribute("org.eclipse.jdt.launching.VM_ARGUMENTS", newArgs);
     ]]></advice>
     <!-- Ant コンソール・エンコーディング 2009.03.02 -->
     <jointPoint className="org.eclipse.ant.internal.ui.launchConfigurations.AntJavaLaunchDelegate"
            methodName="preLaunchCheck"/>
</pointCut>

変更後の最初の起動は “eclipse.exe -clean.cmd” などを使って -clean 起動してください。

本家と同じbuild.xmlの対応を行う

Eclipse 3.5 + Ant + Javadoc 文字化け、コンソール停止(最終章)」を参考に Javadoc タスクに
  additionalparam=”-J-Dfile.encoding=UTF-8″
を追加し Javadoc をUTF-8化、かつコンソールを UTF-8 で実行する。

以上はあくまで Ant から Javadoc タスクを実行した場合の暫定対応です。
その他のタスクには効果ありません。

コメントを残す

メールアドレスが公開されることはありません。