前エントリー「Eclipse 3.5 + Ant + Javadoc 文字化け、コンソール停止(最終章)」の対応では MergeDoc Project の Pleiades には効果がない。確認したのは以下のバージョン。
調べたところ、文字化け対応用にコンソールの文字コードを環境に合わせて変更する対応がされているようで、そのため本家と同じ対応をしても強制的にエンコーディングが変更されてしまい、うまくいかないようだ。
この問題は Ant の出力エンコーディングの調整ではなく、javadoc.exe の出力エンコーディングを変更しなくてはならないところがめんどくさい。そして、Ant が javadoc.exe の出力を受け取ってコンソール出力処理する部分で StringIndexOutOfBoundsException や NumberFormatException が発生して落ちている。
詳しくは調べていないが、3.5 Galileo からは UTF-8 を期待して動いている箇所があるのではないだろうか。環境に合わせたエンコーディングでは正しく処理できないようだ。
試行錯誤したのだが(私の技量では)スマートな解決方法がないのでお勧めな方法ではないのだが、困っている人向けにとりあえずの方法をメモしておきます。
例によって前置き長いですね。
対応は2ステップ
- Pleiadesのエンコーディング補正を停止させる
- 本家と同じ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 タスクを実行した場合の暫定対応です。
その他のタスクには効果ありません。
コメント