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 Wall-of-Text 출력-오류 메시지가 실행간에 미묘하게 다르지 않도록 출력을 면밀히 검토해야합니다.
이전 버전의 Java _JAVA_OPTIONS
대신 이 필요할 수 있습니다 JAVA_TOOL_OPTIONS
.
발문
Proxy 에는 여러 종류가 있습니다. 이에 따라이 질문이 해석 된 방법은 여러 가지가 있는데, 여기에는 많은 이질적인 답변이 있습니다.
회사 네트워크 (일부 회사의 경우)에서 인터넷에 액세스하는 데 사용되는 (HTTP / HTTPS) 웹 프록시 서버 의 경우를 명시 적으로 언급했습니다 . 이것은 SOCKS 프록시 와 는 현저히 다르며 여기에서 일부 답변으로 해결되었습니다.
그건 그렇고, JAVA_TOOL_OPTIONS
이 솔루션 은를 사용하기 때문에 프록시 내에서 다른 Java 응용 프로그램 을 실행하는 데에도 적용될 수 있습니다 .
이별 힌트 ... 위의 예는를 사용합니다 http://localhost:58080
. 원격 액세스 클라이언트에서 WSL 을 CLIENT_PROXY=localhost:58080
사용하여 포트 전달을 실제 네트워크 프록시로 설정했기 때문입니다 .
ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY