Hatena::ブログ(Diary)

矢野勉のはてな日記 このページをアンテナに追加 RSSフィード Twitter

2006 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 |

2009-07-20

Mac OS XのJava 6とNetBeansのmercurialサポートを組み合わせる方法

f:id:t_yano:20090720033006p:image


gitが大流行の昨今、私はなんとなくコマンドの使い方とかでmercurialのほうが好きだったりします。


で、NetBeansにはCVS, Subversionに並んで、初期状態からmercurialのサポートが組み込まれています。Sunが提供している公開リポジトリ「Kenai」を標準サポートしているので、それとの兼ね合いもあってデフォルトで組み込まれてるんでしょう。


ところが、Mac OS XJava 6とNetBeans+mercurialを組み合わせると、ちょっと困った問題にぶち当たります。

ログで日本語が使えないんですね...


「X-MAC-JAPANESEなんてエンコーディング知りません」というような意味の英語メッセージが表示されて、コミットが失敗します。

というのは、Mac OS XJava 6は、なぜか標準エンコーディングShift_JISになっているのです。「X-MAC-JAPANESE」というのは、Macに少し特化したShift_JISですね。Java 5ではデフォルトエンコーディングUTF-8だったのですが、なんでJava 6でShift_JISになったのか...


NetBeansJava 6で起動すると、NetBeansが認識するデフォルトエンコーディングShift_JISになります。UTF-8ならば何事もなくコミットできるのですが、X-MAC-JAPANESEなんてエンコーディングはわからないのでエラーになってるわけです。


mercurialのログ・エンコーディングは、環境変数HGENCODINGで決定されるので、これを設定してやれば解決なんですが、どこに設定するか、というのが問題です。うまくNetBeansに認識させないといけない。.bashrcとかに書いても、NetBeansターミナルから起動する訳じゃないので意味がない。


で、MacNetBeansアプリケーション・パッケージ化されてはいるものの、パッケージの中を見ると、jar版のNetBeansと同じです。FinderNetBeansアイコンを右クリックして「パッケージの内容を表示」を選択。「Contents/Resources/NetBeans/bin」の下に「netbeans」という名前のシェルスクリプトが入っています。


このシェルスクリプトを修正し、起動前に環境変数HGENCODINGを設定してやれば、NetBeansにだけHGENCODINGを設定することができます。次のように、netbeansファイル末尾の起動処理直前にexport命令を追加してやります。


export HGENCODING="shift_jis"

# in case of macosx, the apple.laf.useScreenMenuBar property should be ideally in the Info.plist file
# but it doesn't get propagated into the executed java VM. 
case "`uname`" in
    Darwin*)
        eval launchNbexec \
            --jdkhome '"$netbeans_jdkhome"' \
            -J-Dcom.apple.mrj.application.apple.menu.about.name=NetBeans \
            -J-Xdock:name=NetBeans \
            '"-J-Xdock:icon=$progdir/../nb6.7/netbeans.icns"' \
            --branding nb \
            --clusters '"$netbeans_clusters"' \
            -J-Dnetbeans.importclass=org.netbeans.upgrade.AutoUpgrade \
            -J-Dnetbeans.accept_license_class=org.netbeans.license.AcceptLicense \
            ${netbeans_default_options} \
            '"$@"'
        ;;
    *)
        eval launchNbexec \
            --jdkhome '"$netbeans_jdkhome"' \
            --branding nb \
            --clusters '"$netbeans_clusters"' \
            -J-Dnetbeans.importclass=org.netbeans.upgrade.AutoUpgrade \
            -J-Dnetbeans.accept_license_class=org.netbeans.license.AcceptLicense \
            ${netbeans_default_options} \
            '"$@"'
        ;;
esac

これでMac+Java 6+NetBeans+mercurialでも日本語ログメッセージでコミットできるようになります。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/t_yano/20090720/1248028284