Gradle在公司代理后无法下载分发版本

16
尝试在公司代理后面运行Jenkins以构建我的Java库项目,但在下载分发期间一直超时。我遵循了许多指南,尝试让Gradle在gradle.properties文件构建中使用代理设置,但似乎不起作用。我知道proxyHost和proxyPort是正确的。我是否忽视了什么,或者除了代理之外还有其他问题?

build.gradle

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'maven-publish'
apply plugin: 'idea'

sourceCompatibility = 1.8

def baseVersion = "1.0"
def jenkinsBuildNumber = System.getenv('BUILD_NUMBER')
version = jenkinsBuildNumber != null ? baseVersion + "." + jenkinsBuildNumber : baseVersion

println 'Version: ' + version

group = 'com.company.MyLibrary'

repositories {
    mavenCentral()
}

apply plugin: 'groovy'

jar {
    from "LICENSE.md"
}

dependencies {
    compile "com.google.guava:guava:19.0"
    compile "junit:junit:4.12"
    compile "org.assertj:assertj-core:3.2.0"
    compile "org.mockito:mockito-core:2.0.31-beta"
    compile "org.powermock:powermock-module-junit4:1.6.2"
    compile "org.powermock:powermock-api-mockito:1.6.2"
    testCompile "com.google.guava:guava:19.0"
    testCompile "junit:junit:4.12"
    testCompile "org.assertj:assertj-core:3.2.0"
    testCompile "org.mockito:mockito-core:2.0.31-beta"
    testCompile "org.powermock:powermock-module-junit4:1.6.2"
    testCompile "org.powermock:powermock-api-mockito:1.6.2"
}

task sourcesJar(type: Jar) {
    dependsOn classes
    classifier 'sources'
    from sourceSets.main.allSource
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives sourcesJar
    archives javadocJar
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.10'
    distributionUrl = "http://services.gradle.org/distributions/gradle-${gradleVersion}-all.zip"
}

gradle.properties

systemProp.https.proxyHost=proxy.company.net
systemProp.https.proxyPort=8989
systemProp.http.proxyHost=proxy.company.net
systemProp.http.proxyPort=8989
systemProp.https.nonProxyHosts=*.company.com|localhost
org.gradle.daemon=true

Jenkins控制台输出

20:45:09 Started by an SCM change
20:45:09 [EnvInject] - Loading node environment variables.
20:45:09 Building on master in workspace /var/lib/jenkins/workspace/MyLibrary
20:45:09 [WS-CLEANUP] Deleting project workspace...
20:45:09 [WS-CLEANUP] Done
20:45:09 Cloning the remote Git repository
20:45:09 Cloning repository ssh://git@git.company.net/~jon/MyLibrary.git
20:45:09  > git init /var/lib/jenkins/workspace/MyLibrary # timeout=10
20:45:09 Fetching upstream changes from ssh://git@git.company.net/~jon/MyLibrary.git
20:45:09  > git --version # timeout=10
20:45:09  > git -c core.askpass=true fetch --tags --progress ssh://git@git.company.net/~jon/MyLibrary.git +refs/heads/*:refs/remotes/origin/*
20:45:10  > git config remote.origin.url ssh://git@git.company.net/~jon/MyLibrary.git # timeout=10
20:45:10  > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
20:45:10  > git config remote.origin.url ssh://git@git.company.net/~jon/MyLibrary.git # timeout=10
20:45:10 Fetching upstream changes from ssh://git@git.company.net/~jon/MyLibrary.git
20:45:10  > git -c core.askpass=true fetch --tags --progress ssh://git@git.company.net/~jon/MyLibrary.git +refs/heads/*:refs/remotes/origin/*
20:45:11 Seen branch in repository origin/master
20:45:11 Seen 1 remote branch
20:45:11 Checking out Revision 2ece1927e5fb1d368aba28a107f6fe2c2accb9fa (origin/master)
20:45:11  > git config core.sparsecheckout # timeout=10
20:45:11  > git checkout -f 2ece1927e5fb1d368aba28a107f6fe2c2accb9fa
20:45:11  > git rev-list 66fe56731f935be83c91e38ced426aea7bba0b8f # timeout=10
20:45:11 [EnvInject] - Injecting environment variables from a build step.
20:45:11 [Gradle] - Launching build.
20:45:11 [MyLibrary] $ /var/lib/jenkins/workspace/MyLibrary/gradlew -Dcommit=master clean test
20:45:11 Downloading http://services.gradle.org/distributions/gradle-2.10-all.zip
20:47:18 
20:47:18 Exception in thread "main" java.net.ConnectException: Connection timed out
20:47:18    at java.net.PlainSocketImpl.socketConnect(Native Method)
20:47:18    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
20:47:18    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
20:47:18    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
20:47:18    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
20:47:18    at java.net.Socket.connect(Socket.java:589)
20:47:18    at java.net.Socket.connect(Socket.java:538)
20:47:18    at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
20:47:18    at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
20:47:18    at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
20:47:18    at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
20:47:18    at sun.net.www.http.HttpClient.New(HttpClient.java:308)
20:47:18    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1175)
20:47:18    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1123)
20:47:18    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:998)
20:47:18    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:932)
20:47:18    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1512)
20:47:18    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
20:47:18    at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
20:47:18    at org.gradle.wrapper.Download.download(Download.java:44)
20:47:18    at org.gradle.wrapper.Install$1.call(Install.java:61)
20:47:18    at org.gradle.wrapper.Install$1.call(Install.java:48)
20:47:18    at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
20:47:18    at org.gradle.wrapper.Install.createDist(Install.java:48)
20:47:18    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
20:47:18    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)
20:47:18 Build step 'Invoke Gradle script' changed build result to FAILURE
20:47:18 Build step 'Invoke Gradle script' marked build as failure
20:47:18 Finished: FAILURE

