我正在尝试构建一个gradle项目。
当我执行gradle clean build
时,它失败并显示以下错误消息
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':FacebookUpdateDependencies'.
> Could not resolve all dependencies for configuration ':compiler'.
> Could not resolve com.company.facebook:compiler:1.2+.
Required by:
::1.0
> Could not resolve com.company.facebook:compiler:1.2+.
> Failed to list versions for com.company.facebook:compiler.
> Unable to load Maven meta-data from http://mycompanynexus/compiler/maven-metadata.xml.
> Could not GET 'http://mycompanynexus/compiler/maven-metadata.xml'. Received status code 500 from server: Internal Server Error
然而,当我尝试时
./gradlew clean build
构建成功。
为什么构建在前者而不是后者中失败?
这里是build.gradle的重要部分
task wrapper(type: Wrapper) {
gradleVersion = '2.11'
}
修改
local$: gradle -v
------------------------------------------------------------
Gradle 2.13
------------------------------------------------------------
Build time: 2016-04-25 04:10:10 UTC
Build number: none
Revision: 3b427b1481e46232107303c90be7b05079b05b1c
Groovy: 2.4.4
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.7.0_79 (Oracle Corporation 24.79-b02)
OS: Mac OS X 10.11.1 x86_64
local$ ./gradlew -v
------------------------------------------------------------
Gradle 1.12
------------------------------------------------------------
Build time: 2014-04-29 09:24:31 UTC
Build number: none
Revision: a831fa866d46cbee94e61a09af15f9dd95987421
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
Ivy: 2.2.0
JVM: 1.7.0_79 (Oracle Corporation 24.79-b02)
OS: Mac OS X 10.11.1 x86_64
答案 0 :(得分:2)
我刚注意到包装器版本为1.12
而不是2.12
。也就是说,包装器和已安装的gradle版本之间存在非常大的版本差异。在过去两年中,不同的gradle插件可能存在许多不兼容的更改,这可能会导致您观察到的构建问题。
如前所述,gradle包装器是一个单独的gradle版本,它位于项目的gradle/wrapper
文件夹中。只有在项目中执行wrapper
任务(gradle wrapper
)时,才会构建/更新包装器。这是您的项目的包装器在过去两年中未更新或最初使用错误的版本创建(1.12
而不是2.11
)。
鉴于上述内容,除了gradle 1.12
和2.13
之间的不兼容性之外,很难说出实际导致构建失败的原因。但是这个版本不匹配可能是你问题的根本原因。
重新生成包含版本2.11
(构建文件中提到的版本)的包装器后,很可能不再使用包装器构建项目,因为2.11
可能与{不兼容} {1}}以及......
答案 1 :(得分:1)
这告诉您在调用gradlew
命令而不是系统上安装的命令时将使用Gradle版本2.11。始终运行gradlew
命令,因为它确保您的构建是针对它应该使用的gradle版本运行的,您永远不需要安装正确版本的gradle并且真正加快构建时间。
以下是Gradle Wrapper定义的摘录:
大多数工具都需要在您的计算机上安装才能使用它们。如果安装很简单,您可能认为没问题。但它可能对构建的用户造成不必要的负担。同样重要的是,用户是否会为构建安装正确的工具版本?如果他们正在构建旧版本的软件怎么办?
Gradle Wrapper(以下简称“Wrapper”)解决了这两个问题,是启动Gradle构建的首选方法。 如果Gradle项目已设置Wrapper(我们建议所有项目都这样做),您可以使用项目根目录中的以下命令之一执行构建:
./ gradlew(在类似Unix的平台上,如Linux和Mac OS X) gradlew(在Windows上使用gradlew.bat批处理文件) 每个Wrapper都绑定到特定版本的Gradle,因此当您第一次运行上述某个Gradle版本的命令时,它将下载 相应的Gradle分布并使用它来执行构建。