将自定义属性赋予 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 您可以阅读构建生命周期。
我正在尝试使用 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 您可以阅读构建生命周期。