Mavenを使っていると、自分の仕事ではどこかで出くわすのが「インターネットにつながっていない時の動きが微妙」というところ。
最終的にビルド環境をインターネットにつなげられないところに構築することが多くて、そういう時はMavenリポジトリを自分で立てます。もちろん、自分で立てたリポジトリだけでビルドは完結できるようにしています。
なんですが、それでもやっぱりMavenがCentralリポジトリとかを見にいこうとするケースがあるわけです。
で、つながらないCentralリポジトリとかにアクセスしようとして、タイムアウトを繰り返すのを見ることになります。延々と。
情報: I/O exception (java.net.NoRouteToHostException) caught when connecting to the target host: ホストへの経路がありません 6 21, 2013 9:31:05 午前 org.apache.maven.wagon.providers.http.httpclient.impl.client.DefaultRequestDirector tryConnect 情報: Retrying connect
みたいな感じで。お願いだから、リトライしないで…。120%失敗するから…。
なので、Mavenの設定にこんなのを加えると、目的のサーバに接続できない時にとっとと諦めてもらえます。
*とりあえず、Maven 3では大丈夫でした
settings.xmlですね。
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>central</id> <configuration> <httpConfiguration> <all> <connectionTimeout>500</connectionTimeout> </all> </httpConfiguration> </configuration> </server> </servers> </settings>
この例だと、Centralリポジトリに接続できない場合、500msecでタイムアウトします。
ここで出てくる「all」とか何だよって話ですが、これらはそれぞれ
- httpConfiguration -> org.apache.maven.wagon.shared.http4.AbstractHttpClientWagonのメソッド
- all -> org.apache.maven.wagon.shared.http4.HttpConfigurationのメソッド
- connectionTimeout -> org.apache.maven.wagon.shared.http4.HttpMethodConfigurationのメソッド
となります。
つまり、Wagonの設定をしているわけですね。
「all」じゃなくて「get」とか「put」とか、その他もっと設定したい場合は、各クラスのAPIを見ればよろしいかと。
参考)
http://maven.apache.org/wagon/apidocs/org/apache/maven/wagon/shared/http4/AbstractHttpClientWagon.html
http://maven.apache.org/wagon/apidocs/org/apache/maven/wagon/shared/http4/HttpConfiguration.html
http://maven.apache.org/wagon/apidocs/org/apache/maven/wagon/shared/http4/HttpMethodConfiguration.html