きり丸の技術日記

技術検証したり、資格等をここに残していきます。

Mavenのproxy設定は1つしか有効に設定できない

タイトルの出オチ記事。これを知るためだけに4日くらい無駄にしました。参考先のブログに感謝です。

環境

  • Maven
    • 3.6.0

結論

Mavenでproxyを通す設定は、~/.m2/settings.xmlに設定する必要があります。

ただし、~/.m2/settings.xmlに複数定義できても、設定は1つしか有効にできません。そのため、~/.m2/settings.xmlにhttp, httpsの両方とも設定すると片方だけしか有効になりません。

settings.xmlのproxy設定

項目 設定内容
id 一意な値を設定する
active settings.xmlで有効にしたいproxy設定。1つしか設定できない
protocol httpまたはhttps
host プロキシのIPやドメイン
port プロキシのポート
username プロキシへのログインユーザ名
password プロキシへのログインパスワード
nonProxyHosts プロキシを通さないIPやドメイン

具体的な例としては以下の通りです。

<settings>
    <proxies>
        <proxy>
            <id>id01</id>
            <!-- 1つだけしかActiveにできない -->
            <active>false</active>
            <protocol>http</protocol>
            <host>proxy-domain</host>
            <port>80</port>
            <username>proxyUser</username>
            <password>proxyPass</password>
            <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
        </proxy>
        <proxy>
            <id>id02</id>
            <active>true</active>
            <protocol>https</protocol>
            <host>proxy-domain</host>
            <port>80</port>
            <username>proxyUser</username>
            <password>proxyPass</password>
            <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
        </proxy>
    </proxies>
</settings>

HTTPもHTTPSも有効にしたい

もしHTTP, HTTPSの両方ともproxy設定も有効にしたい場合は、環境変数のMAVEN_OPSにて、VMの起動オプションに設定する必要があるようです。(未検証)

# Windows
set MAVEN_OPTS=-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port>
# Mac/Linux
export MAVEN_OPTS=-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port>

終わりに

MavenのProxy設定する記事はたくさん見つかりましたが、1つしか設定できないという記事を見つけるのは大変でした。もし、HTTPSだけしか設定していなければここまで苦労しなかったですし、HTTPS, HTTPの順番で設定していたなら最初からうまく行っていたと思います。

proxy設定は難しいですね…。


この記事お役に立ちましたら、各種SNSでのシェアや、今後も情報発信しますのでフォローよろしくお願いします。

参考

f:id:nainaistar:20210715171702p:plain