代理背后的Gradlew

时间:2012-01-20 09:10:13

标签: gradle gaelyk

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

我支持代理。

我读过gradle docs并发现了这个:

gradle.properties

systemProp.http.proxyHost=www.somehost.org
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password

但我不知道如何将这些信息放入包装器gradlew中。有什么想法吗?

16 个答案:

答案 0 :(得分:62)

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

如果在用户主目录或项目目录中找到,

Gradle(包装器也是!!!)会自动选择gradle.properties个文件。

有关详情,请参阅Gradle user guide,尤其是第12.3节:Accessing the web via a proxy

答案 1 :(得分:39)

如果您需要代理后面的 https访问,请考虑为 systemProp.https 定义同一组属性。

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

有关详细信息,请参阅Can't build Android app using crashlytics behind VPN and proxy

答案 2 :(得分:19)

在提示行中使用:

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

在这里工作!

答案 3 :(得分:13)

如果您通过代理下载包装器,请在gradle.properties文件和gradle/wrapper/gradle-wrapper.properties文件中添加以下内容

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

## 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

答案 4 :(得分:9)

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

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

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

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

答案 5 :(得分:6)

使用Gradle 1.0-milestone-8修复了Gradle Wrapper的这个问题。试一试。

答案 6 :(得分:3)

为了添加更多细微差别,对于我的情况,当我在USER_HOME / .gradle和项目根目录中都有多个 gradle.properties文件时,我遇到了authenticationrequired 407错误,并带有以下报告:

CONNECT refused by proxy: HTTP/1.1 407 authenticationrequired

这导致我在USER_HOME / .gradle下的gradle.properties文件中显示systemProp.https.proxyPasswordsystemProp.http.proxyPassword 空白,而项目下的gradle.properties文件root仍然是密码信息。

不确定原因,但是当我删除项目根目录中的一个gradle.properties并将文件保存在USER_HOME / .gradle中时,我的案例就解决了。

答案 7 :(得分:2)

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

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命令在公司代理后面正常工作。我希望它有用。

答案 8 :(得分:1)

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

答案 9 :(得分:1)

起初这对我不起作用 在我的例子中,我创建了我认为是USER_HOME / .gradle / gradle.properties文件但最终得到了gradle.properties.txt文件。

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

然后mv gradle.properties.txt gradle.properties

答案 10 :(得分:1)

this JDK更新之后,我再也无法在代理后面使用gradlew。 最后我发现JDK默认禁用了HTTPS隧道的基本身份验证。 所以我必须为gradle.properties添加此属性以及代理设置

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

我希望对那些挣不起同样问题的人有所帮助

答案 11 :(得分:0)

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

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

systemProp.http.proxyHost=proxy.yourproxysite.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=yourusername
systemProp.http.proxyPassword=password

答案 12 :(得分:0)

设置SSl代理对我有用。

    <?xml version="1.0" encoding="UTF-8"?>
  <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"                      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <servlet>
    <servlet-name>FileEditServlet</servlet-name>
    <servlet-class>servlet.FileEditServlet</servlet-class>
</servlet>

<servlet-mapping>
     <servlet-name>FileEditServlet</servlet-name>
     <url-pattern>/FES</url-pattern>
</servlet-mapping>

</web-app>

答案 13 :(得分:0)

  

以下链接主题的摘录答案。它显示了如何做   这更具有计划性。希望它有所帮助

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

See this thread for more

答案 14 :(得分:0)

经过多次努力并将我的头撞在墙上,因为我系统上的没有使用代理:事实证明我的** Android Emulator实例**本身是秘密/通过Android Emulator静默设置代理&gt;设置&gt;代理并在几周前使用这些设置应用这些设置,以解决世博会的问题。

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

答案 15 :(得分:-3)

systemProp.http.proxyUser=userId
systemProp.http.proxyPassword=password

与https相同......