Gradle proxy yapılandırması


162

Jenkins için Gradle / Artifactory entegrasyonu kullanmak için Gradle bir proxy sunucu üzerinden web erişimi gerekir. Sorunların olası nedenlerini azaltmak için, artifactory eklentisini build.gradle dosyasına manuel olarak ekler ve komut satırından çalıştırırım:

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

Bu açıklamanın ardından ana dizinimde .gradle / gradle.properties dosyasında aşağıdakileri belirttim:

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

Yukarıdaki proxy yapılandırmasıyla (aksi takdirde çalıştığı bilinen) başarısız olur:

11: 33: 17.699 [HATA] [org.gradle.BuildExceptionReporter] Neden: java.io.IOException: Sunucu URL için HTTP yanıt kodu: 407 döndürdü: http://gradle.artifactoryonline.com/gradle/plugins/org/ jfrog / buildinfo / buildinfo-çıkarıcı gradle / 1.0.1 / artifactoryplugin-1.0.1.gradle

Aralarından seçim yapabileceğim iki proxy sunucum var ve biri her zaman 407( Proxy kimlik doğrulaması gerekli ), diğer 502( Kötü ağ geçidi ) ile yanıt veriyor , bu yüzden açıkça, proxyHost ve proxyPort seçenekleri kullanılıyor.

(Active Directory kullanıcı temelli) kullanıcı adı bir ters içeriyor gibi, ben de denedim \\ve \fakat hiçbiri çalıştı. Belirtilen kullanıcı, makinede ve Active Directory'de oturum açan kullanıcıdan farklı. Bu kullanıcının kimlik bilgileri proxy için geçerli değil, bu yüzden farklı bir kullanıcı belirleyebilmem gerekiyor.

Jenkins 'veya Artifactory'nin GUI'sinde aynı seçenekleri ayarlamak işe yaradı.


1
aynı soruna sahipken, buradaki yanıtların hiçbiri yardımcı olmadı (kullanımdan kaldırılan / kullanımdan kaldırılan yöntemleri takip edenler bile). sonra https proxy ayarlanması GEREKİR fark ettim : stackoverflow.com/a/27686730/1024839
hkoosha

Bu URL'ye daha eksiksiz ve güncellenmiş olarak bakmalısınız
Guillaume Husta

@GuillaumeHusta Teşekkürler, ancak lütfen bu sorunun Gradle 0.8'in en son sürüm olduğu 5 yıldan fazla bir süre önce gönderildiğini ve bununla ilgili belgelerin sadece yanlış olduğunu unutmayın (bu soruya kendi yanıtımı görün).
Daniel Beck


Yanıtlar:


212

Daniel'in yanıtı hakkında ayrıntılandırma:

Yalnızca HTTP Proxy yapılandırması

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

Yalnızca HTTPS Proxy yapılandırması

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

Hem HTTP hem de HTTPS Proxy yapılandırması

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

Kullanıcı ve parola ile proxy yapılandırması

gradlew -Dhttp.proxyHost = 127.0.0.1 -Dhttp.proxyPort = 3128 - Dhttps.proxyHost = 127.0.0.1 -Dhttps.proxyPort = 3129 -Dhttps.proxyUser = kullanıcı -Dhttps.proxyPassword = pass -Dhttp.proxyUser-kullanıcı. proxyPassword = pass -Dhttp.nonProxyHosts = host1.com | host2.com

benim için çalıştı ( gradle.propertiesya homedir ya da proje dir, inşa hala başarısız oldu). Bu geçici çözümü veren sorunu not ettiğiniz için teşekkür ederiz. Https://docs.gradle.org/current/userguide/build_environment.html#sec:accessing_the_web_via_a_proxy adresindeki referans dokümana bakın.

