Mavenは、settings.xmlと呼ばれるファイルを介してこれを行う組み込みの方法を提供します。これは他の回答で説明されています。ただし、特にLinuxでは、コマンドラインツールが環境変数で指定されたプロキシhttps_proxy
を自動的に使用するのが一般的です。
自分自身を繰り返さないという原則(間違いを回避するのに役立つことを目的としています)に従うには、それmvn
も自動的に処理できると便利です。
必要な変換を行うシェルスクリプトを次に示します。
#! /usr/bin/env bash
function javaproxy {
## using "Shell Parameter Expansion"
request_scheme=$1 ; proxy=$2
notscheme=$(echo ${proxy#*://}) ## parse
scheme=$(echo ${proxy%${notscheme}}) ## remove
scheme=$(echo ${scheme%://}) ## strip
hostport=$(echo ${proxy#*//*}) ## parse
host=$(echo ${hostport%:*}) ## parse
port=$(echo ${hostport#${host}}) ## remove
port=$(echo ${port#:}) ## strip
scheme=$(echo ${scheme:-http}) ## default
host=$(echo ${host:-localhost}) ## default
port=$(echo ${port:-8080}) ## default
echo -n " -D${request_scheme}.proxyHost=${host}"
echo -n " -D${request_scheme}.proxyPort=${port}"
}
JTO=""
if [ $http_proxy ] ; then
JTO="${JTO}$(javaproxy http ${http_proxy})"
fi
if [ $https_proxy ] ; then
JTO="${JTO}$(javaproxy https ${https_proxy})"
fi
if [ $no_proxy ] ; then
JTO="${JTO} -Dhttp.nonProxyHosts=$(echo \"${no_proxy}\"|tr ',' '|')"
fi
export JAVA_TOOL_OPTIONS=${JTO}
echo "JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS}"
mvn_friendliness_options+=--update-snapshots
mvn ${mvn_friendliness_options} $@
これに次のような名前を付けてproxied_mvn
実行します。
$ https_proxy=http://localhost:58080 ./proxied_mvn clean package
または、環境設定を起動スクリプトに移動することもできます。
落とし穴
プロキシ経由でNexusにアクセスできるようにMavenを設定しようとすると、うまくいかないことがたくさんあります。うまくいけば、このスクリプトは最も厄介な問題のいくつかを解決するのに役立ちますが、他の問題は残ります。
Nexusクレデンシャルが利用可能で正しい(必要な場合のみ)
確認する mvn help:effective-settings
Mavenキャッシング:「解決は再試行されません」
mvn clean package --update-snapshots
Mavenのテキストの壁の出力-エラーメッセージが実行間で微妙に異なっていないことを確認するには、出力を注意深く調べる必要があります
古いバージョンのJava _JAVA_OPTIONS
では、の代わりにが必要になる場合がありJAVA_TOOL_OPTIONS
ます。
エピローグ
プロキシには複数の種類があります。これに対応して、この質問が解釈された方法は複数あります。ここでは、さまざまな異なる答えが多数寄せられています。
(フォワードHTTP / HTTPS)Webプロキシサーバーのケースに明示的に対処しました。これは、会社のネットワーク(一部の会社の場合)内からインターネットにアクセスするために使用されます。これは、SOCKSプロキシとは明らかに異なる場合があります。SOCKSプロキシは、ここでのいくつかの回答でも取り上げられています。
ところで、JAVA_TOOL_OPTIONS
このソリューションはを使用しているため、プロキシ内で他のJavaアプリケーションを実行する場合にも適用できます。
パーティングヒント...上記の例ではを使用していhttp://localhost:58080
ます。これは、リモートアクセスクライアントでWSLをCLIENT_PROXY=localhost:58080
使用して実行することにより、自分から実際のネットワークプロキシへのポート転送を設定したためです。
ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY