it-swarm.com.de

Proxy-Konfiguration für Stufen

Ich brauche einen Webzugriff von Gradle über einen Proxyserver, um die Integration von Gradle/Artifactory für Jenkins zu verwenden. Um mögliche Ursachen für Probleme zu reduzieren, füge ich das Artifactory-Plugin manuell in build.gradle hinzu und führe es von der Befehlszeile aus:

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

Nach der Beschreibung von this habe ich in .gradle/gradle.properties in meinem Home-Verzeichnis Folgendes angegeben:

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

Mit der obigen Proxy-Konfiguration (die sonst bekanntermaßen funktioniert) schlägt dies fehl:

11: 33: 17.699 [ERROR] [org.gradle.BuildExceptionReporter] Verursacht von: Java.io.IOException: Der Server hat den HTTP-Antwortcode zurückgegeben: 407 für URL: http://gradle.artifactoryonline.com/gradle/plugins/ org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle

Ich habe zwei Proxy-Server zur Auswahl, und einer antwortet immer mit 407 (Proxy-Authentifizierung erforderlich), der andere mit 502 (Bad gateway). Daher werden offensichtlich die Optionen ProxyHost und ProxyPort verwendet.

Da der Benutzername (basierend auf einem Active Directory-Benutzer) einen Backslash enthält, habe ich sowohl \\ als auch \ ausprobiert, aber keiner hat funktioniert. Der angegebene Benutzer unterscheidet sich von dem Benutzer, der am Computer und am Active Directory angemeldet ist. Die Anmeldeinformationen dieses Benutzers sind für den Proxy nicht gültig. Daher muss ich einen anderen Benutzer angeben können.

Die gleichen Optionen in der GUI von Jenkins oder Artifactory einzustellen.

115
Daniel Beck

Mit einem sehr einfachen Programm "Request a URL" Java konnte ich das Problem replizieren.

http.proxyUser und http.proxyPassword scheinen keine Standardoptionen zu sein, auch wenn sie sehr beliebt sind, da sie nicht auf der Java Referenzseite beschrieben sind, die von der verlinkt ist Gradle Tutorial ; obwohl das Gradle-Handbuch sie erwähnt.

Es scheint, dass Java Programme, die die Proxy-Authentifizierung unterstützen möchten, dies manuell tun müssen (und ich konnte dies mit dem Code auf der verlinkten Seite tun).


Ich habe dieses Problem (und einen Fix) an den Gradle-Issue-Tracker gesendet. Erhöhtes Problem GRADLE-1556 wurde in 1.0-Meilenstein-8 behoben (Feb 2012)

22
Daniel Beck

Verfeinerung über Daniels Antwort: 

Nur HTTP-Proxy-Konfiguration

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128

HTTPS Only Proxy-Konfiguration

gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129

Sowohl HTTP- als auch HTTPS-Proxy-Konfiguration

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129

Proxy-Konfiguration mit Benutzer und Passwort 

gradlew -Dhttp.proxyHost = 127.0.0.1 -Dhttp.proxyPort = 3128 - Dhttps.proxyHost = 127.0.0.1 -Dhttps.proxyPort = 3129 -Dhttps.proxyUser = Benutzer -Dhttps.proxyPassword = übergeben -Dhttp.proxyUser = Benutzer -Dhttp.proxyPassword = übergeben

arbeitete für mich (mit gradle.properties in homedir oder project dir, Build fehlgeschlagen). Vielen Dank, dass Sie das Problem auf gradle verwiesen haben, das diese Problemumgehung gegeben hat.

