关于gradle:Gradlew背后的代理

Gradlew behind a proxy

我有一个来自Gaelyk(称为Bloogie)的样本,它正在使用gradlew。

我是代理人。

我阅读了gradle文档,发现了这一点:

gradle.properties

1
2
3
4
systemProp.http.proxyHost=www.somehost.org
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password

但是我不知道如何将该信息放入包装器gradlew中。 任何想法?


您要做的就是创建一个名为gradle.properties的文件(具有上面提到的属性),并将其放在gradle用户的主目录(默认为USER_HOME/.gradle)下或项目目录中。

如果在用户主目录或项目目录中找到,Gradle(包装器也!!)会自动拾取gradle.properties文件。

有关更多信息,请阅读Gradle用户指南,特别是在12.3节:通过代理访问Web上


如果您需要在代理后面进行https访问,请考虑为systemProp.https定义相同的属性集。

1
2
systemProp.https.proxyHost=www.somehost.org
systemProp.https.proxyPort=8080

有关更多信息,请参阅使用VPN和代理后面的crashlytics不能构建Android应用。


在提示行中使用此命令:

1
gradle -Dhttp.proxyHost=***  -Dhttp.proxyPort=*** -Dhttp.proxyUser=**** -Dhttp.proxyPassword=****

在这里工作!


如果要通过代理下载包装器,则将以下内容添加到gradle.properties文件和gradle/wrapper/gradle-wrapper.properties文件中

如果要全局设置这些属性,则将其添加到USER_HOME/.gradle/gradle.properties file

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## Proxy setup
systemProp.proxySet=true
systemProp.http.keepAlive=true
systemProp.http.proxyHost=host
systemProp.http.proxyPort=port
systemProp.http.proxyUser=username
systemProp.http.proxyPassword=password
systemProp.http.nonProxyHosts=local.net|some.host.com

systemProp.https.keepAlive=true
systemProp.https.proxyHost=host
systemProp.https.proxyPort=port
systemProp.https.proxyUser=username
systemProp.https.proxyPassword=password
systemProp.https.nonProxyHosts=local.net|some.host.com
## end of proxy setup

在设置https代理之前,我无法使proxy属性起作用:

1
2
systemProp.https.proxyHost=www.somehost.org
systemProp.https.proxyPort=8080

但是,我必须使用http属性作为用户名和密码:

1
2
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password

Gradle包装器的此问题已通过Gradle 1.0-milestone-8修复。试一试。


为了增加更多细微差别,就我而言,当我在USER_HOME / .gradle和项目根目录中都有多个gradle.properties文件时,遇到以下身份验证所需的407错误,如下所示:

CONNECT refused by proxy: HTTP/1.1 407 authenticationrequired

这在USER_HOME / .gradle下的gradle.properties文件中导致我的systemProp.https.proxyPasswordsystemProp.http.proxyPassword空白,而项目根目录下的gradle.properties文件仍然是密码信息。
不确定确切原因,但是当我在项目根目录中删除一个gradle.properties并将文件保留在USER_HOME / .gradle中时,我的情况已解决。


在此JDK更新之后,我无法在代理后面再次使用gradlew。
最后,我发现默认情况下,JDK已禁用HTTPS隧道的基本身份验证。
因此,除了代理设置外,我还必须为gradle.properties添加此属性。

1
systemProp.jdk.http.auth.tunneling.disabledSchemes=""

希望对遇到同样问题的人有所帮助


我有同样的问题,做的第一件事是创建gradle.properties。我没有这样的文件,因此应使用以下内容创建它:

1
2
3
4
5
6
systemProp.http.proxyHost=proxy
systemProp.http.proxyPort=port
systemProp.http.nonProxyHosts=domainname|localhost
systemProp.https.proxyHost=proxy
systemProp.https.proxyPort=port
systemProp.https.nonProxyHosts=domainname|localhost

当我添加它们时,gradlew命令在公司代理后面正常工作。我希望它会有用。


起初这对我不起作用。
就我而言,我创建了我认为是USER_HOME / .gradle / gradle.properties文件的文件,但最终创建了gradle.properties.txt文件。

在终端窗口中,ls命令将显示.gradle文件夹中的完整文件名。

然后mv gradle.properties.txt gradle.properties


我发现从gradle.properties读取属性可能不正确。如果行包含尾部空白,则gradle无法找到代理。检查您的代理文件,并在行尾剪切空白。可以帮忙


设置SSl代理对我有用。

1
2
3
4
systemProp.http.proxyHost=proxy.yourproxysite.com
systemProp.http.proxyPort=8080
systemProp.https.proxyHost=proxy.yourproxysite.com
systemProp.https.proxyPort=8080

使用Cordova项目时,我遇到相同的代理问题。

要解决此问题,我在我的Cordova项目(hello/platforms/android)的android文件夹下创建了一个新的gradle.properties文件,并添加了问题中的代码

1
2
3
4
systemProp.http.proxyHost=proxy.yourproxysite.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=yourusername
systemProp.http.proxyPassword=password


经过很多努力并把我的头撞在墙上之后,因为我的系统上没有使用代理:事实证明,我的** Android Emulator实例**本身正在通过Android Emulator秘密/无声地为我设置代理> 设置>代理,并已在几周前使用这些设置来解决Expo的问题。

如果有人遇到此问题,请确保您检查100%,以查看是否确实没有通过以下方式使用自定义代理设置:./gradlew installDebug --info --debug --stacktrace,并在日志输出中搜索proxyHost以确保做到这一点。 可能是您的模拟器。


An excerpted answer from the linked thread below. It shows how to do
this more programtically. Hope it helps

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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())
        }
    }
}

看到这个线程更多


1
2
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password

与https一样......