Gradle proxy configuration
Asked Answered
A

17

216

I need web access from Gradle through a proxy server to use the Gradle/Artifactory integration for Jenkins. To reduce possible causes for issues, I manually add the Artifactory plugin in build.gradle and run it from command line:

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

Following this description I specified the following in .gradle/gradle.properties in my home directory:

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

With the above proxy configuration (that is otherwise known to work), it fails:

11:33:17.699 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: java.io.IOException: Server returned HTTP response code: 407 for URL: http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle

I have two proxy servers to choose from, and one always responds with 407 (Proxy authentication required), the other with 502 (Bad gateway), so obviously, the proxyHost and proxyPort options are used.

As the user name (based on an Active Directory user) contains a backslash, I tried both \\ and \, but neither worked. The user specified is different from the user that is logged in to the machine and Active Directory. This user's credentials aren't valid for the proxy, so I need to be able to specify a different user.

Setting the same options in Jenkins' or Artifactory's GUI worked.

Amadoamador answered 13/5, 2011 at 11:27 Comment(5)
having the same problem, none of the answers here helped (even those following the deprecated/non-deprecated methods). then I realized https proxy MUST be set: https://mcmap.net/q/128378/-gradlew-behind-a-proxyInflexion
You should look at this url, more complete and updated (with http and https) : docs.gradle.org/current/userguide/…Synopsize
@GuillaumeHusta Thanks, but please note this question was posted more than 5 years ago when Gradle 0.8 was the latest release, and the documentation on this was just plain wrong (see my own response to this question).Amadoamador
I had this problem when using quotes in the proxy, use systemProp.http.proxyHost=x.y.z not systemProp.http.proxyHost='x.y.z'Irregular
Deadlink: gradle.org/releases/0.8/docs/userguide/…Terrier
A
24

Using a very simple "Request a URL" Java program, I was able to replicate the issue.

http.proxyUser and http.proxyPassword seem to be non-standard, albeit popular, options, as they're not described in the Java reference page linked from the Gradle tutorial; even though the Gradle manual mentions them.

It seems Java programs that wish to support proxy authentication need to do this manually (and I was able to do this using the code on the linked page).


I submitted this issue (and a fix) to the Gradle issue tracker. Raised issue GRADLE-1556 was resolved in 1.0-milestone-8 (Feb 2012)

Amadoamador answered 13/5, 2011 at 13:57 Comment(2)
The linked block comes up for me as invitation-only. Is there a public example of this workaround?Standard
@yock See the attachment of the issue I submitted to Gradle, it's very similar.Amadoamador
S
258

Refinement over Daniel's response:

HTTP Only Proxy configuration

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

HTTPS Only Proxy configuration

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

Both HTTP and HTTPS Proxy configuration

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

Proxy configuration with user and password

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

worked for me (with gradle.properties in either homedir or project dir, build was still failing). Thanks for pointing the issue at gradle that gave this workaround. See reference doc at https://docs.gradle.org/current/userguide/build_environment.html#sec:accessing_the_web_via_a_proxy

