Maven จัดเตรียมวิธีการในการทำสิ่งนี้ผ่านไฟล์ที่ชื่อว่าsettings.xmlและคำตอบอื่น ๆ แต่ก็เป็นธรรมเนียมที่โดยเฉพาะอย่างยิ่งในลินุกซ์สำหรับเครื่องมือบรรทัดคำสั่งโดยอัตโนมัติใช้พร็อกซีที่ระบุโดยตัวแปรสภาพแวดล้อม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
หรือคุณเพียงแค่ย้ายการตั้งค่าสภาพแวดล้อมไปยังสคริปต์เริ่มต้นของคุณ
gotchas
มีหลายสิ่งที่ผิดพลาดเมื่อพยายามกำหนดค่า Maven สำหรับการเข้าถึงNexusผ่านพร็อกซี หวังว่าสคริปต์นี้จะช่วยแก้ไขปัญหาที่พิถีพิถันมากที่สุด แต่บางเรื่องยังคงอยู่:
ข้อมูลประจำตัวของ Nexus พร้อมใช้งานและถูกต้อง (เฉพาะในกรณีจำเป็น)
ตรวจสอบกับ mvn help:effective-settings
การแคช Maven: "การแก้ไขจะไม่ได้รับการพยายามอีกครั้ง"
mvn clean package --update-snapshots
Maven Wall-of-text output - คุณต้องมองอย่างใกล้ชิดที่เอาต์พุตเพื่อให้แน่ใจว่าข้อความแสดงข้อผิดพลาดไม่แตกต่างกันอย่างละเอียดระหว่างการรัน
รุ่นเก่าของ Java อาจต้องใช้แทน_JAVA_OPTIONS
JAVA_TOOL_OPTIONS
ถ้อยคำส
มีมากกว่าหนึ่งชนิดคือพร็อกซี่ ตามลําดับมีมากกว่าหนึ่งวิธีที่คําถามนี้ถูกแปลความหมาย - ตอบคำถามจํานวนมากที่นี่
ฉันได้ระบุกรณีของเว็บพร็อกซีเซิร์ฟเวอร์ (HTTP / HTTPS) อย่างชัดเจนซึ่งใช้ในการเข้าถึงอินเทอร์เน็ตจากภายในเครือข่าย บริษัท (สำหรับบาง บริษัท ) สิ่งนี้อาจแตกต่างอย่างชัดเจนจากพร็อกซี SOCKSซึ่งได้รับการแก้ไขด้วยคำตอบบางอย่างที่นี่
อ้อเนื่องจากวิธีการใช้JAVA_TOOL_OPTIONS
งานโซลูชันนี้สามารถใช้กับการเรียกใช้แอปพลิเคชัน Java อื่น ๆ ของคุณภายในพร็อกซีได้เช่นกัน
คำใบ้บางส่วน ... ตัวอย่างของฉันใช้http://localhost:58080
ไป นี่เป็นเพราะฉันได้ตั้งค่าการส่งต่อพอร์ตจากของฉันCLIENT_PROXY=localhost:58080
ไปยังพร็อกซีเครือข่ายจริงโดยใช้WSLบนไคลเอนต์การเข้าถึงระยะไกลของฉันเพื่อเรียกใช้:
ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY