การกำหนดค่าพร็อกซี Gradle


161

ฉันต้องการการเข้าถึงเว็บจาก Gradle ผ่านพร็อกซีเซิร์ฟเวอร์เพื่อใช้การรวม Gradle / Artifactory สำหรับ Jenkins เพื่อลดสาเหตุที่เป็นไปได้สำหรับปัญหาฉันเพิ่มปลั๊กอิน Artifactory ใน build.gradle และเรียกใช้จากบรรทัดคำสั่ง:

apply {
    apply from: "http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle"
}

ทำตามคำอธิบายนี้ฉันระบุสิ่งต่อไปนี้ใน. gradle / gradle.properties ในโฮมไดเร็กตอรี่ของฉัน:

systemProp.http.proxyHost=hostname
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=de\\username
systemProp.http.proxyPassword=xxx

ด้วยการกำหนดค่าพร็อกซีข้างต้น (ที่รู้จักกันในการทำงาน) มันล้มเหลว:

11: 33: 17.699 [ข้อผิดพลาด] [org.gradle.BuildExceptionReporter] เกิดจาก: java.io.IOException: เซิร์ฟเวอร์ส่งคืนรหัสตอบกลับ HTTP: 407 สำหรับ URL: http://gradle.artifactoryonline.com/gradle/plugins/org/ JFrog / buildinfo / buildinfo-ระบาย-gradle / 1.0.1 / artifactoryplugin-1.0.1.gradle

ฉันมีสองพร็อกซีเซิร์ฟเวอร์ให้เลือกและหนึ่งตอบกลับด้วยเสมอ407( จำเป็นต้องใช้การตรวจสอบความถูกต้องของพร็อกซี ) และอีกตัวที่มี502( เกตเวย์ไม่ดี ) ดังนั้นเห็นได้ชัดว่ามีการใช้ตัวเลือก proxyHost และ proxyPort

ในฐานะที่เป็นชื่อผู้ใช้ (ขึ้นอยู่กับผู้ใช้ Active Directory) มีเครื่องหมายผมพยายามทั้งสอง\\และ\แต่ทำงานไม่ ผู้ใช้ที่ระบุแตกต่างจากผู้ใช้ที่ล็อกอินเข้าสู่เครื่องและ Active Directory ข้อมูลรับรองของผู้ใช้รายนี้ไม่ถูกต้องสำหรับพร็อกซีดังนั้นฉันจึงต้องสามารถระบุผู้ใช้รายอื่น

การตั้งค่าตัวเลือกเดียวกันใน Jenkins 'หรือ GUI ของ Artifactory


1
มีปัญหาเดียวกันไม่มีคำตอบที่นี่ช่วย (แม้แต่ผู้ที่ปฏิบัติตามวิธีการที่เลิก / ไม่เลิก) จากนั้นฉันก็ตระหนักว่าต้องตั้งค่าพร็อกซีhttps : stackoverflow.com/a/27686730/1024839
hkoosha

คุณควรดูที่ url นี้สมบูรณ์และปรับปรุงมากขึ้น (ด้วย http และ https): docs.gradle.org/current/userguide/…
Guillaume

@GuillaumeHusta ขอบคุณ แต่โปรดทราบว่าคำถามนี้โพสต์เมื่อ 5 ปีที่แล้วเมื่อ Gradle 0.8 เป็นรุ่นล่าสุดและเอกสารเกี่ยวกับเรื่องนี้ก็แค่ผิดธรรมดา (ดูคำตอบของฉันเองสำหรับคำถามนี้)
Daniel Beck

ฉันมีปัญหานี้เมื่อใช้เครื่องหมายคำพูดในพร็อกซีให้ใช้ systemProp.http.proxyHost = xyz ไม่ใช่ systemProp.http.proxyHost = 'xyz'
ir2pid

คำตอบ:


211

การปรับแต่งมากกว่าการตอบสนองของ Daniel:

การกำหนดค่าพร็อกซี HTTP เท่านั้น

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

HTTPS การกำหนดค่าพร็อกซีเท่านั้น

gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

ทั้งการกำหนดค่า HTTP และ HTTPS Proxy

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

การกำหนดค่าพร็อกซีพร้อมผู้ใช้และรหัสผ่าน

gradlew -Dhttp.proxyHost = 127.0.0.1 -Dhttp.proxyPort = 3128 - Dhttps.proxyHost = 127.0.0.1 -Dhttps.proxyPort = 3129 -Dhttps.proxyUser = ผู้ใช้ -Dhttps.proxyUser proxyPassword = pass -Dhttp.nonProxyHosts = host1.com | host2.com

ทำงานให้ฉัน ( gradle.propertiesทั้งใน homedir หรือ dir โครงการสร้างยังคงล้มเหลว) ขอขอบคุณที่ชี้ปัญหาที่การไล่ระดับที่ให้วิธีแก้ปัญหานี้ ดูเอกสารอ้างอิงได้ที่https://docs.gradle.org/current/userguide/build_environment.html#sec:accessing_the_web_via_a_proxy

อัปเดต คุณยังสามารถใส่คุณสมบัติเหล่านี้ได้ในgradle-wrapper.properties(ดู: https://stackoverflow.com/a/50492027/474034 )


4
ช่วยให้ฉันเกินไปเมื่อใช้ cntlm
ŁukaszSiwiński

5
คุณจะลบ proxy อย่างไร
Jonathan

2
ยัง -Dhttps.proxyUser = ผู้ใช้ -Dhttps.proxyPassword = pass
โอเว่น B

10
หากคุณใส่คุณสมบัติไว้ใน~/.gradle/gradle.propertiesหน้าตรวจสอบให้แน่ใจว่าคุณใส่คุณสมบัติด้วยsystemPropเช่นsystemProp.http.proxyHost=127.0.0.1
Stefan Haberl

1
ฉันลองสิ่งนี้และไม่ได้ผลสำหรับฉัน ฉันต้องตั้งค่าตัวเลือก ( -Dhttp.proxyHostและJAVA_OPTSไลค์) เป็นตัวแปรสภาพแวดล้อมเพื่อให้ทำงานได้
GoldenD

66

นี่คือคุณสมบัติของฉันโปรดทราบส่วน HTTPS เหล่านั้น

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8118

55

ในฉันbuild.gradleฉันมีงานต่อไปนี้ซึ่งใช้การตั้งค่าพร็อกซี linux ปกติHTTP_PROXYและHTTPS_PROXYจาก shell env:

task setHttpProxyFromEnv {
    def map = ['HTTP_PROXY': 'http', 'HTTPS_PROXY': 'https']
    for (e in System.getenv()) {
        def key = e.key.toUpperCase()
        if (key in map) {
            def base = map[key]
            def url = e.value.toURL()
            println " - systemProp.${base}.proxy=${url.host}:${url.port}"
            System.setProperty("${base}.proxyHost", url.host.toString())
            System.setProperty("${base}.proxyPort", url.port.toString())
        }
    }
}

build.dependsOn setHttpProxyFromEnv

2
มันสนุก! มันเป็น build.gradle ของรูทหรือ build.gradle ของแอพใช่ไหม
Miao1007

1
ทำงานบน Windows 7 ได้เช่นกัน! นี่ควรเป็นคำตอบที่ยอมรับได้!

1
ขอบคุณ! ด้านบนใช้สำหรับการกำหนดค่าที่ไม่ต้องการรหัสผ่านพร็อกซี ฉันได้ทำการแก้ไขเพื่อทำงานกับหรือไม่ใช้รหัสผ่านพร็อกซีที่ไม่มีด้านล่าง
Norbert

if (key in map.keySet ()) {
JustAnotherCoder

คำตอบที่ดีที่สุด หวังว่าระบบนิเวศของจาวาจะทำงานแบบนี้นอกกรอบ
Avindra Goolcharan

26

สำหรับฉันทำงานเพิ่มการกำหนดค่านี้ในไฟล์ gradle.properties ของโครงการโดยที่ไฟล์ build.gradle คือ:

systemProp.http.proxyHost=proxyURL
systemProp.http.proxyPort=proxyPort
systemProp.http.proxyUser=USER
systemProp.http.proxyPassword=PASSWORD
systemProp.https.proxyHost=proxyUrl 
systemProp.https.proxyPort=proxyPort
systemProp.https.proxyUser=USER
systemProp.https.proxyPassword=PASSWORD

โดยที่: proxyUrl เป็น URL ของพร็อกซีเซิร์ฟเวอร์ ( http: // .... .)

proxyPort เป็นพอร์ต (ปกติ 8080)

USER เป็นผู้ใช้โดเมนของฉัน

รหัสผ่านรหัสผ่านของฉัน

ในกรณีนี้พร็อกซีสำหรับ http และ https เหมือนกัน


23

ลองทำสิ่งต่อไปนี้:

gradle -Dhttp.proxyHost=yourProxy -Dhttp.proxyPort=yourPort -Dhttp.proxyUser=usernameProxy -Dhttp.proxyPassword=yourPassoword


2
พิจารณาเมื่อถามคำถามนี้ ปัญหาที่ฉันลิงก์ไปยังในคำตอบของฉันถูกทำเครื่องหมายแก้ไขต่อ Gradle 1.0-milestone-8 …
Daniel Beck

2
@Daniel คำถามนี้เป็นสิ่งแรกที่โผล่ขึ้นมาเมื่อฉันค้นหา "gradle proxy" ฉันอ่านคำตอบและคำถามนั้นเป็นคำตอบที่ชัดเจนที่สุดสำหรับความต้องการของฉัน ...
Betlista

22

ด้วยการใช้โปรแกรม Java "Request a URL" ที่ง่ายมากฉันก็สามารถจำลองปัญหาได้

http.proxyUserและhttp.proxyPasswordดูเหมือนจะไม่ได้มาตรฐานแม้จะเป็นที่นิยมตัวเลือกเช่นที่พวกเขาไม่ได้อธิบายไว้ในหน้าอ้างอิง Java เชื่อมโยงจาก Gradle กวดวิชา ; แม้ว่า Gradle จะกล่าวถึงพวกมันด้วยตนเอง

ดูเหมือนว่าโปรแกรม Java ที่ต้องการสนับสนุนการรับรองความถูกต้องของพร็อกซีต้องทำด้วยตนเอง (และฉันสามารถทำได้โดยใช้รหัสในหน้าเชื่อมโยง)


ฉันส่งเรื่องนี้ (และแก้ไข) เพื่อปัญหาติดตาม Gradle ปัญหาที่ยกขึ้น GRADLE-1556 ได้รับการแก้ไขใน 1.0-milestone-8 (Feb 2012)


บล็อกที่เชื่อมโยงเกิดขึ้นสำหรับฉันเป็นคำเชิญเท่านั้น มีตัวอย่างสาธารณะของวิธีแก้ปัญหานี้หรือไม่?
Mike Yockey

@yock ดูสิ่งที่แนบมาของปัญหาที่ฉันส่งไปยัง Gradle มันคล้ายกันมาก
Daniel Beck

19

ตรวจสอบที่ c: \ Users \ ชื่อผู้ใช้ของคุณ \ .gradle \ gradle.properties:

systemProp.http.proxyHost=<proxy host>
systemProp.http.proxyPort=<proxy port>
systemProp.http.proxyUser=<proxy user>
systemProp.http.proxyPassword=<proxy password>
systemProp.http.nonProxyHosts=<csv of exceptions>
systemProp.https.proxyHost=<proxy host>
systemProp.https.proxyPort=<proxy port>
systemProp.https.proxyUser=<proxy user>
systemProp.https.proxyPassword=<proxy password>
systemProp.https.nonProxyHosts=<csv of exceptions seperated by | >

5
@MurrayFoxcroft คุณเห็นลิงค์ในคำตอบนั้นที่ไหน
Max Vollmer

โดยทั่วไปลิงก์ไปยังเครื่องโลคัลและดัมพ์ไฟล์ โปรดอธิบายคำตอบโดยละเอียดเพิ่มเติม
Murray Foxcroft

superrrrrr TNX มึงอาจไม่ได้ตระหนักถึงวิธีที่มีประโยชน์ครับโพสต์สำหรับฉัน แต่ยังคงขอบคุณใหญ่
Seyed อาลี Roshan

@SeyedAliRoshan เราจะส่งผ่าน proxyUser และรหัสผ่านโดยวิธีโต้แย้งได้อย่างไร? ฉันไม่ต้องการให้ผู้ใช้ไฟล์ globle gradle.propaerties
Nullpointer

@Nullpointer คุณพยายามใช้การตั้งค่าพร็อกซีในโครงการของคุณหรือไม่?
Seyed Ali Roshan

12

สร้างไฟล์ที่เรียกว่าgradle.propertiesภายในโฟลเดอร์โครงการที่มีbuild.gradleไฟล์อยู่ เพิ่มรายการต่อไปนี้

     systemProp.http.proxyHost=proxy_url
     systemProp.http.proxyPort=proxy_port
     systemProp.http.proxyUser=USER
     systemProp.http.proxyPassword=PWD
     systemProp.https.proxyHost=proxy_url 
     systemProp.https.proxyPort=proxy_port
     systemProp.https.proxyUser=USER
     systemProp.https.proxyPassword=PWD

หากคุณใช้ DNS สำหรับพรอกซีให้เพิ่มเช่น systemProp.https.proxyHost=www.proxysite.com

สำหรับ IP เพียงระบุ IP โดยไม่ใช้http://หรือhttps://
ตรวจสอบเอกสารอย่างเป็นทางการของ gradleเพื่อดูรายละเอียดเพิ่มเติมและตั้งค่าพร็อกซีในระดับสากล


9

มี 2 ​​วิธีในการใช้ Gradle ด้านหลังพร็อกซี:

เพิ่มอาร์กิวเมนต์ในบรรทัดคำสั่ง

(จากโพสต์ของ Guillaume Berche)

เพิ่มอาร์กิวเมนต์เหล่านี้ในคำสั่ง gradle ของคุณ:

-Dhttp.proxyHost=your_proxy_http_host -Dhttp.proxyPort=your_proxy_http_port

หรืออาร์กิวเมนต์เหล่านี้หากคุณใช้ https:

-Dhttps.proxyHost=your_proxy_https_host -Dhttps.proxyPort=your_proxy_https_port

เพิ่มบรรทัดในไฟล์กำหนดค่าการไล่ระดับสี

ในgradle.properties เพิ่มบรรทัดต่อไปนี้:

systemProp.http.proxyHost=your_proxy_http_host
systemProp.http.proxyPort=your_proxy_http_port
systemProp.https.proxyHost=your_proxy_https_host
systemProp.https.proxyPort=your_proxy_https_port

(สำหรับgradle.propertiesตำแหน่งไฟล์โปรดดูเอกสารอย่างเป็นทางการที่https://docs.gradle.org/current/userguide/build_environment.html


แก้ไข:ดังที่ได้กล่าวโดย @Joost: รายละเอียดเล็ก ๆ แต่สำคัญที่ฉันมองข้ามในตอนแรก: โปรดสังเกตว่าชื่อโฮสต์ที่แท้จริงไม่มี http://ส่วนโปรโตคอลของ URL ...


1
รายละเอียดเล็ก ๆ แต่สำคัญที่ฉันมองข้ามในตอนแรก: โปรดสังเกตว่าชื่อโฮสต์จริงไม่มีhttp://ส่วนโปรโตคอลของ URL ...
Joost

5

ตามการตอบสนองของ SourceSimian; สิ่งนี้ใช้ได้กับบัญชีผู้ใช้โดเมน Windows โปรดทราบว่าชื่อผู้ใช้ นั้นไม่มีโดเมนอยู่

task setHttpProxyFromEnv {
    def map = ['HTTP_PROXY': 'http', 'HTTPS_PROXY': 'https']
    for (e in System.getenv()) {
        def key = e.key.toUpperCase()
        if (key in map) {
            def base = map[key]
            def url = e.value.toURL()
            println " - systemProp.${base}.proxy=${url.host}:${url.port}"
            System.setProperty("${base}.proxyHost", url.host.toString())
            System.setProperty("${base}.proxyPort", url.port.toString())
            System.setProperty("${base}.proxyUser", "Username")
            System.setProperty("${base}.proxyPassword", "Password")
        }
    }
}
build.dependsOn setHttpProxyFromEnv

ขอบคุณ! มีการอัปเดตเกี่ยวกับวิธีรับชื่อผู้ใช้และรหัสผ่านพร็อกซีแบบไดนามิกด้านล่าง
Norbert

2

ในกรณีของฉันฉันพยายามตั้งค่าพรอกซีจาก android studio Appearance & Behavior => System Settings => HTTP Proxy แต่พร็อกซีไม่ได้ผลฉันจึงคลิกไม่มีพรอกซี

การตรวจสอบNO PROXYจะไม่ลบการตั้งค่าพร็อกซีออกจาก gradle.properties (Global) คุณต้องลบมันด้วยตนเอง

ดังนั้นฉันจะลบคุณสมบัติทั้งหมดที่เริ่มต้นด้วยsystemPropเช่น - systemProp.http.nonProxyHosts = *. local, localhost


ฉันทำผมนานหลายชั่วโมงแล้วเห็นได้ชัดว่าบน Mac คุณสมบัติเหล่านี้ถูกเพิ่มเข้าไปในของฉัน~/.gradle/gradle.propertiesโดยอัตโนมัติ ขอบคุณที่ชี้นำ
EpicPandaForce

1

การอัปเดตเป็นคำตอบของ@sourcesimianและ@ kunal-bซึ่งตั้งค่าชื่อผู้ใช้และรหัสผ่านแบบไดนามิกหากกำหนดค่าในคุณสมบัติของระบบ

ต่อไปนี้จะตั้งชื่อผู้ใช้และรหัสผ่านหากระบุหรือเพิ่มโฮสต์และพอร์ตหากไม่มีการตั้งชื่อผู้ใช้และรหัสผ่าน

task setHttpProxyFromEnv {
    def map = ['HTTP_PROXY': 'http', 'HTTPS_PROXY': 'https']
    for (e in System.getenv()) {
        def key = e.key.toUpperCase()
        if (key in map) {
            def base = map[key]
            //Get proxyHost,port, username, and password from http system properties 
            // in the format http://username:password@proxyhost:proxyport
            def (val1,val2) = e.value.tokenize( '@' )
            def (val3,val4) = val1.tokenize( '//' )
            def(userName, password) = val4.tokenize(':')
            def url = e.value.toURL()
            //println " - systemProp.${base}.proxy=${url.host}:${url.port}"
            System.setProperty("${base}.proxyHost", url.host.toString())
            System.setProperty("${base}.proxyPort", url.port.toString())
            System.setProperty("${base}.proxyUser", userName.toString())
            System.setProperty("${base}.proxyPassword", password.toString())
        }
    }
}

0

Window Menu --> Preferences --> General --> Network Connectionsถ้าคุณอยู่หลังพร็อกซี่และการใช้คราสไป เลือกผู้ให้บริการที่ใช้งานเป็น 'คู่มือ'

ภายใต้หัวข้อรายการพร็อกซีคลิกที่ HTTPS คลิกแก้ไขและเพิ่มพร็อกซีโฮสต์และพอร์ต หากต้องการชื่อผู้ใช้และรหัสผ่านให้ระบุเช่นกัน มันใช้งานได้สำหรับฉัน!


0

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

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