关闭gradle怀疑

时间:2016-09-10 08:30:29

标签: gradle spring-boot closures

我希望为我的项目创建版本和sha文件。我正在使用spring boot的重新打包方法来构建我的jar。

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

每次我尝试运行任务时,都会收到错误消息,说明找不到jar。我知道这是因为它试图在配置时生成SHA,但不知道如何解决这个问题。

1 个答案:

答案 0 :(得分: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 { }闭包内。这些块在执行阶段运行。