我试图使用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"就像我设置的默认值一样,即使成功检索到我的标签。有没有人试图做过这样的事情?
答案 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有关构建生命周期的内容。