1
你们公司的代理服务器需要身份验证吗? - RaGe
Gradle肯定期望有延迟,甚至显示由点组成的“进度条”。我被难住了。你能尝试使用jenkins用户的wget吗?另外,gradle.properties已经提交到源代码中了对吧? - RaGe
是的,我以jenkins用户和root用户身份对gradle distro进行了wget操作,两者都成功了... 我还以jenkins用户身份执行了./gradlew clean build,并获得了与jenkins控制台输出相同的结果..... 还有,gradle.properties在git中。我也感到困惑 =\ - Jon Erickson
3
由于没有更好的选择,我会尝试使用以下命令:gradlew -Dhttp.proxyHost=xxx -Dhttp.proxyPort=xxx -Dhttps.proxyHost=xxx -Dhttps.proxyPort=xxx,以排除 gradle.properties 没有被正确应用的可能性。 - RaGe
我的问题与错误的HTTP/HTTPS前缀有关:https://dev59.com/36Hia4cB1Zd3GeqPbfAY#44260798 - oikonomopo
显示剩余4条评论
2个回答

25

我的解决方案是更新全局的~/.gradle/gradle.properties文件,加入正确的代理设置:

org.gradle.daemon=true
systemProp.https.proxyHost=proxy.company.net
systemProp.https.proxyPort=8181
systemProp.http.proxyHost=proxy.company.net
systemProp.http.proxyPort=8181
systemProp.https.nonProxyHosts=*.company.com|localhost

这实际上相当于将这些内容作为命令行参数传递给gradlew./gradlew -Dhttp.proxyHost=xxx -Dhttp.proxyPort=xxx -Dhttps.proxyHost=xxx -Dhttps.proxyPort=xxx)。


在项目存储库中? - Jeff Bootsholz
@RajuGujarati,你可以在项目存储库中更新属性文件,这样就可以工作了,但我认为这不是你想要检入源代码的内容。我建议你更新你的主目录中的全局属性文件,对于 macOS 来说,这个文件路径就是我在上面的答案中提到的。 - Jon Erickson
1
我创建了新的~/.gradle/gradle.properties文件,因为没有它,最终它对我起作用了,非常感谢。 - Victoria Klimova

2

对于我来说,通过在gradle.properties应用程序文件夹中使用以下行,它可以工作

systemProp.https.proxyHost=proxy.company.net 
systemProp.https.proxyPort=8080 
systemProp.https.proxyPassword=
systemProp.http.proxyHost=proxy.company.net 
systemProp.http.proxyPort=8080
systemProp.http.proxyPassword=
systemProp.https.nonProxyHosts=*.company.com|localhost

不要忘记输入代理的密码。 希望这能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接