2016-09-10 2 views
0

Ich möchte die Version und Sha-Dateien für mein Projekt erstellen. Ich benutze Springpacks Umpackmethode, um mein Glas zu bauen.Zweifel mit Gradle Schließung

subproject.tasks.create(name: 'writeVersion') { 
    new File("$rootDir/upload/").mkdirs() 

    def sha = calcSha1(new File("$rootDir/deploy/${jar.archiveName}")); 
    def gitId = grgit.head().abbreviatedId 

    def shaFile = new File("$rootDir/upload/$rootProject.serviceName-$gitId-$sha"+".sha256"); 
    def versionFile = new File("$rootDir/upload/version.txt"); 

    shaFile.text = $sha; 
    versionFile.text = "$rootProject.serviceName-$gitId-$sha" 
} 

Dank dagezi

Ich habe folgende:

def calcSha1 = { file -> 
    MessageDigest md = MessageDigest.getInstance("SHA-1"); 
    file.eachByte 4096, {bytes, size -> 
     md.update(bytes, 0, size); 
    } 
    return md.digest().collect {String.format "%02x", it}.join(); 
} 

Jedesmal, wenn ich die Aufgabe auszuführen, erhalte ich eine Fehlermeldung, dass das Glas nicht gefunden wird. Ich verstehe, dass dies passiert, weil es versucht, den SHA zur Konfigurationszeit zu generieren, aber nicht sicher ist, wie das zu lösen ist.

Antwort

1

versuchen, etwas wie folgt aus:

subprojects { 
    task writeVersion << { 
     new File("$rootDir/upload/").mkdirs() 

     def sha = calcSha1(new File("$rootDir/deploy/${jar.archiveName}")); 
     def gitId = grgit.head().abbreviatedId 

     def shaFile = new File("$rootDir/upload/$rootProject.serviceName-$gitId-$sha"+".sha256"); 
     def versionFile = new File("$rootDir/upload/version.txt"); 

     shaFile.text = $sha; 
     versionFile.text = "$rootProject.serviceName-$gitId-$sha" 
    } 
} 

Die << (Linksverschiebung) Operator entspricht Ihre Anweisungen innerhalb eines doLast { } Schließung zu setzen. Diese Blöcke werden in der Ausführungsphase ausgeführt.