ฉันจะใช้ Maven ผ่านพร็อกซีได้อย่างไร


130

ฉันต้องการแบ่งปันประสบการณ์การใช้ maven ผ่านพร็อกซี

คุณน่าจะเผชิญกับข้อยกเว้นและข้อความเช่น:

ข้อมูลเมตาของที่เก็บสำหรับ: 'org.apache.maven.plugins' ไม่สามารถเรียกคืนได้ 
ที่เก็บ: ส่วนกลางเนื่องจากข้อผิดพลาด: ข้อผิดพลาดในการถ่ายโอนไฟล์: การเชื่อมต่อถูกปฏิเสธ: เชื่อมต่อ

หรือ

[คำเตือน] ไม่สามารถเรียกตัวอธิบายปลั๊กอินสำหรับ org.apache.maven.plugins: maven-clean-
ปลั๊กอิน: 2.5: ปลั๊กอิน org.apache.maven.plugins: maven-clean-plugin: 2.5 หรือหนึ่งในนั้น 
ไม่สามารถแก้ไขการพึ่งพา: ไม่สามารถอ่าน descriptor สำหรับ 
org.apache.maven.plugins: Maven ทำความสะอาดปลั๊กอิน: ขวด: 2.5

จะกำหนดค่า Maven ให้ใช้งานพรอกซีเซิร์ฟเวอร์ได้อย่างไร


(ใครก็ตาม) ลองคิดใหม่ในคำถามจริง (เช่น: ฉันจะใช้ Maven ผ่านพร็อกซีได้อย่างไร)? จากนั้นคุณสามารถโพสต์ร่างกายคำถามของคุณเป็นคำตอบที่จะมากขึ้นสอดคล้องกับรูปแบบ StackOverflow ..
ทิม

ฉันได้ซักค้านมันสำหรับคุณ Bogdan โปรดโพสต์เนื้อหาต้นฉบับของคุณเป็นคำตอบหากคุณต้องการ
รวยขาย

ดูเหมือนว่าเราจะแก้ไขในเวลาเดียวกัน
ผู้ขายที่รวย

คำตอบ:


145

สำหรับรายละเอียดของการตั้งค่าพร็อกซีสำหรับ Maven ให้ดูที่คู่มือมินิ

โดยพื้นฐานแล้วคุณจำเป็นต้องตรวจสอบให้แน่ใจว่าส่วนพร็อกซีในการตั้งค่าส่วนกลาง ( [maven install]/conf/settings.xml) หรือการตั้งค่าผู้ใช้ ( ${user.home}/.m2/settings.xml) ถูกกำหนดค่าอย่างถูกต้อง เป็นการดีกว่าถ้าคุณทำเช่นนี้ในการตั้งค่าผู้ใช้ของคุณเพื่อหลีกเลี่ยงการเก็บรหัสผ่านเป็นข้อความธรรมดาในที่สาธารณะ

Maven 2.1 แนะนำการเข้ารหัสรหัสผ่านแต่ฉันไม่ได้ตรวจสอบว่าการเข้ารหัสนั้นใช้กับการตั้งค่าพร็อกซี่หรือรหัสผ่านที่เก็บข้อมูลหรือไม่

สำหรับข้อมูลมีการกำหนดค่าพร็อกซีที่ใส่ความคิดเห็นไว้ใน settings.xml และคำแนะนำเกี่ยวกับวิธีแก้ไข

จากคู่มือขนาดเล็กการตั้งค่าของคุณควรมีลักษณะดังนี้:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                  http://maven.apache.org/xsd/settings-1.0.0.xsd">
[...]
  <proxies>
    <proxy>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.somewhere.com</host>
      <port>8080</port>
      <username>proxyuser</username>
      <password>somepassword</password>
      <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
    </proxy>
  </proxies>
[...]
</settings>

ขอบคุณ แต่โพสต์นี้ค่อนข้างเป็นคำแนะนำสำหรับผู้อื่นมากกว่าคำถาม ฉันได้แก้ไขปัญหานี้แล้ว แต่ใช้เวลามากเกินไปกับสิ่งที่ไม่ชัดเจน ฉันโพสต์สิ่งนี้เพื่อที่จะเป็นประโยชน์สำหรับใครบางคน
Bogdan

7
ไม่พบไฟล์ setting.xml ในไดเรกทอรี m2 คิดอะไรทำไม @Rich Seller
Ariox66

