将自定义属性赋予 asciidoctor gradle 从前一个任务发出的任务

Giving custom attribute to asciidoctor gradle task issued from preceding task

我正在尝试使用 gradle 任务检索我最新的 git 标签,以便在我的 asciidoctor 文档中使用它。即使我的任务成功了,我的 asciidoctor 自定义属性也始终为空。这就是我检索最新 git 标签的方式:

project.ext {
    latestTag= 'N/A'
}
task retrieveLatestTag {
   doLast {

       new ByteArrayOutputStream().withStream { os ->
           def result = exec {
              commandLine('git',  'rev-list',  '--tags', '--max-count=1')
              standardOutput = os
           }
           ext.latestTagName = os.toString().trim()
       }

   } 
}
task setLastStableVersion {
   dependsOn retrieveLatestTag
   doLast {

       new ByteArrayOutputStream().withStream { os ->
           def result = exec {
               commandLine('git',  'describe',  '--tags', retrieveLatestTag.latestTagName)
               standardOutput = os
           }
           project.ext.latestTag = os.toString().trim()
       }

   }
}

现在这是我的 asciidoctor 任务:

asciidoctor {
   dependsOn setLastStableVersion
   attributes \
    'build-gradle' : file('build.gradle'),
    'source-highlighter': 'coderay',
    'imagesdir': 'images',
    'toc': 'left',
    'toclevels': '4',
    'icons': 'font',
    'setanchors': '',
    'idprefix': '',
    'idseparator': '-',
    'docinfo1': '',
    'tag': project.latestTag
}

我的自定义 属性 标签始终 "N/A" 与我首先设置的默认值一样,即使我的标签已成功检索。以前有没有人试过做这样的事情?

你的问题是,asciidoctor 是在配置阶段配置的,因为 setLastStableVersion 是用 doLast 闭包声明的,它是在执行阶段执行的。

你没有价值的原因是,配置发生在执行之前,当配置 asciidoctor 时,没有执行 setLastStableVersion 任务,也没有执行 retrieveLatestTag

您不需要通过任务来获取您的 git 标签,只需从您的任务中删除 doLast 或更好地将您的逻辑置于任何任务之外,因为您每次都需要它配置构建的时间,顺序如下:

new ByteArrayOutputStream().withStream { os ->
       def result = exec {
          commandLine('git',  'rev-list',  '--tags', '--max-count=1')
          standardOutput = os
       }
       project.ext.latestTagName = os.toString().trim()
   }

new ByteArrayOutputStream().withStream { os ->
       def result = exec {
           commandLine('git',  'describe',  '--tags', latestTagName)
           standardOutput = os
       }
       project.ext.latestTag = os.toString().trim()
   }

asciidoctor {
   dependsOn setLastStableVersion
   attributes \
    'build-gradle' : file('build.gradle'),
    'source-highlighter': 'coderay',
    'imagesdir': 'images',
    'toc': 'left',
    'toclevels': '4',
    'icons': 'font',
    'setanchors': '',
    'idprefix': '',
    'idseparator': '-',
    'docinfo1': '',
    'tag': project.latestTag
}

并且 here 您可以阅读构建生命周期。