2016-06-09 81 views
1

我有一个我正在尝试构建的gradle项目。为什么我的gradle build失败,但是gradlew build是成功的?

当我执行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的revelant部分

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:  3b427b1481e7303c90be7b05079b05b1c 

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

我认为,'gradlew'是以前的版本已经成功完成,当前的构建失败并且无法生成新的包装 – Andrew

+0

看起来像gradlew和gradle正在使用不同版本的gradle,但为什么它无法连接到repo。该错误似乎并不反映版本问题\ –

+0

包装仅在执行'gradle wrapper'时生成,而不是在每个生成中生成。您应该尝试生成一个新的包装器,因为当前包装器的版本与构建文件中指定的版本不同。 'mycompanynexus'是存储库服务器的真实名称还是已经为此问题编辑了? – dpr

回答

2

我刚刚注意到包装版本是1.12而不是2.12。也就是说,包装器和已安装版本的Gradle之间有很大的版本差异。在过去的两年中,不同的gradle插件可能会有许多不兼容的变化,这可能会导致您观察到的构建问题。

如前所述,gradle wrapper是一个独立版本的gradle,位于项目的gradle/wrapper文件夹中。在您的项目中执行wrapper任务(gradle wrapper)时,只会构建/更新包装。那是你的项目的包装器在过去的2年中还没有更新,或者最初是由错误的版本创建的(1.12而不是2.11)。

鉴于上述情况,很难说出实际上导致构建失败的原因 - 除了gradle 1.122.13之间的不兼容问题。但是这个版本的不匹配可能是你的问题的根本原因。

最有可能您的项目不会再建成使用包装一旦你重新生成2.11版(build文件中提到的版本)的包装,如2.11很可能是不兼容1.12,以及...

1

这就告诉你,当gradlew命令,而不是调用一个装机容量为您的摇篮2.11版本将使用在系统上。总是运行gradlew命令,因为它可以确保您的构建是针对它应该使用的gradle版本运行的,所以您从不需要安装正确版本的gradle,并且确实可以加快构建时间。

下面是从摇篮包装定义的摘录:

大多数工具都要求您的计算机上安装,然后才能使用它们。如果安装很容易,你可能会认为没关系。但这对构建的用户可能是不必要的负担。同样重要的是,用户是否会为该构建安装正确版本的工具?如果他们正在构建旧版本的软件呢?

Gradle包装器(此后称为“包装器”)解决了这两个问题,并且是启动Gradle构建的首选方式。 如果摇篮项目设立了包装(我们建议所有项目这样做),你可以执行使用从项目的根目录下面的命令之一编译:

./gradlew(在Unix如Linux和Mac OS X) gradlew(在使用gradlew.bat批处理文件的Windows上) 每个包装都绑定到特定版本的Gradle,因此当您首次运行上面给定Gradle的命令之一时版本,它将下载相应的Gradle发行版 并使用它来执行构建。

+0

不,它告诉我们包装版本与构建文件中的版本不匹配。在将版本设置为2.11之后,可能还没有生成包装器。但是这并不能解释为什么该项目无法使用已安装的gradle版本来构建。 – dpr

+0

关于上述评论,请尝试运行此操作。 'gradle wrapper --gradle-version 2.11' 其次是 'gradle clean build' –

相关问题