雑多に技術メモと他色々

主に自分用な技術メモが多くなる気がする。他色々が書かれるかどうかは不明。

Mavenリポジトリへproxy経由でアクセスする

Proxy通さないとインターネット接続できない環境。
Mavenリポジトリアクセスするための設定メモ。

概略

やりたいこと

社内ネットワークなどから外部サーバ接続にはproxyを通す必要がある。
そんな環境でCentralなMavenリポジトリにつなぐためにproxy通したい場合はどうするのって話。

動作環境

EclipseにくっついてきたMavenとm2e。
って一応書いたけど、この内容だと環境はあまり関係ない。

対応方法

settings.xmlにproxy設定を書いてやれば解決する。

設定例

<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
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <proxies>
    <proxy>
      <id>myproxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.somewhere.com</host>
      <port>8080</port>
      <username>proxyuser</username>
      <password>somepassword</password>
      <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
    </proxy>
  </proxies>
  ...
</settings>

設定例は公式*1のやつそのまま

設定値

項目 どんな値?
id 被らないように適当な値を。
active 有効にするなら当然true…だけど一度に一つのproxyしか有効にならんと書いてある。
httpとhttps両方やりたい場合は面倒になるらしい。*2
protocol 繋ぎたいproxyに合わせて。httpやらhttpsやら。
host 同上。ローカルホストproxyなら127.0.0.1
port 同上。8080あたりになるんじゃない?
username/password 認証情報。パスワード直書きは気になるけどさすがにどうしようもないか。
nonProxyHosts proxyしたくないhostがある場合に設定。
Webページの説明ではデリミタはproxyサーバ依存とあるけど、xsdにdelimited by |って書いてあるのがイマイチ。

設定失敗してリポジトリアクセスできない場合のエラー

自環境ではMavenプロジェクトセットアップ時にこんなエラーが出た。

  • Failure to transfer org.apache.maven.plugins・・・
  • Plugin execution not covered by lifecycle configuration

当然動作環境によってエラー内容は変わるはず。
安易にエラーメッセージでGoogle先生に聞くと「リポジトリアクセスはできているがその先が問題だ」って言うページが多かったけど、リポジトリアクセス出来ない場合でも出ることはあるようだ。
そもそも最初の設定が終わってるかは一度ちゃんと見なおせという戒め。