Güncelle Bu özellikleri içine de koyabilirsiniz gradle-wrapper.properties(bkz . Https://stackoverflow.com/a/50492027/474034 ).


4
cntlm kullanırken bana yardımcı oldu
asukasz Siwiński

5
proxy nasıl kaldırılır?
Jonathan

2
ayrıca -Dhttps.proxyUser = kullanıcı -Dhttps.proxyPassword = pass
Owen B

10
Özellikleri koyduğunuzda, örneğin ~/.gradle/gradle.propertiesön systemPropsystemProp.http.proxyHost=127.0.0.1
ekleriyle

1
Bunu denedim ve benim için çalışmadı. Çalışması için seçenekleri ( -Dhttp.proxyHostve beğenileri) JAVA_OPTSortam değişkeni olarak ayarlamak zorunda kaldım .
GoldenD

66

Bu benim mezunum. Özellikler, lütfen bu HTTPS bölümünü not edin

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

55

Benim içinde build.gradleher zamanki linux proxy ayarlarını kullanır, şu görevi vardır HTTP_PROXYve HTTPS_PROXYkabuk env gelen,:

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
Komik! Kökünüzün build.gradle veya uygulamanın build.gradle?
Miao1007

1
Windows 7'de de çalışıyor! Bu kabul edilen cevap olmalı!

1
Teşekkürler! yukarıdakiler proxy şifresi gerektirmeyen yapılandırma için çalıştı. Proxy şifresi ile veya w / o olmadan çalışmak için değiştirdim Aşağıya bakın
Norbert

if (anahtar map.keySet ()) {
JustAnotherCoder

en iyi cevap. java ekosisteminin kutudan
çıktığı gibi olsaydı

26

Benim için, bu yapılandırmayı build.gradle dosyasının olduğu projenin gradle.properties dosyasına ekleyerek çalışır:

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

Burada: proxyUrl, proxy sunucusunun URL'sidir ( http: // ..... )

proxyPort bağlantı noktasıdır (genellikle 8080)

USER alan adı kullanıcım

ŞİFRE, şifrem

Bu durumda, http ve https proxy'si aynıdır


23

Takip etmeyi dene:

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


2
Bu sorunun ne zaman sorulduğunu düşünün. Cevabımda bağlantı verdiğim konu Gradle 1.0-milestone-8… 'e doğru çözüldü olarak işaretlendi…
Daniel Beck

2
@Daniel bu soru ortaya çıkan ilk şeydi, "vekil vekil" aradığımda, cevapları
sıyırdım

22

Bir kullanılması çok basit "bir URL isteyin" Java programı, ben sorunu çoğaltmak başardı.

http.proxyUserve Gradle eğiticisinden bağlanan Java başvuru sayfasındahttp.proxyPassword açıklanmadığı için popüler olsa da standart olmayan seçenekler gibi görünüyor ; Gradle kılavuzu bunlardan bahsetmesine rağmen.

Proxy kimlik doğrulamasını desteklemek isteyen Java programlarının bunu manuel olarak yapması gerekiyor (ve bağlantılı sayfadaki kodu kullanarak bunu yapabildim).


Bu sorunu (ve bir düzeltmeyi) Gradle sorun izleyicisine gönderdim . Ortaya çıkan sorun GRADLE-1556, 1.0 kilometre taşı-8'de çözüldü (Şub 2012)


Bağlantılı blok benim için sadece davet olarak geliyor. Bu geçici çözümün herkese açık bir örneği var mı?
Mike Yockey

@yock Gradle'a gönderdiğim sorunun ekine bakın, çok benzer.
Daniel Beck

19

C: \ Kullanıcılar \ kullanıcı adınız \ .gradle \ gradle.properties adresini ziyaret edin:

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 Bu cevapta bir bağlantı nerede görüyorsunuz?
Max Vollmer

Temelde yerel makineye bir bağlantı ve bir dosya dökümü. Lütfen cevabı daha ayrıntılı olarak açıklayınız.
Murray Foxcroft

superrrrrr tnx, u yayının benim için ne kadar yararlı olduğunu fark etmeyebilir ama yine de büyük teşekkürler
Seyed Ali Roshan

@SeyedAliRoshan proxyUser ve parolayı bağımsız olarak nasıl iletebiliriz? Kullanıcı globle gradle.propaerties dosyasını istemiyorum.
Nullpointer

@Nullpointer projenizin notu içindeki proxy ayarını kullanmaya çalıştınız mı?
Seyed Ali Roshan

12

Dosyanın gradle.propertiesbulunduğu proje klasörü içinde adlandırılan bir dosya oluşturun build.gradle. Aşağıdaki girişi ekleyin

     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

Proxy için DNS kullanıyorsanız, aşağıdaki gibi ekleyin systemProp.https.proxyHost=www.proxysite.com

IP için daha fazla ayrıntı ve global düzeyde proxy kurulumu için IP'yi dışarıda http://veya Gradle resmi dokümanıhttps://
kontrol et


9

Gradle'ı bir proxy'nin arkasında kullanmanın 2 yolu vardır:

Komut satırına bağımsız değişkenler ekleme

(Guillaume Berche'nin gönderisinden)

Gradle komutunuza şu bağımsız değişkenleri ekleyin:

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

veya https kullanıyorsanız bu bağımsız değişkenleri:

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

Sınıf yapılandırma dosyasına satır ekleme

içinde gradle.properties aşağıdaki satırları ekleyin:

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.propertiesdosya konumu için lütfen resmi belgelere bakın https://docs.gradle.org/current/userguide/build_environment.html


DÜZENLEME: @Joost tarafından söylendiği gibi: Başlangıçta gözden kaçan küçük ama önemli bir ayrıntı: gerçek ana bilgisayar adı http:// URL protokol parçası içermiyor dikkat edin ...


1
Başlangıçta göz ardı ettiğim küçük ama önemli bir ayrıntı: gerçek ana bilgisayar adının http://URL'nin protokol kısmını içermediğine dikkat edin ...
Joost

5

SourceSimian'ın yanıtına dayanarak; bu, Windows etki alanı kullanıcı hesaplarında çalıştı. Not o adı yok olması alanı dahil

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

Teşekkürler! Proxy kullanıcı adı ve parolalarını dinamik olarak aşağıda nasıl alacağınıza dair bir güncelleme var
Norbert

2

Benim android stüdyo proxy kurmak için denemek durumunda Görünüm & Davranış => Sistem Ayarları => HTTP Proxy. Ama proxy işe yaramadı bu yüzden hiçbir proxy tıklayın.

Denetleme YOK PROXY gradle.properties (Global) proxy ayarı kaldırmaz. Manuel olarak kaldırmanız gerekir.

Bu yüzden systemProp ile başlayan tüm özellikleri kaldırırım - systemProp.http.nonProxyHosts = *. Local, localhost


Görünüşe göre Mac'te saçlarımı bir saat kadar söküyordum, bu özellikler otomatik olarak eklenmişti ~/.gradle/gradle.properties. Gösterdiğiniz için teşekkürler.
EpicPandaForce

1

@Sourcesimian ve @ kunal -b'nin yanıtında, sistem özelliklerinde yapılandırılırsa kullanıcı adını ve parolayı dinamik olarak ayarlayan bir güncelleştirme .

Aşağıdakiler, sağlandıysa kullanıcı adını ve parolayı ayarlar veya kullanıcı adı ve parola ayarlanmamışsa yalnızca ana makine ve bağlantı noktasını ekler.

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

Proxy'nin arkasında ve tutulma kullanıyorsanız, adresine gidin Window Menu --> Preferences --> General --> Network Connections. Aktif Sağlayıcıları 'Manuel' olarak seçin.

Proxy girişleri bölümünün altında HTTPS'yi tıklayın, Düzenle'yi tıklayın ve proxy ana bilgisayarı ve bağlantı noktasını ekleyin. Kullanıcı adı ve şifre gerekiyorsa, bunu da verin. Benim için çalıştı!


0

HTTP hatası 407 ile ilgili bu sorun yalnızca seçilen paketlere geldiyse, sorun proxy ayarında ve internet bağlantısında değildir. PC'nizi NAT aracılığıyla internete bile maruz bırakabilirsiniz ve yine de bu sorunla karşılaşacaksınız. Genellikle aynı anda istediğiniz paketleri tarayıcıya indirebilirsiniz. Bulduğum tek çözüm: profilinizdeki .gradle klasörünü silin (projede değil). Bu projeyi senkronize ettikten sonra, uzun zaman alacak, ancak her şeyi geri yükleyecek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.