Eclipse の Pleiades と ant の組み合わせは要注意(不都合)

Pleiades でドツボに陥ったことがあったのでそのときのメモ

Pleiades http://mergedoc.sourceforge.jp/

一年ぐらい前ですが、 知り合いの環境で Hibernate の hbm2ddl を
eclipse から ant 起動したときにうまく動かない不都合に見舞われました。
(途中まで DDL が出来上がったりするのですが完走せずに途中で終了している状態)

 

  • JNI が含まれているとは思えなかったが 32bit と 64bit の両方で試してみたが再現せず。
  • リポジトリからクリーンチェックアウトしても再現せず
  • eclipse を再インストールしても再現せず

で、少し途方にくれました。
仕方がないので ant を外部起動すると問題なく完走するので一時的な対処として採用。

 

後日、環境の違いなどを調べていくと

  • 知り合いが hbm2ddl を実行して完走したときは
    DDL の文字コードが MS932 になっている
  • 自分の手元では UTF-8 で出力されている
    (プロジェクトの文字コードは UTF-8)

違いはどこだ???

 

で、知り合いの eclipse をよく見てみると….日本語になっとるw
しっかし NLpack ぐらいではこんな事が起こらないと思うが
eclipse の日本語化を調べてみると…

Pleiades ?
いつの間にこんなものが…
Eclipse 2 系列のころは NLpack しかなかったので盲点だった orz

で、詳細を見てみると動的に日本語化だと!?
あ~、これちゃうかと思って自分の手元に Pleiades で日本語化している Eclipse を
用意して試すと……再現したぜ!!

とはいえ、日本語化禁止にはできないので、
日本語化の他の方法はないかと調べてみたところ NLpack 形式まだあるやん。

なになに、NLpack 形式は日本語化が一回り遅れて日本語化される?
まあ、そこはすべて英語で表示されるよりましやろ…

eclipse から Hibernate の hbm2ddl を ant 起動させたかったので
NLpack 形式を使用してもらうようにお願いしました。

 

が、一年以上前の話です。
今になって考えると、 Java バイナリを動的に書き換えて
JavaVM の文字コードを MS932 に強制しているんだろうと思います。

その結果、外部起動する ant に影響が出て
Hibernate の hbm2ddl の出力やメッセージが MS932 になるので
パイプ(外部起動した ant からの出力)を受け取るところか、hbm2ddl 自体が
ズッコケていたんだろうとは思います。

 

 

みつけたぞ!

http://mergedoc.sourceforge.jp/pleiades_distros3.4.html

Ant のコンソール・エンコーディング

Windows では Ant のコンソール・エンコーディングを MS932 にしないと出力に日本語が含まれる場合、何も出力されなくなります。 下記にコンソール・エンコーディングを指定しなかった場合のデフォルトを示します。

  • Eclipse 3.3 以前: OS デフォルト (Windows では MS932)
  • Eclipse 3.4.0、3.4.1: ワークスペースのエンコーディング設定
  • Eclipse 3.4.2: プロジェクトのエンコーディング設定

Eclipse 3.3 以前は問題ありませんでしたが、3.4 以降、外部ツール構成 > 共通タブ > コンソール・エンコーディング を構成ごとに MS932 にする必要があります。Eclipse 3.4.1 までは、ワークスペースを MS932、プロジェクトを固有のエンコーディング設定にすることで個別設定を回避できましたが、3.4.2 ではプロジェクトが MS932 以外だった場合、個別に設定する以外に方法がなくなってしまいました。これでは面倒すぎるため、Pleiades では Ant の外部ツール構成に限り、コンソール・エンコーディングの指定がない場合は OS デフォルトのエンコーディングで動作するように拡張しています。

 

This entry was posted in Ant, Eclipse, IDE. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>