2016-06-30 9 views
8

Ich habe vor kurzem mit der Arbeit mit Gradle begonnen. Ich fand ziemlich schnell heraus, dass man leicht gradle sagen kann, um automatisch die aktuelle Version mit dem folgenden Ausschnitt zu erkennen:Prozess erneut ausführenResultate, wenn sich die Variable ändert

def getVersionName = { -> 
    def stdout = new ByteArrayOutputStream() 
    exec { 
    commandLine 'git', 'describe', '--dirty=-SNAPSHOT' 
    standardOutput = stdout 
    } 
    return stdout.toString().trim() 
} 

version = getVersionName() 

Das fand ich heraus, dass Sie diese Versionsnummer in Ihre Ressourcen wie diese ersetzen können:

processResources { 
    expand(version: version) 
} 

Und in den Dateien, die Sie die Versionsnummer, so etwas zu wollen (sollten mit jeder variablen arbeiten) ist

version: ${version} 

die Substitution Arbeits gre und arbeiten wie erwartet.

Allerdings lief ein Problem, wenn die Versionsnummer geändert und keine Ressourcen, dass die Ressourcen nicht erneut verarbeitet werden und daher die Versionsnummer in diesen Dateien nicht aktualisiert wird.
ich dies etwas fixiert, indem die Aufgabe, zu sagen jedes Mal, wie dies auszuführen:

processResources { 
    expand(version: version) 

    outputs.upToDateWhen { false } 
} 

Dies funktioniert, aber ich fühle mich wie dies ein ziemlich schmutziger Hack ist.

Was ich stattdessen haben möchte, ist eine Logik, die die Aufgabe wiederholen würde, wann immer sich die Ressourcendateien ändern (wie es bereits der Fall ist) oder wenn die Versionsnummer (oder irgendeine Variable oder Variablen, die mich interessieren) Veränderung.

Wenn jemand hier interessiert ist der Link zu der eigentlichen Datei: https://gitlab.crazyblock-network.net/BrainStone/MplManager/blob/master/build.gradle
Und das ist das Repo: https://gitlab.crazyblock-network.net/BrainStone/MplManager

Antwort

2

Dies sollte das Problem beheben:

def tokens = [ 
    'version': version 
] 

processResources { 
    inputs.properties(tokens) 
    expand(tokens) 
} 
+0

in dem Fall angezeigt, in dem arbeiten, Ich habe nur eine Variable. Aber wenn ich mehrere in der Karte habe, bekomme ich einen Fehler wie folgt: '' konnte die Methode expand() für Argumente nicht finden [{version = 2.9-1-gcb183f9-SNAPSHOT, MPLversion = 1.0.0}] '' – BrainStone

+0

. Ich habe expand an der falschen Stelle verwendet! – BrainStone

Verwandte Themen