Update Sie können diese Eigenschaften auch in gradle-wrapper.properties eingeben (siehe: https://stackoverflow.com/a/50492027/474034 ).

175

Dies ist meine gradle.properties, bitte beachten Sie diesen HTTPS-Teil

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8118
44
Kampau Ocu

In meinem build.gradle habe ich die folgende Aufgabe, die die üblichen Linux-Proxy-Einstellungen HTTP_PROXY und HTTPS_PROXY aus der Shell-Umgebung verwendet:

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
42
SourceSimian

Versuche Folgendes:

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

23
Raphael Vitor

Für mich fügt es diese Konfiguration in der Datei gradle.properties des Projekts hinzu, in der sich die Datei build.gradle befindet:

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

Wobei: ProxyUrl die URL des Proxy-Servers ist ( http: // .... .)

proxyPort ist der Port (normalerweise 8080)

USER ist mein Domain-Benutzer

PASSWORT, mein Passwort

In diesem Fall ist der Proxy für http und https derselbe

19
rtrujillor

Erstellen Sie im Projektordner eine Datei mit dem Namen gradle.properties, in der sich die build.gradle-Datei befindet. Fügen Sie den folgenden Eintrag hinzu 

     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

Wenn Sie DNS für Proxy verwenden, fügen Sie es wie systemProp.https.proxyHost=www.proxysite.com hinzu.

Für IP geben Sie einfach die IP ohne out http:// oder https://.__ an.
Überprüfen Sie Gradle Official Doc für weitere Details und die Einrichtung von Vertretungen auf globaler Ebene

10
user2720864

Basierend auf der Antwort von SourceSimian; Dies funktionierte auf Windows-Domänenbenutzerkonten. Beachten Sie, dass Benutzername keine Domäne enthält.

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
6
Kunal B.

Check out bei c:\Benutzer\Ihr Benutzername\.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>
4
Charles Tempo

Es gibt zwei Möglichkeiten, Gradle hinter einem Proxy zu verwenden:

Fügen Sie Argumente in der Befehlszeile hinzu

(Aus dem Beitrag von Guillaume Berche) 

Fügen Sie diese Argumente in Ihrem Gradle-Befehl hinzu:

-Dhttp.proxyHost=your_proxy_http_Host -Dhttp.proxyPort=your_proxy_http_port

oder diese Argumente, wenn Sie https verwenden: 

-Dhttps.proxyHost=your_proxy_https_Host -Dhttps.proxyPort=your_proxy_https_port

Zeilen in der Gradle-Konfigurationsdatei hinzufügen

in gradle.properties fügen Sie folgende Zeilen hinzu:

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

(Den Ort der gradle.properties-Datei finden Sie in der offiziellen Dokumentation https://docs.gradle.org/current/userguide/build_environment.html

1
Thibault

Ein Update auf @sourcesimians und @ kunal-bs answer, das den Benutzernamen und das Kennwort dynamisch festlegt, wenn dies in den Systemeigenschaften konfiguriert ist.

Im Folgenden werden der Benutzername und das Kennwort festgelegt, falls angegeben, oder nur der Host und der Port hinzugefügt, wenn kein Benutzername und Kennwort festgelegt sind. 

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:pa[email protected]: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())
        }
    }
}
1
Norbert

Falls ich versuche, einen Proxy aus dem Android Studio einzurichten, klicken Sie auf Aussehen und Verhalten => Systemeinstellungen => HTTP-Proxy. Aber der Proxy hat nicht geklappt, also klicke ich auf keinen Proxy.

Durch die Überprüfung von NO PROXY wird die Proxy-Einstellung nicht aus der .__ entfernt. gradle.properties (Global). Sie müssen es manuell entfernen.

Also entferne ich alle Eigenschaften, die mit systemProp beginnen, zum Beispiel - systemProp.http.nonProxyHosts = *. Local, localhost

0
Anirban

Wenn Sie sich hinter Proxy befinden und Eclipse verwenden, gehen Sie zu Window Menu --> Preferences --> General --> Network Connections. Wählen Sie die aktiven Anbieter als "Manuell" aus.

Klicken Sie im Abschnitt Proxyeinträge auf HTTPS, klicken Sie auf Bearbeiten, und fügen Sie Proxy-Host und -Port hinzu. Wenn Benutzername und Passwort erforderlich sind, geben Sie dies ebenfalls an. Es hat für mich funktioniert!

0
whoami

Wenn dieses Problem mit dem HTTP-Fehler 407 nur bei ausgewählten Paketen aufgetreten ist, liegt das Problem nicht in der Proxy-Einstellung und der Internetverbindung. Sie können Ihren PC sogar über NAT dem Internet aussetzen und werden dennoch mit diesem Problem konfrontiert. Normalerweise können Sie die gewünschten Pakete gleichzeitig im Browser herunterladen. Die einzige Lösung, die ich finde: Löschen Sie den Ordner .gradle in Ihrem Profil (nicht im Projekt). Nachdem das Projekt synchronisiert wurde, dauert es lange, aber es wird alles wiederhergestellt.

0
Almaz