CLOVER🍀

That was when it all began.

Mavenでリポジトリへの接続タイムアウトを設定する

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ですね。

  • $M2_HOME/conf/settings.xml
  • ${user.home}/.m2/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