5
คุณต้องวางไว้ตรงนั้น คุณสามารถค้นหาตัวอย่าง settings.xml จาก maven_home ตำแหน่งที่คุณคลายซิปไฟล์ maven ไบนารี
Ravi

และหากพร็อกซีไม่ต้องการการรับรองความถูกต้องจะต้องลบองค์ประกอบ<username>และ<password>ออก นี่ใช้เวลาสักครู่กว่าจะคิดออก
dmcontador

50

วิธีใช้พร็อกซีถุงเท้า

ตั้งค่าอุโมงค์ SSH ไปยังเซิร์ฟเวอร์บางแห่ง:

ssh -D $PORT $USER@$SERVER

Linux (ทุบตี):

export MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"

ของ windows:

set MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"

2
การใช้พร็อกซีถุงเท้าผ่านMAVEN_OPTSเป็นวิธีเดียวที่ฉันจะให้ Maven ดาวน์โหลดผ่าน HTTPS การใช้พร็อกซี HTTP หรือ HTTPS ไม่ว่าจะผ่านMAVEN_OPTSหรือsettings.xmlให้ผลลัพธ์ในorg.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec execute INFO: I/O exception (java.net.SocketException) caught when processing request to {tls}->http://proxy.mycompany.com:911->https://repo.maven.apache.org:443: SOCKS: TTL expired
Mihai Capotă

สำหรับhttpพร็อกซี:export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=$PORT"
Omid

ยอดเยี่ยมขอบคุณ หากคุณต้องการใช้ตัวเลือกเหล่านี้เพียงครั้งเดียวสำหรับคำสั่งเดียวคุณสามารถพิมพ์: คำสั่งMAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080" mvn clean installถัดไปmvnในเซสชันเดียวกันจะไม่มีพร็อกซีใด ๆ
Eric Duminil

29

ฉันยังมีปัญหานี้และฉันแก้ไขได้โดยแก้ไขsettings.xmlไฟล์ใน.m2โฟลเดอร์ของฉัน ฉันsettings.xmlเป็นเช่นนี้ในขณะนี้:

<settings>
  <proxies>
    <proxy>
      <id>genproxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxyHost</host>
      <port>3128</port>
      <username>username</username>
      <password>password</password>
    </proxy>
 </proxies>
</settings>

1
นี่ไม่ใช่การดาวน์โหลดไฟล์ jar ในกรณีของฉัน ฉันได้ลองทุกอย่างแล้ว
Faizan Mubasher

28

นอกจากนี้โปรดทราบว่าปลั๊กอินบางตัว (ทรัพยากรระยะไกลอยู่ในใจ) ให้ใช้ห้องสมุดเก่าจริงๆที่ยอมรับเฉพาะการกำหนดค่าพร็อกซีผ่าน MAVEN_OPTS เท่านั้น

-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port>

คุณอาจติดอยู่ในการตรวจสอบสิทธิ์สำหรับรายการนี้


ไม่ทำงานสำหรับฉันบน Ubuntu 14.04 ด้วย maven 3.0.5 จากที่เก็บ Ubuntu การกำหนดค่าพร็อกซีในไฟล์ settings.xml ทำงานได้
Mihai Capotă

1
ทำงานกับฉันใน Ubuntu 14.04 กับ Maven 3.0.4
rmv

ตัวอย่างของการจำเป็นต้องตั้งค่า MAVEN_OPTS ด้วยวิธีนี้คือการสร้าง Maven จากแหล่งที่มาโดยใช้ Maven หากไม่มี MAVEN_OPTS จะไม่สามารถดาวน์โหลด LICENSE-2.0 แม้จะดาวน์โหลด JAR จำนวนมาก
Permaquid

@krosenvold ขอบคุณวิธีนี้ใช้ได้กับฉัน ฉันได้ตั้งค่าพร็อกซีใน settings.xml แล้ว แต่มีปลั๊กอิน cxf ที่ต้องการสร้างรหัสจาก wsdl ซึ่งล้มเหลว นี่เป็นการแก้ไขปัญหาของฉัน
Vishal Vijayan

23

วิธีตั้งค่าMaven Proxy :

แก้ไขเซสชันพร็อกซีในไฟล์~ / .m2 / settings.xml ของคุณ หากคุณไม่พบไฟล์ให้สร้างขึ้นใหม่

