Java: Eclipse 3.5 (Galileo) がネットにつながらない場合の対処方法

Eclipse 3.5 (Galileo) がリリースされたが、環境によっては、プロキシの設定がうまくいかないためにインターネットに出ることができないことがあるようだ。僕が試した環境でも、

  • Help メニューから更新のチェックをしようとするとエラー
  • プラグインを更新サイトからインストールしようとするとエラー

といったことが起きた。ちょっとだけ調べて、なんとか接続できるようになったので、参考にした情報をまとめてメモしておく。

[2010-03-06 追記] Eclipse 3.5.2 (Galileo SR2) がリリースされた。このバージョンでは、以下で説明する設定変更を行わなくても、NTLM 認証の必要なプロキシを通過することができる。以前のバージョンを使っていて「ネットにつながらない!」という方は、お手元の Eclipse が古いバージョンでないか確認してみるといいかも。

予習

その前に、Galileo の変更点のうち、今回の話に関係あるところをおさらいしておく。

Galileo ではネットワークの設定が改良され、プロキシの設定が "Native"、"Manual"、"Direct" からの選択方式になった。デフォルトの Native では (Windows の場合) インターネットオプションの設定を使ってくれるので、多くの場合は、改めて設定しなくてもインターネットに接続することができる。Manual に切り替えた場合は HTTP、HTTPS、SOCKS のそれぞれについて手動でプロキシを設定でき、Direct ではプロキシ設定が無効になる。

上の画像 (プロキシ設定なしの環境で撮影したもの) では一覧に Manual しか出ていないが、プロキシ設定のしてある環境では Provider が Native のものも一覧に表示される。上の "Active Provider" で Native と Manual を切り替えると、一覧のうち該当する行だけ左端のチェックボックスにチェックが入る (ユーザがチェックボックスを押して有効・無効を切り替えることはできない)。

また、内部的にも変更が行われている。Java 実行環境のネットワーク機能を使っていた Eclipse 3.4 までと異なり、Galileo では Apache HttpClient 3.1 を使って HTTP 通信が行われるようになった (デフォルトの場合)。

Native 選択時のパスワード設定について

まずはジャブ程度のバグから。

プロキシの一覧で、どれかひとつ選択して Edit を押すか、行をダブルクリックすると、プロキシ認証の詳細設定を行うことができる。ホスト名、ポート、認証が必要かどうか、必要な場合にはユーザ名とパスワードが入力できる。

……というのはもちろん Manual についての話で、Native の行は編集できない。Native の行は、インターネットオプションの設定内容が見えているだけで、実際には Eclipse が管理しているわけではないからだ。

…………のはずなのだが、現在は「Native の行でも、ダブルクリックすると詳細ダイアログが開いてしまう」というバグがある。開いたダイアログを見ると、ユーザ名とパスワードが入力できそうに見えるのだが、OK を押しても反映されないのでご注意ください。

[Net] Should be impossible to edit native proxy setting by double-clicking the entry
https://bugs.eclipse.org/bugs/show_bug.cgi?id=281628

NTLMv2 を使用している環境でプロキシ認証に失敗する現象

[Net] You can't update Eclipse 3.5 behind the proxy
https://bugs.eclipse.org/bugs/show_bug.cgi?id=281472

認証が必要なプロキシを使用している場合、Galileo で更新サイトからプラグインをインストールしようとすると通信に失敗し、HTTP Proxy Authorization Required というエラーが発生する。試してないけど、インターネット経由で CVSSubversion などのリポジトリに接続するときにも失敗するかもしれない。

NTLMv2 は、プロキシ認証に使われている方式のひとつ。最近では他の方式に取って変わられつつあるが、何年か前に構築されたようなネットワークであれば、まだまだ現役で使われている。Eclipse もこれまで NTLMv2 に対応していたため、ネットワークの設定を行えば、プロキシを越えてインターネットへ接続できていた。

ところが、Galileo で使用されている HttpClient 3.1 は、NTLMv2 に対応していない。実は一つ前の 3.0 までは対応していたんだけど、NTLMv2 のライセンスは Microsoft が持っていることから「ライセンス契約をせずに実装しちゃうのはマズかったかも」ということで 3.1 からは対応が外されたらしい。したがって、HttpClient 3.1 を使用している Galileo でも、そのままでは NTLMv2 を使用することができない。

公式に紹介されている回避策として、Eclipse 3.4 までと同じように Java 実行環境のネットワーク機能を使うように戻すことができる。

ECF Filetransfer Support for NTLMv2 Proxies
http://wiki.eclipse.org/ECF_Filetransfer_Support_for_NTLMv2_Proxies

この記事によれば、Eclipse 起動時のシステムプロパティに以下を指定すればいいらしい。一番簡単なのは、Galileo をインストールしたディレクトリにある eclipse.ini の末尾に以下の内容を追加することだろう。

-Dorg.eclipse.ecf.provider.filetransfer.excludeContributors=org.eclipse.ecf.provider.filetransfer.httpclient
-Dhttp.proxyPort=8080
-Dhttp.proxyHost=myproxy
-Dhttp.proxyUser=mydomain\myusername
-Dhttp.proxyPassword=mypassword
-Dhttp.nonProxyHosts=localhost|127.0.0.1

1 行目は HttpClient を使わないようにする設定で、2 行目以降はプロキシの設定なので、自分の環境に合わせて書き換える必要がある。パスワードを書かなければいけないので、やや危険。

また、下記ページのコメントによれば、NTLMv2 と BASIC 認証の両方をサポートしているプロキシの場合、HttpClient を有効にしたままでも、ユーザ名を「mydomain\myusername」の形式で入力すると通ることがあるようだ。

[Net] HTTP Proxy Authentication Required
https://bugs.eclipse.org/bugs/show_bug.cgi?id=281384

[2010-03-06 追記] 冒頭にも追記した通り、Eclipse 3.5.2 (Galileo SR2) では、上記の設定変更を行わなくても NTLM 認証の必要なプロキシを通過できるようになった。プロキシの設定をデフォルトの "Native" にしておけば、自動的にインターネットオプションの設定を使って接続してくれる。

SOCKS 非対応のプロキシを使っている環境で接続に失敗する現象

先ほどのスクリーンショットを見ていただくとわかるとおり、Manual の設定対象は HTTP、HTTPS、SOCKS の 3 種類に分かれている。たいていの環境ではプロキシが 1 台だと思うので、全部に同じのを入れればいいんでしょ、となりがちだが、実は違う。

プロキシが HTTP/HTTPS にしか対応していない場合でも、SOCKS のところにプロキシ設定が入力されていると、Galileo はそちらを使おうとしてしまい、接続できなくなることがあるようだ。

解決するには、SOCKS の行を選択して、右側の Clear ボタンを押す (もちろんその後 Apply を押すのも忘れずに)。