Java 为什么我的gradle构建失败了,但是gradlew构建成功了?
我有一个gradle项目,我正试图建立 当我执行Java 为什么我的gradle构建失败了,但是gradlew构建成功了?,java,gradle,war,Java,Gradle,War,我有一个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'. &
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
这告诉您,当调用
gradlew
命令而不是系统上安装的命令时,将使用Gradle版本2.11。始终运行gradlew
命令,因为它可以确保您的构建是按照预期的gradle版本运行的,因此您永远不需要安装正确版本的gradle,从而真正加快构建速度
以下是Gradle包装器定义的摘录:
大多数工具需要先安装在计算机上,然后才能使用。如果安装简单,您可能会认为这很好。但这对构建的用户来说可能是一个不必要的负担。同样重要的是,用户是否会为构建安装正确版本的工具?如果他们正在构建一个旧版本的软件呢
Gradle包装器(此后称为“包装器”)解决了这两个问题,是启动Gradle构建的首选方法。
如果Gradle项目已经设置了包装器(我们建议所有项目都这样做),那么您可以使用项目根目录中的以下命令之一执行构建:
./gradlew(在类似Unix的平台上,如Linux和Mac OS X上)
gradlew(在Windows上使用gradlew.bat批处理文件)
每个包装器都绑定到特定版本的Gradle,因此当您第一次为给定的Gradle版本运行上述命令时,它将下载
相应的Gradle发行版并使用它来执行构建。我刚刚注意到包装器版本是
1.12
,而不是2.12
。也就是说,包装器和安装的gradle版本之间存在很大的版本差异。在过去的两年中,不同的gradle插件可能有许多不兼容的更改,这可能会导致您观察到的构建问题
如前所述,gradle包装器是gradle的一个单独版本,位于项目的gradle/wrapper
文件夹中。只有在项目中执行wrapper
任务(gradle wrapper
)时,才会生成/更新包装。也就是说,您的项目包装器在过去2年中没有更新,或者最初使用错误的版本创建(1.12
,而不是2.11
)
鉴于上述情况,除了gradle1.12
和2.13
之间的不兼容之外,很难判断到底是什么导致构建失败。但这种版本不匹配可能是问题的根本原因
一旦您使用版本
2.11
重新生成包装(构建文件中提到的版本),您的项目很可能不再使用包装进行构建,因为2.11
很可能与1.12
不兼容…我认为,gradlew
是成功完成的先前版本,当前构建失败并且无法生成新的包装器看起来gradlew和gradle使用的是不同版本的gradle,但是为什么它无法连接到repo。该错误似乎没有反映版本问题\n包装器仅在执行gradle wrapper
时生成,而不是在每次生成时生成。您可能应该尝试生成一个新的包装,因为当前包装的版本与生成文件中指定的版本不同。mycompanynexus
是存储库服务器的真实名称,还是已对此问题进行了编辑?这可能与两个不同版本的gradle使用的不同网络设置有关。包装器的gradle主目录通常是根项目中的gradle/wrapper
目录。属性文件中可能有一些附加设置,这些设置仅由包装器使用,而不是“常规”版本的gradle。两个gradle版本的输出有趣的是,安装的gradle不打印任何常春藤版本。可能安装的gradle缺少一些用于依赖项解析的常春藤组件,这些组件在gradle包装器中可用。不,它告诉我们包装器版本与构建文件中的版本不匹配。在将版本设置为2.11之后,可能没有再次生成包装器。但是,这并不能解释为什么无法使用安装的gradle版本构建项目。对于上述注释,请尝试运行此命令gradle包装器——gradle 2.11版
后接gradle干净构建