使用Gradle部署MarkLogic 9时Token替换失效,需补充哪些配置?
解决ML Gradle Token替换未生效的问题
我之前在ML9搭配ml-gradle 3.x版本时也踩过几乎一模一样的token替换坑,结合你给出的环境配置,大概率是下面几个关键配置环节没到位:
1. 自定义目录未加入ML Gradle的扫描范围
ml-gradle默认只会对标准目录(比如src/main/ml-config、src/main/ml-modules)下的文件执行token替换,你把资源放在plugins/config这个自定义目录下,插件根本不知道要扫描这里。
根据文件类型的不同,需要在build.gradle里添加对应的配置:
- 对于JSON这类配置资源,添加到
additionalResourceDirectories:
mlConfig { additionalResourceDirectories = files('plugins/config') }
- 对于XQuery这类模块文件,添加到
additionalModuleDirectories:
mlModules { additionalModuleDirectories = files('plugins/config') }
如果你的目录里同时包含两种类型,两种配置都加上就行。
2. 插件加载顺序错误
saliman properties插件负责加载环境属性,必须在ml-gradle和ml-data-hub之前加载,不然ml-gradle启动时拿不到属性值,自然没法替换token。
检查你的build.gradle插件块顺序,确保saliman排在最前面:
plugins { id 'net.saliman.properties' version '1.4.6' id 'com.marklogic.ml-data-hub' version '3.0.0' id 'com.marklogic.ml-gradle' version '3.6.3' }
(注:ml-data-hub本身依赖ml-gradle,所以顺序上saliman先加载,然后是data-hub或ml-gradle都可以,但saliman必须是第一个)
3. 确认token替换未被手动禁用
虽然ml-gradle默认启用token替换,但有时候可能不小心在配置里关闭了,检查build.gradle里有没有类似这样的代码:
mlConfig { enableTokenReplacement = false }
如果有,把它改成true或者直接删掉这行(默认就是true)。
验证方法
做完上面的配置后,建议:
- 重新运行
./gradlew mlPrintTokens,确认所有%%XXX%%形式的token都能正确映射到环境值 - 用
./gradlew mlDeploy --info执行部署,查看日志里是否有Scanning directory: plugins/config这类条目,以及token替换的具体过程日志,确认插件确实在处理你的文件
内容的提问来源于stack exchange,提问作者MilcoNuman
相关产品推荐
相关产品推荐

