如何向配置本地文件为模块库的MarkLogic应用服务器发送XQuery执行
mlxprs 本地XQuery库引用&指定应用服务器问题解决方案
核心原因说明
你遇到的问题本质是默认配置下,mlxprs和ml-gradle都默认走MarkLogic 8002管理端口的eval接口执行代码,该接口的模块解析规则、权限配置和你业务侧自定义的8300端口HTTP应用服务器不一致,才会出现QConsole能正常运行、工具执行报错的差异,并非mlxprs仅支持存储在Module DB中的模块运行。
具体解决方案
1. mlxprs指定目标应用服务器配置
不需要仅依赖头部注释的动态配置,直接在VSCode工作区的.vscode/settings.json中添加固定服务配置,优先级高于头部注释,直接绑定你要的8300端口HTTP服务:
{ "mlxprs.marklogicHost": "localhost", "mlxprs.marklogicPort": 8300, "mlxprs.marklogicUsername": "替换为你的账号", "mlxprs.marklogicPassword": "替换为你的密码", "mlxprs.marklogicModulesDatabase": "替换为你的应用模块库名称", "mlxprs.marklogicContentDatabase": "替换为你的应用内容库名称" }
配置完成后重启VSCode生效,运行环境会和QConsole完全对齐。
2. 本地XQuery库依赖适配
分两种场景处理:
- 模块需要长期部署:每次修改本地库文件后,先执行ml-gradle的
mlLoadModules指令将本地模块同步到MarkLogic模块库,再用mlxprs执行主代码即可正常找到依赖。 - 临时测试无需部署:mlxprs 3.10及以上版本支持在XQuery头部注释中添加
moduleRoot参数,扩展会自动将主代码引用的相对路径本地库文件打包同步到服务端临时执行,无需提前上传到模块库,示例头部配置:(: mlxprs:setting { "moduleRoot": "./src/main/xquery/modules" } :) import module namespace mylib = "http://你的自定义命名空间" at "mylib.xqy";
3. ml-gradle指定目标应用服务器方案
ml-gradle支持执行时显式指定目标端口,不需要默认走管理端口,运行指令时添加端口参数即可:
./gradlew mlRunXQuery -PmlPort=8300 -PmlXQueryFile=./你的XQuery文件路径.xqy
也可以在gradle.properties中添加mlAppServicesPort=8300配置,后续默认都会向8300端口发送执行请求。
内容的提问来源于stack exchange,提问作者XCELERENT - I want to dance
相关产品推荐
相关产品推荐

