org.apache.tools.ant.BuildException 原因:org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException 当 运行 在 Jenkins 中构建时

org.apache.tools.ant.BuildException Caused by: org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException when Running build in Jenkins

当我 运行 来自工作室的测试用例时,所有测试用例都通过了,没有任何问题。但是由于以下异常

,它在 jenkins 中失败了
org.apache.tools.ant.BuildException 
Caused by: org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException

当我查看互联网时,我知道发生这种情况是因为詹金斯阻止了互联网,如果它无法下载依赖项,它将因这种预期而失败。但是当我联系 jenkins it 团队时,他们通知说,如果我们在配置中传递代理,它将始终给出 internet.That 我已经传递如下。

sh "export ANDROID_HOME=/var/buildtools/android && export JAVA_HOME=/usr/java/jdk1.8.0_161 && export PATH=$PATH:/var/buildtools/gradle-4.10.1/bin && gradle -Dhttp.proxyHost=$http_proxy -Dhttp.proxyPort=$http_proxy_port -Dhttps.proxyHost=$https_proxy -Dhttps.proxyPort=$https_proxy_port assembleRelease codeCoverageReport"

那么这里可能是什么问题?

这是 roboelectric 的一个问题,它试图在运行时下载一些依赖项,而 jenkins 会阻止它,因为如果它在运行时下载,我们传递的代理不适用。所以我们要给单元测试代理如下

testOptions {
        unitTests.all {
            systemProperty 'http.proxyHost', 'xxx.xx.xxx.xxx'
            systemProperty 'http.proxyPort', 'xxxx'
            systemProperty 'https.proxyHost', 'xxx.xx.xxx.xxx'
            systemProperty 'https.proxyPort', 'xxxx'
        }
        unitTests{
            returnDefaultValues = true
            includeAndroidResources = true
        }
    }

必须在 android{...} 中添加这个,这解决了问题。