能否在Asciidoc中引用源代码声明的常量实现文档内容动态更新?
实现方案
这个需求完全可以实现,常用的落地方式有两种:
方案一:属性注入+构建流程联动(门槛最低,推荐)
- 第一步:在Asciidoc文档内用内置属性语法做占位,不需要写死端口值:
// 可以在文档头部先加默认值兜底,没有注入属性时就用默认值 :service-port: 8081 // 正文引用位置直接写占位符 你可通过以下地址访问服务:`https://server:{service-port}/...`
- 第二步:在构建文档的流程中新增一步,读取Java常量类中的端口值,在渲染Asciidoc时将值注入为文档属性,不需要修改原adoc文件:
- 如果用Gradle构建:
// 从Java常量类中提取端口值 def servicePort = new File('src/main/java/com/your/package/MyClass.java').text.find(/public static final String SERVICE_PORT = "(\d+)"/) { it[1] } // 给asciidoctor任务注入属性 asciidoctor { attributes 'service-port': servicePort } - 如果用命令行直接构建:
先通过脚本读取出当前常量的端口值,再调用asciidoctor时通过参数传入:asciidoctor -a service-port=${你读取到的端口值} 你的文档.adoc
- 如果用Gradle构建:
方案二:自定义Asciidoctor扩展(零额外配置,适合复杂场景)
如果用AsciidoctorJ渲染文档,可以写一个极简的预处理器扩展,在文档渲染阶段直接加载指定常量类,读取对应常量值自动注入为文档属性,不需要额外写构建脚本,每次渲染都会自动和当前代码的常量值同步。
内容的提问来源于stack exchange,提问作者Matteo NNZ
相关产品推荐
相关产品推荐

