我需要通过代理服务器从Gradle进行Web访问,以便为Jenkins使用Gradle / Artifactory集成。为了减少问题的可能原因,我在build.gradle中手动添加Artifactory插件并从命令行运行它:
apply {
apply from: "http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle"
}
在this描述之后,我在主目录中的.gradle / gradle.properties中指定了以下内容:
systemProp.http.proxyHost=hostname
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=de\\username
systemProp.http.proxyPassword=xxx
使用上面的代理配置(已知可以工作),它会失败:
11:33:17.699 [ERROR] [org.gradle.BuildExceptionReporter]引起:java.io.IOException:服务器返回HTTP响应代码:407为URL:http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle
我有两个代理服务器可供选择,一个总是以407
(需要代理身份验证)响应,另一个用502
响应( Bad gateway < / em>),显然,使用了proxyHost和proxyPort选项。
由于用户名(基于Active Directory用户)包含反斜杠,我尝试了\\
和\
,但都没有效果。指定的用户与登录到计算机和Active Directory的用户不同。此用户的凭据对代理无效,因此我需要能够指定其他用户。
在Jenkins或Artifactory的GUI中设置相同的选项。
答案 0 :(得分:184)
改善丹尼尔的回应:
仅HTTP代理配置
gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128
仅HTTPS代理配置
gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129
HTTP和HTTPS代理配置
gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129
使用用户和密码进行代理配置
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
为我工作(在homedir或项目目录中使用gradle.properties
,构建仍然失败)。感谢您将问题指向gradle,从而为此提供了解决方法。
<强>更新强>
您还可以将这些属性放入gradle-wrapper.properties
(请参阅:https://stackoverflow.com/a/50492027/474034)。
答案 1 :(得分:47)
这是我的gradle.properties,请注意那些HTTPS部分
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8118
答案 2 :(得分:42)
在我的build.gradle
我有以下任务,它使用通常的linux代理设置HTTP_PROXY
和HTTPS_PROXY
,来自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
答案 3 :(得分:23)
尝试以下方法:
gradle -Dhttp.proxyHost=yourProxy -Dhttp.proxyPort=yourPort -Dhttp.proxyUser=usernameProxy -Dhttp.proxyPassword=yourPassoword
答案 4 :(得分:22)
使用非常简单的“请求URL”Java程序,我能够复制该问题。
http.proxyUser
和http.proxyPassword
似乎是非标准的,尽管是受欢迎的选项,因为它们未在the Java reference page linked from the Gradle tutorial中描述;尽管Gradle手册提到了它们。
似乎Java程序希望支持代理身份验证need to do this manually(我能够使用链接页面上的代码执行此操作)。
我已将此问题(和修复程序)提交给the Gradle issue tracker。提出的问题GRADLE-1556在1.0-milestone-8(2012年2月)
中得到解决答案 5 :(得分:21)
对我来说,可以在项目的gradle.properties文件中添加此配置,其中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
其中: proxyUrl是代理服务器的URL(http://....。)
proxyPort是端口(通常为8080)
USER是我的域用户
密码,我的密码
在这种情况下,http和https的代理是相同的
答案 6 :(得分:10)
在项目文件夹中创建一个名为gradle.properties
的文件,其中存在build.gradle
文件。添加以下条目
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
如果您使用DNS代理,请将其添加为systemProp.https.proxyHost=www.proxysite.com
对于IP,只需指定不带http://
或https://
的IP
检查gradle official doc以获取更多详细信息并在全局级别设置代理
答案 7 :(得分:8)
在以下位置签出 c:\ Users \您的用户名\ .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>
答案 8 :(得分:6)
基于SourceSimian的回复;这适用于Windows域用户帐户。请注意,用户名 不包含域名
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
答案 9 :(得分:1)
在代理后面使用Gradle有两种方法:
(来自Guillaume Berche的帖子)
在gradle命令中添加这些参数:
-Dhttp.proxyHost=your_proxy_http_host -Dhttp.proxyPort=your_proxy_http_port
如果您使用https:,请使用或这些参数
-Dhttps.proxyHost=your_proxy_https_host -Dhttps.proxyPort=your_proxy_https_port
gradle.properties
中的添加以下行:
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
(对于gradle.properties
文件位置,请参阅官方文档https://docs.gradle.org/current/userguide/build_environment.html
编辑::
我最初忽略的一个小而重要的细节:请注意实际主机名不包含 http://
协议部分的网址...
答案 10 :(得分:1)
@sourcesimian 's和@kunal-b's答案的更新,如果在系统属性中配置,则动态设置用户名和密码。
以下设置用户名和密码(如果提供)或仅添加主机和端口(如果未设置用户名和密码)。
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())
}
}
}
答案 11 :(得分:0)
如果您支持代理并使用eclipse,请转到Window Menu --> Preferences --> General --> Network Connections
。选择Active Providers为“Manual”。
在“代理条目”部分下,单击“HTTPS”,然后单击“编辑”并添加代理主机&amp;港口。如果需要用户名和密码,也请提供。它对我有用!
答案 12 :(得分:0)
如果HTTP错误407的问题仅发生在选定的软件包上,则问题不在代理设置和Internet连接中。您甚至可能通过NAT将您的PC暴露在互联网上,但仍然会遇到此问题。通常,您可以在浏览器中同时下载所需的包。 我找到的唯一解决方案:删除配置文件中的.gradle文件夹(不在项目中)。在同步项目之后,需要很长时间才能恢复所有内容。
答案 13 :(得分:0)
如果我尝试从android studio外观和放大器设置代理行为=&gt;系统设置=&gt; HTTP代理。但代理没有成功,所以我点击没有代理。
检查 NO PROXY 不会从中删除代理设置 gradle.properties(全球)。您需要手动删除它。
所以我删除所有以 systemProp 开头的属性,例如 - systemProp.http.nonProxyHosts = * .local,localhost
答案 14 :(得分:0)
如果您使用的是 flutter,请在 android/gradle.properties
systemProp.http.nonProxyHosts=*.local, localhost
答案 15 :(得分:0)
编辑您的 ~/.gradle/gradle.properties
文件,然后添加以下内容:
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
是 socks5 代理主机DhttpProxyHost
是 http 代理主机DhttpsProxyHost
是 https 代理主机它对我有用。