Configurazione proxy Gradle

Ho bisogno di un accesso web da Gradle attraverso un server proxy per utilizzare l’integrazione Gradle / Artifactory per Jenkins. Per ridurre le possibili cause di problemi, aggiungo manualmente il plugin Artifactory in build.gradle ed eseguilo dalla riga di comando:

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

Seguendo questa descrizione ho specificato quanto segue in .gradle / gradle.properties nella mia home directory:

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

Con la configurazione del proxy di cui sopra (che altrimenti funziona), non riesce:

11: 33: 17.699 [ERRORE] [org.gradle.BuildExceptionReporter] Causato da: java.io.IOException: il server ha restituito il codice di risposta HTTP: 407 per l’URL: http://gradle.artifactoryonline.com/gradle/plugins/org/ JFrog / buildinfo / buildinfo-estrattore-Gradle / 1.0.1 / artifactoryplugin-1.0.1.gradle

Ho due server proxy tra cui scegliere e uno risponde sempre con 407 ( autenticazione proxy richiesta ), l’altro con 502 ( gateway non valido), quindi, ovviamente, vengono utilizzate le opzioni proxyHost e proxyPort.

Poiché il nome utente (basato su un utente di Active Directory) contiene una barra rovesciata, ho provato sia \\ che \ , ma nessuno dei due ha funzionato. L’utente specificato è diverso dall’utente che ha effettuato l’accesso alla macchina e ad Active Directory. Le credenziali di questo utente non sono valide per il proxy, quindi devo essere in grado di specificare un utente diverso.

Ha funzionato l’impostazione delle stesse opzioni nella GUI di Jenkins o Artifactory.

    Raffinatezza sulla risposta di Daniel:

    Configurazione solo proxy HTTP

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

    Solo configurazione proxy HTTPS

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

    Configurazione del proxy HTTP e HTTPS

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

    Configurazione proxy con utente e password

    gradlew -Dhttp.proxyHost = 127.0.0.1 -Dhttp.proxyPort = 3128 – Dhttps.proxyHost = 127.0.0.1 -Dhttps.proxyPort = 3129 -Dhttps.proxyUser = utente -Dhttps.proxyPassword = pass -Dhttp.proxyUser = utente -Dhttp. proxyPassword = passaggio

    ha funzionato per me (con gradle.properties in gradle.properties o nella directory del progetto, la build non funzionava ancora). Grazie per aver segnalato il problema al gradle che ha fornito questa soluzione alternativa.

    Aggiornamento È inoltre ansible inserire queste proprietà in gradle-wrapper.properties (consultare: https://stackoverflow.com/a/50492027/474034 ).

    Questo è il mio gradle.properties, si prega di notare quelle porzione HTTPS

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

    Nel mio build.gradle ho il seguente compito, che usa le normali impostazioni del proxy linux, HTTP_PROXY e HTTPS_PROXY , HTTPS_PROXY della shell:

     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 

    Prova quanto segue:

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

    Utilizzando un semplice programma Java “Request a URL”, sono riuscito a replicare il problema.

    http.proxyUser e http.proxyPassword sembrano http.proxyPassword non standard, anche se popolari, in quanto non sono descritte nella pagina di riferimento Java collegata dal tutorial Gradle ; anche se il manuale Gradle le menziona.

    Sembra che i programmi Java che desiderano supportare l’autenticazione proxy debbano farlo manualmente (e sono riuscito a farlo usando il codice sulla pagina collegata).


    Ho inviato questo problema (e una correzione) al tracker dei problemi di Gradle . Il problema sollevato GRADLE-1556 è stato risolto in 1.0-milestone-8 (febbraio 2012)

    Per me, funziona aggiungendo questa configurazione nel file gradle.properties del progetto, dove il file 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 

    Dove: proxyUrl è l’URL del server proxy ( http: // ….. )

    proxyPort è la porta (di solito 8080)

    USER è il mio utente di dominio

    PASSWORD, la mia password

    In questo caso, il proxy per http e https è lo stesso

    Creare un file chiamato gradle.properties all’interno della cartella del progetto in cui è presente il file build.gradle . Aggiungi la seguente voce

      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 

    Se stai usando DNS per proxy, aggiungilo come systemProp.https.proxyHost=www.proxysite.com

    Per IP basta specificare l’IP con out http:// o https://
    Controlla il documento ufficiale gradle per maggiori dettagli e impostazione del proxy a livello globale

    Basato sulla risposta di SourceSimian; questo ha funzionato su account utente di dominio Windows. Si noti che il nome utente non include il dominio,

     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 

    Se sei dietro proxy e usi eclipse, vai a Window Menu --> Preferences --> General --> Network Connections . Seleziona i fornitori attivi come “Manuale”.

    Nella sezione Voci proxy, fai clic su HTTPS, fai clic su Modifica e aggiungi host e porta proxy. Se sono richiesti nome utente e password, dillo pure. Ha funzionato per me!

    Se il problema con l’errore HTTP 407 si verificava solo nei pacchetti selezionati, il problema non si trova nelle impostazioni proxy e nella connessione Internet. È persino ansible esporre il PC a Internet tramite NAT e comunque si troveranno ad affrontare questo problema. In genere allo stesso tempo è ansible scaricare i pacchetti desiderati nel browser. L’unica soluzione che trovo: elimina la cartella .gradle nel tuo profilo (non nel progetto). Dopo aver sincronizzato il progetto, ci vorrà molto tempo per ripristinare tutto.

    Ci sono 2 modi per usare Gradle dietro un proxy:

    Aggiungi argomenti nella riga di comando

    (Dal post di Guillaume Berche)

    Aggiungi questi argomenti nel comando gradle:

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

    o questi argomenti se stai usando https:

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

    Aggiungi righe nel file di configurazione gradle

    in gradle.properties aggiungi le seguenti righe:

     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 

    (per la posizione del file gradle.properties , fare riferimento alla documentazione ufficiale https://docs.gradle.org/current/userguide/build_environment.html

    Un aggiornamento alla risposta di @sourcesimian e @ kunal-b che imposta dynamicmente il nome utente e la password se configurati nelle proprietà del sistema.

    Il seguente imposta il nome utente e la password, se forniti, o aggiunge semplicemente l’host e la porta se non sono stati impostati nome utente e password.

     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()) } } } 

    Nel caso in cui provo a impostare il proxy da Android studio: Aspetto e comportamento => Impostazioni di sistema => Proxy HTTP. Ma il proxy non ha funzionato, quindi non faccio clic su alcun proxy.

    Il controllo NO PROXY non rimuoverà le impostazioni del proxy da gradle.properties (Global). Devi rimuoverlo manualmente.

    Quindi rimuovo tutte le proprietà che iniziano con systemProp per esempio – systemProp.http.nonProxyHosts = *. Local, localhost

    Controlla su c: \ Users \ nome utente \ .gradle \ gradle.properties:

     systemProp.http.proxyHost= systemProp.http.proxyPort= systemProp.http.proxyUser= systemProp.http.proxyPassword= systemProp.http.nonProxyHosts= systemProp.https.proxyHost= systemProp.https.proxyPort= systemProp.https.proxyUser= systemProp.https.proxyPassword= systemProp.https.nonProxyHosts=