2016-09-10 4 views
0

Я хочу создать версию и файлы sha для моего проекта. Я использую метод переупаковки весны, чтобы построить свою банку.Сомнения с закрытием градиента

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" 
} 

Благодаря dagezi

У меня есть следующие:

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(); 
} 

Everytime я пытаюсь запустить задачу, я получаю ошибку о том, что банку не найден. Я понимаю, что это происходит потому, что он пытается сгенерировать SHA во время настройки, но не уверен, как это решить.

ответ

1

попробовать что-то вроде этого:

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" 
    } 
} 

<< (левый сдвиг) оператор эквивалентен положить ваши заявления внутри doLast { } закрытия. Эти блоки запускаются на этапе выполнения.

Смежные вопросы