2016-06-09 5 views
1

Ich habe ein Großprojekt, das ich zu bauen versuche.warum ist mein grandle build fehlgeschlagen aber gradlew build ist erfolgreich?

wenn ich gradle clean build ausführen, schlägt es mit der folgenden Fehlermeldung

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 

jedoch, als ich versuchte ./gradlew clean build die Build erfolgreich ist.

warum der Build im ersten und nicht im letzten Fall fehlschlägt?

hier ist Revelant Teil build.gradle

task wrapper(type: Wrapper) { 
    gradleVersion = '2.11' 
} 

EDIT

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

Ich denke, "Gradlew" ist die vorherige Version, die erfolgreich durchgeführt wurde, der aktuelle Build schlägt fehl und kann keinen neuen Wrapper erzeugen – Andrew

+0

sieht aus wie Gradlew und Gradle verwenden verschiedene Versionen von Gradle, aber warum es keine Verbindung zum Repo. Der Fehler scheint nicht die Versionsprobleme zu reflektieren \ –

+0

Der Wrapper wird nur generiert, wenn 'grdle wrapper' ausgeführt wird und nicht bei jedem Build. Sie sollten wahrscheinlich versuchen, einen neuen Wrapper zu generieren, da die aktuelle Wrapper-Version von der in der Build-Datei angegebenen abweicht. Ist 'mycompanynexus' der richtige Name des Repository-Servers oder wurde er für diese Frage bearbeitet? – dpr

Antwort

2

Ich habe gerade festgestellt, dass die Wrapper-Version ist 1.12 und nicht 2.12. Das heißt, es gibt einen sehr großen Versionsunterschied zwischen dem Wrapper und der installierten Version von Gradle. Es gab wahrscheinlich in den letzten 2 Jahren viele inkompatible Änderungen an den verschiedenen Grapple-Plugins, was zu den Build-Problemen führen kann, die Sie beobachten.

Wie bereits erwähnt, ist der Gradle Wrapper eine separate Version von Gradle, die sich im Ordner gradle/wrapper Ihres Projekts befindet. Der Wrapper wird nur erstellt/aktualisiert, wenn die Task wrapper in Ihrem Projekt ausgeführt wird (gradle wrapper). Das heißt, der Wrapper Ihres Projekts wurde in den letzten 2 Jahren nicht aktualisiert oder wurde ursprünglich mit der falschen Version erstellt (1.12 anstelle von 2.11).

Angesichts der oben genannten ist es schwierig zu sagen, was tatsächlich den Build verursacht fehlschlagen - abgesehen von den Inkompatibilitäten zwischen Gradle 1.12 und 2.13. Aber diese Versionskonflikte sind wahrscheinlich die Ursache Ihres Problems.

Wahrscheinlich Ihr Projekt nicht mehr gebaut wird mit dem Wrapper, sobald Sie den Wrapper mit Version 2.11 (die Version in der Build-Datei erwähnt) regeneriert, wie 2.11 ist wahrscheinlich auch zu 1.12 unvereinbar sein ...

1

Dies sagt Ihnen, dass Ihre Gradle Version 2.11 wird verwendet, wenn gradlew Befehl anstelle des installierten ein aufgerufen wird auf System. Führe immer den Befehl gradlew aus, da es sicherstellt, dass dein Build gegen die Gradle-Version, die es ausführen soll, ausgeführt wird, du nie die richtige Version von Gradle installieren musst und die Bauzeit wirklich beschleunigt. Hier

ist ein Auszug aus Gradle Wrapper Definition:

Die meisten Tools Installation auf Ihrem Computer benötigen, bevor Sie sie verwenden können. Wenn die Installation einfach ist, denken Sie vielleicht, dass das in Ordnung ist. Aber es kann eine unnötige Belastung für die Benutzer des Builds sein. Ebenso wichtig, wird der Benutzer die richtige Version des Tools für den Build installieren? Was ist, wenn sie eine alte Version der Software erstellen?

Der Gradle Wrapper (fortan als "Wrapper" bezeichnet) löst beide Probleme und ist der bevorzugte Weg, um einen Gradle Build zu starten. Wenn ein Gradle Projekt die Wrapper eingerichtet hat (und wir empfehlen, alle Projekte tun), können Sie die Build ausführen kann einen der folgenden Befehle aus der Wurzel des Projekts mit:

./gradlew (auf Unix - wie Plattformen wie Linux und Mac OS X) Gradlew (unter Windows mit der Batchdatei gradlew.bat) Jeder Wrapper ist an eine bestimmte Version von Gradle gebunden, also wenn Sie zum ersten Mal einen der obigen Befehle für eine bestimmte Gradle ausführen Version, wird es die entsprechende Gradle-Verteilung herunterladen und verwenden, um den Build auszuführen.

+0

Nein, es teilt uns mit, dass die Wrapper-Version nicht mit der Version in der Build-Datei übereinstimmt. Wahrscheinlich wurde der Wrapper nach dem Einstellen der Version auf 2.11 nicht mehr generiert. Dies erklärt jedoch nicht, warum das Projekt nicht mit der installierten Version von Gradle erstellt werden kann. – dpr

+0

In Bezug auf den obigen Kommentar, versuchen Sie, dies auszuführen. 'gradle wrapper --gradle-version 2.11' Gefolgt von ' gradle sauberes Build' –

Verwandte Themen