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

时间:2016-12-02 09:04:27

标签: git gradle asciidoctor

我试图使用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"就像我设置的默认值一样,即使成功检索到我的标签。有没有人试图做过这样的事情?

1 个答案:

答案 0 :(得分:1)

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

您没有价值的原因是,配置在执行之前发生,并且在setLastStableVersion配置完成后,没有执行retrieveLatestTag任务,也没有执行doLast

您无需执行任务来获取git标记,只需从任务中删除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 } 或更好地将逻辑排除在任何任务之外,因为每次构建配置时都需要它,具有如下相同的顺序:

# scalar / scalar
>>> (a/b).dtype
dtype('float64')

# array / scalar, array.dtype wins
>>> (np.asarray([a])/b).dtype
dtype('float32')

>>> np.asarray([a]).dtype
dtype('float32')

# array / array, usual promotion rules
>>> (np.asarray([a])/np.asarray([b])).dtype
dtype('float64')

您可以阅读here有关构建生命周期的内容。