<settings>
<proxies>
    <proxy>
        <id>httpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
<proxy>
        <id>httpsproxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>

</proxies>
</settings>

หรือ

แก้ไขเซสชันพร็อกซีใน{M2_HOME} /conf/settings.xml ของคุณ

หวังว่าจะช่วย .. :)


15

สิ่งเหล่านี้เกิดขึ้นได้มากที่สุด 2 ปัญหา:

  1. คุณต้องเพิ่มการกำหนดค่าพร็อกซีใน settings.xml ของคุณ นี่คือเคล็ดลับในฟิลด์ชื่อผู้ใช้ของคุณ ตรวจสอบให้แน่ใจว่าดูเหมือนเป็นโดเมน \ ชื่อผู้ใช้ การตั้งค่าโดเมนที่นั่นและการใส่เครื่องหมายทับที่แม่นยำนี้เป็นสิ่งสำคัญ '\' คุณอาจต้องการใช้แท็ก <! [CDATA []]> หากรหัสผ่านของคุณมีอักขระที่ไม่ใช่ xml
  2. ฉันสังเกตเห็น maven 2.2.0 ไม่ทำงานบางครั้งผ่านพร็อกซีเลย 2.2.1 ทำงานได้ดีอย่างสมบูรณ์

หากบางส่วนถูกละเว้น - maven อาจล้มเหลวด้วยข้อความแสดงข้อผิดพลาดแบบสุ่ม

เพียงแค่หวังว่าฉันได้ช่วยคนจากการแก้ปัญหานี้เป็นเวลา 6 ชั่วโมงเหมือนที่ฉันทำ


คุณใช้พร็อกซี NTLM หรือไม่ จากคู่มือขนาดเล็ก: "โปรดทราบว่า [c] ไม่รองรับพร็อกซี NTLM ในขณะนี้เนื่องจากไม่ได้ทำการทดสอบคุณอาจใช้คุณสมบัติของระบบที่เกี่ยวข้องใน JDK 1.4+ เพื่อทำงานนี้ได้"
ผู้ขายที่รวย

ไม่แน่ใจเกี่ยวกับเรื่องนี้ นั่นคือพร็อกซีขององค์กรที่จริง ๆ แล้ววางไว้ 600 ไมล์จากฉัน ดังนั้นตอนนี้ไม่สามารถถามใครได้เลย มันจะน่าสนใจที่จะหา ฉันรู้ว่ามันรองรับ http, ถุงเท้าและโปรโตคอลอื่น ๆ อาจจะเป็น NTML ก็ได้เช่นกัน
Bogdan

14

เพียงเพื่อเพิ่มประสบการณ์ของตัวเองด้วยนี้พร็อกซี่ของ บริษัท http://webproxy.intra.companyname.com:3128คือ สำหรับ Maven ในการทำงานผ่านพร็อกซี่นี้การตั้งค่าจะต้องมีตรงเช่นนี้

<settings>
  <proxies>
    <proxy>
      <id>default</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>webproxy.intra.companyname.com</host>
      <port>3128</port>
    </proxy>
  </proxies>
</settings>

ไม่เหมือนกับไฟล์กำหนดค่าพร็อกซีอื่น ๆprotocolที่นี่อธิบายวิธีเชื่อมต่อกับพร็อกซีเซิร์ฟเวอร์ไม่ควรใช้พร็อกซีชนิดใด httpส่วนหนึ่งของเป้าหมายจะต้องมีการแยกออกจากชื่อโฮสต์ที่อื่นมันจะไม่ทำงาน


ในเวลานี้ฉันเพิ่งทดลองสิ่งที่ตรงกันข้าม โปรโตคอลที่นี่คือการอธิบายโปรโตคอลที่ควรใช้พร็อกซี่นี้ ฉันเพิ่งประสบความสำเร็จในการกำหนดค่าพร็อกซีโปรโตคอล https ที่เชื่อมต่อกับพร็อกซี http โดยใช้ <protocol> https </protocol>
Olivier Amblet

ขอบคุณ! สิ่งนี้ได้ผลสำหรับฉัน! ฉันมี "http: //" pre-pended และมันจะล้มเหลว
Jesse McCall

11

ขอบคุณ @krosenvold

หากการเปลี่ยนแปลงไฟล์การตั้งค่าไม่ทำงานให้ลองทำสิ่งนี้ในพร้อมท์คำสั่งที่มีไฟล์ POM

mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080

สิ่งนี้ช่วยฉันทันทีหลังจากเปลี่ยนรหัสผ่าน


11

ฉันเรียกใช้cntlmlocaly กำหนดค่าด้วยNTLMv2รหัสผ่านแฮชเพื่อรับรองความถูกต้องกับพร็อกซีขององค์กรและใช้

export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128"

เพื่อใช้พรอกซีจากmavenนั้น แน่นอนพร็อกซี่ที่คุณใช้ควรสนับสนุน/cntlmNTLMv2


`set MAVEN_OPTS = -DproxyHost = 127.0.0.1 -DproxyPort = 3128 'สำหรับ windows
qxo

PowerShell สามารถตั้งค่าตัวแปรสภาพแวดล้อมของระบบ: [Environment]::SetEnvironmentVariable("MAVEN_OPTS", "-DproxyHost=127.0.0.1 -DproxyPort=3128", "Machine")
Boggin

6

และเพื่อเพิ่มในหัวข้อนี้นี่คือประสบการณ์ของฉันด้านล่าง ... แปลกจริง ๆ และใช้เวลานานดังนั้นฉันคิดว่ามันคุ้มค่าที่จะเพิ่ม

ฉันมีปัญหาคล้ายกันในการพยายามสร้าง portlet-bridge บน Windows รับข้อผิดพลาดต่อไปนี้:

กำลังดาวน์โหลด: http://repo1.maven.org/maven2/org/apache/portals/bridges-pom/1.0/bridges-pom-1.0.pom
[DEBUG] ไฟล์การติดตามความละเอียดการอ่าน C: \ Documents และ Settings \ myuser \ .m2 \ ที่เก็บข้อมูล \ org \ apache \ portals \ bridges-pom \ 1.0 \ bridges-pom-1.0.pom.lastUpdated
[DEBUG] การเขียนไฟล์ติดตามความละเอียด C: \ Documents และ Settings \ myuser \ .m2 \ repository \ orgache apache \ portals \ bridges-pom \ 1.0 \ bridges-pom-1.0.pom.lastUpdated
[ข้อผิดพลาด] บิลด์ไม่สามารถอ่าน 1 โครงการ -> [ความช่วยเหลือ 1]
org.apache.maven.project.ProjectBuildingException: พบปัญหาบางอย่างในขณะประมวลผล POM:
[FATAL] POM หลักที่ไม่สามารถแก้ไขได้: ไม่สามารถถ่ายโอนสิ่งประดิษฐ์
org.apache.portals: bridges-pom: pom: 1.0 จาก / สู่ส่วนกลาง (http://repo1.maven.org/maven2): ข้อผิดพลาดในการถ่ายโอนไฟล์: repo1.maven.org และ 'parent.relativePath' ชี้ที่ท้องถิ่นผิด
POM @ บรรทัด 23, คอลัมน์ 11
...
[ข้อผิดพลาด] โครงการ org.apache.portals.bridges: portals-bridges-common: 2.0 (H: \ path_to_project \ portals-bridges-common-2.0 \ pom.xml) มีข้อผิดพลาด 1 ครั้ง
[ข้อผิดพลาด] แม่ไม่สามารถแก้ไขได้ POM: ไม่สามารถถ่ายโอนสิ่งประดิษฐ์ org.apache.portals: bridges-pom: pom: 1.0 จาก / สู่ส่วนกลาง (http://repo1.maven.org/maven2):
เกิดข้อผิดพลาดในการถ่ายโอนไฟล์: repo1.maven.org และ 'parent.relativePath' ชี้ไปที่ POM @ line 23 ในท้องที่ที่ไม่ถูกต้อง, คอลัมน์ 11: ไม่รู้จักโฮสต์ repo1.maven.org -> [ช่วยเหลือ 2]
...
[ข้อผิดพลาด] สำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดและวิธีแก้ไขที่เป็นไปได้โปรดอ่านบทความต่อไปนี้:
[ข้อผิดพลาด] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ข้อผิดพลาด] [ความช่วยเหลือ 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException

ฉันลองสองสามสิ่งหลังจากท่องไปสักหน่อย:

  • พยายามตั้งค่า parent.relativePath ให้ว่างเปล่าเพื่อให้ Maven ไม่คิดว่าผู้ปกครองอยู่ในท้องถิ่น นี่เป็นข้อเสนอแนะเกี่ยวกับ SO ที่Hudson build ล้มเหลว: POM หลักที่ไม่สามารถแก้ไขได้และในฟอรัม nabbleนี้ สิ่งนี้ไม่มีผลกระทบ

  • ฉันพยายามตรวจสอบให้แน่ใจว่าที่เก็บมีการระบุไว้อย่างชัดเจนใน settings.xml ของฉัน แต่สิ่งนี้ก็ไม่มีผลเช่นกัน

  • จากนั้นผมก็มั่นใจ mvn ถูกบังคับให้ต้องค้นหาพื้นที่เก็บข้อมูลมากกว่าพึ่งพาประวัติศาสตร์ของตัวเองตามที่กล่าวไว้ในบล็อกนี้โดย Sarthon น่าเสียดายที่นี่ไม่ใช่ปัญหาเช่นกัน

  • ในความสิ้นหวังฉันก็กลับมา MAVEN_OPTS ของฉันอีกครั้งเพื่อให้แน่ใจว่าฉันจะไม่ทำผิดพลาดในการตั้งค่าพร็อกซีของฉัน สิ่งเหล่านี้ถูกต้องแม้ว่าจะไม่ได้อ้างอิงค่า:

    ตั้ง MAVEN_OPTS = -Dhttp.proxyHost = myproxy.mycompany.com -Dhttp.proxyPort = 8080 -Xmx256m

  • ดังนั้นในที่สุดฉันจึงย้ายการตั้งค่าพร็อกซีไปยัง settings.xml และสิ่งนี้ใช้ได้:

    <proxies>
      <proxy>
        <id>genproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <!--username>proxyuser</username-->
        <!--password>proxypass</password-->
        <host>myproxy.mycompany.com</host>
        <port>8080</port>
        <nonProxyHosts>*.mycompany.com|127.0.0.1</nonProxyHosts>
      </proxy>
    </proxies>

ไม่แน่ใจว่าทำไม MAVEN_OPTS ดั้งเดิมของฉันไม่ทำงาน (อัญประกาศ?) ในขณะที่การตั้งค่า settings.xml ทำงาน ฉันต้องการย้อนกลับการแก้ไขและตรวจสอบแต่ละขั้นตอนอีกครั้ง แต่เสียเวลามากเกินไป จะรายงานกลับเป็นและเมื่อ


คุณระบุชื่อผู้ใช้และรหัสผ่านใน MAVEN_OPTS จริงหรือไม่
bcmoney

1
ฉันไม่คิดว่าฉันทำ แต่หลังจากนั้นฉันไม่จำเป็นต้องใช้พร็อกซีเซิร์ฟเวอร์ของฉัน อย่างที่คุณเห็นมันเป็นไปได้ นอกเหนือจากปัญหาด้านความปลอดภัยคุณสามารถลองดูได้ ฉันรวบรวมคุณยังคงมีปัญหาในการได้มาไกลขนาดนี้แล้ว?
wmorrison365

4

ฉันรู้ว่านี่ไม่ใช่คำตอบสำหรับคำถาม แต่อาจคุ้มค่าที่จะรู้ว่ามีใครบางคนกำลังค้นหาโพสต์นี้ นอกจากนี้ยังเป็นไปได้ที่จะติดตั้งพร็อกซี่ที่เก็บ Maven เช่นNexus

Maven ของคุณจะได้รับการกำหนดค่าให้ติดต่อพร็อกซี Nexus ในเครื่องและจากนั้น Nexus จะดึง (และแคช) สิ่งประดิษฐ์ สามารถกำหนดค่าผ่านเว็บอินเตอร์เฟสและรองรับพร็อกซี (http))

นี่เป็นข้อได้เปรียบโดยเฉพาะอย่างยิ่งในการตั้งค่า บริษัท เนื่องจากมีสิ่งของในท้องถิ่นและสามารถดาวน์โหลดได้อย่างรวดเร็วและคุณไม่ได้ขึ้นอยู่กับความพร้อมใช้งานของที่เก็บ Maven ภายนอกอีกต่อไป

หากต้องการเชื่อมโยงกลับไปที่คำถาม ด้วย Nexus จะมี GUI ที่ดีสำหรับการกำหนดค่าพร็อกซีและจะต้องทำในที่เดียวเท่านั้นไม่ใช่สำหรับนักพัฒนาทุกคน


3

ถ้าคุณยังใหม่กับการตั้งค่าพร็อกซีสำหรับ Maven ในกรณีของฉันแรกไปและตรวจสอบสภาพอากาศโฟลเดอร์บ้านของคุณมี.m2โฟลเดอร์และในนั้นควรจะมีไฟล์ชื่อsettings.xmlหากไม่ได้สร้างมันขึ้นมาและวางนี้และการเปลี่ยนแปลงhostและportแล้วหากมีการเปลี่ยนแปลงที่จำเป็นnonProxyHosts

โฮมโฟลเดอร์ - C: \ Users \ {ชื่อผู้ใช้}

<settings>
<proxies>
    <proxy>
        <id>httpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
<proxy>
        <id>httpsproxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>

</proxies>
</settings>

หากกรณีนี้ไม่ประสบความสำเร็จไปและทำการเปลี่ยนแปลงในตำแหน่งนี้ของโฟลเดอร์บ้าน

/conf/settings.xml

ฉันใช้ Eclipse เป็น IDE ของฉัน
หวังว่านี่จะช่วยได้ !!

หมายเหตุ: หากต้องการลบพรอกซีsettings.xmlให้ย้ายไปที่อื่น


หากต้องการลบพรอกซีเพียงแค่ย้าย settings.xml ไปยังที่อื่น
Akitha_MJ

1

หาก maven ทำงานผ่านพร็อกซี แต่ไม่ใช่ปลั๊กอินบางตัวที่กำลังเรียกใช้ให้ลองตั้งค่าJAVA_TOOL_OPTIONSด้วย-Dhttp*.proxy*การตั้งค่า

หากคุณได้JAVA_OPTSทำไปแล้ว

export JAVA_TOOL_OPTIONS=$JAVA_OPTS

0

ยกเว้นเทคนิคที่กล่าวถึงข้างต้นด้วยความพยายามบางอย่างคุณสามารถรัน maven ผ่านพร็อกซีโดยใช้ไลบรารี jproxyloader (มีตัวอย่างในหน้าวิธีทำสิ่งนี้: http://jproxyloader.sourceforge.net/ ) อนุญาตให้ติดตั้งพร็อกซีถุงเท้าเท่านั้นสำหรับการดาวน์โหลดสิ่งประดิษฐ์

ในวิธีแก้ปัญหาที่กล่าวถึงโดย duanni (การตั้งค่า -DsocksProxyHost) มีปัญหาหนึ่งข้อ หากคุณมีการทดสอบการทำงานร่วมกับฐานข้อมูลท้องถิ่น (หรือการทดสอบอื่นที่เชื่อมต่อกับ URL ซึ่งไม่ควรผ่านพร็อกซี) การทดสอบเหล่านี้จะหยุดทำงานเนื่องจากการเชื่อมต่อกับฐานข้อมูลจะถูกนำไปยังพร็อกซีด้วย ด้วยความช่วยเหลือของ jProxyLoader คุณสามารถตั้งค่าพร็อกซีสำหรับโฮสต์ nexus เท่านั้น นอกจากนี้หากคุณต้องการคุณสามารถส่งการเชื่อมต่อไปยังฐานข้อมูลผ่านทางพร็อกซีอื่น


0

บางครั้งคุณต้องเพิ่ม<proxy></proxy>แท็กอื่น ๆและระบุ https ในแท็กโปรโตคอล:<protocol>https</protocol>


0

การโพสต์ด้านบนช่วยในการแก้ไขปัญหาของฉัน นอกเหนือจากข้างต้นฉันต้องทำการเปลี่ยนแปลงต่อไปนี้เพื่อให้ทำงานได้:

  • แก้ไขการตั้งค่า JRE net ของ Maven (\ jre \ lib \ net.properties) เพื่อใช้การตั้งค่าพร็อกซีระบบ

    https.proxyHost=proxy DNS
    https.proxyPort=proxy port
  • การตั้งค่าพร็อกซีเซิร์ฟเวอร์รวมอยู่ใน settings.xml ฉันไม่ได้ระบุการตั้งค่าชื่อผู้ใช้และรหัสผ่านเพื่อใช้การตรวจสอบสิทธิ์ NTLM


0

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_OPTIONSJAVA_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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.