[英]Why everyone says I should include gradlew in my source control if its version is explicitly on build.gradle?
[英]why is my gradle build failing but gradlew build is successsful?
我有一个我要构建的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
我只是注意到包装器版本是1.12
而不是2.12
。 也就是说,包装器和已安装的gradle版本之间存在很大的版本差异。 在过去的两年中,不同的gradle插件可能进行了许多不兼容的更改,这可能会导致您观察到构建问题。
如前所述,gradle包装器是gradle的单独版本,位于项目的gradle/wrapper
文件夹中。 仅在项目中执行wrapper
任务时( gradle wrapper
),才会构建/更新wrapper
gradle wrapper
。 那是您的项目的包装器在过去两年中没有更新,或者最初使用错误的版本( 1.12
而不是2.11
)创建。
鉴于以上所述,很难确定到底是什么导致构建失败-除了gradle 1.12
和2.13
之间的不兼容性。 但是此版本不匹配可能是导致问题的根本原因。
一旦使用2.11
版(在构建文件中提到的版本)重新生成包装器,您的项目很可能不再使用该包装器构建,因为2.11
也可能与1.12
不兼容...
这告诉您,调用gradlew
命令时将使用Gradle 2.11版,而不是系统上安装的Gradle版本。 始终运行gradlew
命令,因为它可以确保您的构建可以在应该使用的gradle版本上运行,而您无需安装正确版本的gradle并可以真正加快构建时间。
这是Gradle Wrapper定义的摘录:
大多数工具都需要在计算机上安装后才能使用。 如果安装简单,您可能会认为很好。 但这可能会对构建的用户造成不必要的负担。 同样重要的是,用户是否会为构建安装正确版本的工具? 如果他们正在构建软件的旧版本怎么办?
Gradle包装器(以下称为“包装器”)解决了这两个问题,是开始Gradle构建的首选方法。 如果Gradle项目已设置包装器(我们建议所有项目都这样做),则可以从项目根目录使用以下命令之一执行构建:
./gradlew(在类似Unix的平台上,例如Linux和Mac OS X)gradlew(在Windows上使用gradlew.bat批处理文件)每个包装器都与特定版本的Gradle绑定在一起,因此,当您首次运行上述命令之一时对于给定的Gradle版本,它将下载相应的Gradle发行版并使用它执行构建。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.