企業內網開發環境常需通過代理訪問中央倉庫或私服。Maven 在 ${MAVEN_HOME}/conf/settings.xml(全域)或 ~/.m2/settings.xml(用戶級)中通過 <proxies> 區塊配置 HTTP/HTTPS 代理。本文詳細說明各屬性含義、多代理生效規則與常見避坑指南。
<proxies>
<proxy>
<id>corporate-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.company.com</host>
<port>8080</port>
<username>devuser</username>
<password>devpass</password>
<nonProxyHosts>localhost|127.0.0.1|*.internal.com</nonProxyHosts>
</proxy>
</proxies>
| 屬性 | 必填 | 說明 |
|---|---|---|
| id | 否 | 唯一標識,便於管理與除錯 |
| active | 是 | true 啟用,false 停用 |
| protocol | 是 | 代理協議,通常 http 或 https |
| host | 是 | 代理伺服器主機名或 IP |
| port | 是 | 代理埠號 |
| username/password | 否 | 需認證時填寫,支援明文或加密(配合 settings-security.xml) |
| nonProxyHosts | 否 | 繞過代理的主機模式,| 分隔,支援通配符 * |
<proxies> 下聲明的多個 <proxy>,第一個 active=true 的生效,後續被忽略。<proxy>,分別設 protocol 為 http 與 https,並確保所需協議的代理排在前面。id 的代理。<nonProxyHosts>localhost|127.0.0.1|192.168.*|*.mycompany.com|nexus.mycompany.com</nonProxyHosts>
* 通配子域名或 IP 段。Patterns.compile(pattern).matcher(host).matches(),大小寫不敏感。active=true、protocol 拼寫、防火牆是否放行埠口。cacerts 或配置 -Djavax.net.ssl.trustStore。&、< 等需轉義,或改用加密密碼。settings.xml,需通過 -s 參數掛載或構建鏡像時 COPY。~/.m2/settings.xml 覆蓋全域配置,避免污染其他專案。mvn --encrypt-master-password → mvn --encrypt-password,生成 settings-security.xml。<mirrors> 使用內網私服(Nexus/Artifactory),減少外網代理依賴,提升構建速度與穩定性。掌握上述配置,即可輕鬆應對企業級 Maven 代理場景。