Update You can also put these properties into gradle-wrapper.properties (see: https://mcmap.net/q/128379/-intellij-http-proxy-works-but-fails-at-gradle-dependencies).

Solatium answered 26/3, 2014 at 16:1 Comment(8)
helped me too when using cntlmDisbranch
how do u remove proxy?Schoenberg
also -Dhttps.proxyUser=user -Dhttps.proxyPassword=passLaval
in which file we add this settings do we have any file like gradlew.properties? or it goes with gradle.properties file?Solifidian
If you put the properties into ~/.gradle/gradle.properties make sure you prefix the properties with systemProp, like for example systemProp.http.proxyHost=127.0.0.1Wisconsin
@akirti: There is ~/.gradle/gradle-wrapper.properties which is read by gradlew. See: https://mcmap.net/q/128379/-intellij-http-proxy-works-but-fails-at-gradle-dependenciesGall
I tried this and didn't work for me. I had to set the options (-Dhttp.proxyHost and the likes) as JAVA_OPTS environment variable in order to make it work.Alcoholicity
The most important info is ALWAYS missing - like here. These settings -D... need to be the FIRST and before the tasks to execute on the gradlew command! This is why some people (like me) struggle to make this work! With JAVA_OPTS and _JAVA_OPTIONS you don't have this problem... Please MENTION how important the order is!Bart
E
105

This is my gradle.properties, please note those HTTPS portion

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8118
Epidermis answered 6/5, 2016 at 18:54 Comment(0)
L
69

In my build.gradle I have the following task, which uses the usual linux proxy settings, HTTP_PROXY and HTTPS_PROXY, from the 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
Lareine answered 10/11, 2015 at 18:6 Comment(6)
It's fun! It is your root's build.gradle or app's build.gradle?Exam
Works on Windows 7 as well! This should be the accepted answer!Pyramidon
Thanks! the above worked for configuration that doesn't need a proxy password. I have modified it to work with or w/o proxy password see belowKarnak
if (key in map.keySet()) {Surely
This should be a default (if it added the NO_PROXY env variable as well)Sanguinaria
Add it to ~/.gradle/init.d/ as a gradle init script. This way, it will initialize all your gradle builds based on your env variables without having to copy the snippet from project to project.Illusory
S
34

For me, works adding this configuration in the gradle.properties file of the project, where the build.gradle file is:

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

Where : proxyUrl is the url of the proxy server (http://.....)

proxyPort is the port (usually 8080)

USER is my domain user

PASSWORD, my password

In this case, the proxy for http and https is the same

Skepful answered 8/9, 2016 at 13:57 Comment(0)
A
33

Check out at c:\Users\your username\.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 | >
Alexandraalexandre answered 3/9, 2018 at 14:17 Comment(6)
@MurrayFoxcroft Where do you see a link in that answer?Hau
Basically a link to the local machine and a file dump. Please describe the answer in more detail.Gild
superrrrrr tnx, u may don't realize how useful ur post was for me but still big thanksTinge
@SeyedAliRoshan How can we pass proxyUser and password by argument ? i dont want to user globle gradle.propaerties file.Gustafson
@Gustafson did u try to use the proxy setting inside the gradle of your project?Tinge
@SeyedAliRoshan yes, If I add all above variable on the gradle.properties then I can download gradle-wrapper pkgs from artifactory but those variable are not safe to keep in the server or project. So I have to pass variable for download the gradle-wrapper.Gustafson
A
24

Using a very simple "Request a URL" Java program, I was able to replicate the issue.

http.proxyUser and http.proxyPassword seem to be non-standard, albeit popular, options, as they're not described in the Java reference page linked from the Gradle tutorial; even though the Gradle manual mentions them.

It seems Java programs that wish to support proxy authentication need to do this manually (and I was able to do this using the code on the linked page).


I submitted this issue (and a fix) to the Gradle issue tracker. Raised issue GRADLE-1556 was resolved in 1.0-milestone-8 (Feb 2012)

Amadoamador answered 13/5, 2011 at 13:57 Comment(2)
The linked block comes up for me as invitation-only. Is there a public example of this workaround?Standard
@yock See the attachment of the issue I submitted to Gradle, it's very similar.Amadoamador
E
24

Try the following:

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

Encyst answered 15/12, 2014 at 18:49 Comment(2)
Consider when this question was asked. The issue I link to in my answer was marked resolved towards Gradle 1.0-milestone-8…Amadoamador
@Daniel this question was first thing that popped up, when I searched for "gradle proxy", I skimmed the answers and that one was the clearest one for my need...Dimitri
E
13

Create a file called gradle.properties inside the project folder where the build.gradle file is present. Add the following entry

     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

If you are using DNS for proxy then add it like systemProp.https.proxyHost=www.proxysite.com

For IP just specify the IP with out http:// or https://
Check gradle official doc for more details and setting up proxy at global level

Extremist answered 8/11, 2017 at 11:19 Comment(0)
S
10

There are 2 ways for using Gradle behind a proxy :

Add arguments in command line

(From Guillaume Berche's post)

Add these arguments in your gradle command :

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

or these arguments if you are using https :

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

Add lines in gradle configuration file

in gradle.properties add the following lines :

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

(for gradle.properties file location, please refer to official documentation https://docs.gradle.org/current/userguide/build_environment.html


EDIT : as said by @Joost : A small but important detail that I initially overlooked: notice that the actual host name does NOT contain http:// protocol part of the URL...

Sectarianize answered 2/2, 2018 at 12:0 Comment(1)
A small but important detail that I initially overlooked: notice that the actual host name does NOT contain http:// protocol part of the URL...Bonkers
C
6

Based on SourceSimian's response; this worked on Windows domain user accounts. Note that the Username does not have domain included,

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
Calysta answered 28/12, 2017 at 19:3 Comment(1)
Thanks! There is an update on how to get proxy username and passwords dynamically belowKarnak
R
4

Edit your ~/.gradle/gradle.properties file, then add the following:

org.gradle.jvmargs=-DsocksProxyHost\=127.0.0.1 -DsocksProxyPort\=1080 -DhttpProxyHost\=127.0.0.1 -DhttpProxyPort\=1081 -DhttpsProxyHost\=127.0.0.1 -DhttpsProxyPort\=1081
  • DsocksProxyHost is the socks5 proxy host
  • DhttpProxyHost is the http proxy host
  • DhttpsProxyHost is the https proxy host

It worked for me.

Ruvolo answered 3/8, 2021 at 3:9 Comment(0)
I
2

In case my I try to set up proxy from android studio Appearance & Behaviour => System Settings => HTTP Proxy. But the proxy did not worked out so I click no proxy.

Checking NO PROXY will not remove the proxy setting from the gradle.properties(Global). You need to manually remove it.

So I remove all the properties starting with systemProp for example - systemProp.http.nonProxyHosts=*.local, localhost

Ianteen answered 15/5, 2018 at 13:3 Comment(1)
I've been ripping my hair out for an hour, apparently on Mac, these properties were auto-added to my ~/.gradle/gradle.properties. Thanks for pointing it out.Projective
K
1

An update to @sourcesimian 's and @kunal-b's answer which dynamically sets the username and password if configured in the system properties.

The following sets the username and password if provided or just adds the host and port if no username and password is set.

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())
        }
    }
}
Karnak answered 26/3, 2018 at 18:14 Comment(0)
I
1

In the kotlin .kts setting files the properties should be defined like this:

extra["systemProp.http.proxyHost"]="127.0.0.1"
extra["systemProp.http.proxyPort"]="12345"
Insertion answered 20/8, 2021 at 6:4 Comment(0)
U
0

If this issue with HTTP error 407 happened to selected packages only then the problem is not in the proxy setting and internet connection. You even may expose your PC to the internet through NAT and still will face this problem. Typically at the same time you can download desired packages in browser. The only solution I find: delete the .gradle folder in your profile (not in the project). After that sync the project, it will take a long time but restore everything.

Unlash answered 3/11, 2017 at 12:51 Comment(0)
G
0

If you are using flutter, add the following line in android/gradle.properties

systemProp.http.nonProxyHosts=*.local, localhost
Gluteal answered 23/5, 2021 at 18:47 Comment(0)
L
0

I met the same issue after I installed an older version of SDK and set JAVA_HOME in .zshrc. None of the solutions above helped me out, however, restarting my computer (Mac) finally let the error disappear.

Lupe answered 23/8, 2021 at 16:9 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.