【发布时间】:2020-03-27 16:13:35
【问题描述】:
我正在使用 ml-gradle 运行 XQuery 块来更新 MarkLogic 数据库。我遇到的问题是我需要将所有代码用引号括起来,但由于代码本身包含引号,所以当我尝试声明变量时遇到一些错误,即let $config。有谁知道解决这个问题的方法?我在想我可以将所有代码连接成一个大字符串,这样它就会忽略第一个和最后一个引号。
task addCron(type: com.marklogic.gradle.task.ServerEvalTask) {
xquery = "xquery version \"1.0-ml\";\n" +
"import module namespace admin = \"http://marklogic.com/xdmp/admin\" at \"/MarkLogic/admin.xqy\";\n" +
"declare namespace group = \"http://marklogic.com/xdmp/group\";\n" +
" let $config := admin:get-configuration()\n" +
当它试图将 $config 声明为变量时,它会崩溃。出现错误:
> Could not get unknown property 'config' for task ':
这是一个有效的例子
task setSchemasPermissions(type: com.marklogic.gradle.task.ServerEvalTask) {
doFirst {
println "Changing permissions in " + mlAppConfig.schemasDatabaseName + " for:"
}
xquery = "xdmp:invoke('/admin/fix-permissions.xqy', (), map:entry('database', xdmp:database('" + mlAppConfig.schemasDatabaseName + "')))"
}
这里是 ServerEvalTask 的一些文档:https://github.com/marklogic-community/ml-gradle/wiki/Writing-your-own-task
【问题讨论】:
-
一般来说,将其他语言代码作为转义字符串嵌入到另一个语言代码中会有点混乱且难以阅读。对于快速的小事情,也许没什么大不了的,但您可以考虑将 XQuery 代码外部化到从任务中读取而不是嵌入的单独文件中。如果您正在嵌入代码,请不要忘记三引号
"""和'''并确保了解 GString 是什么 groovy-lang.org/syntax.html#_gstring_and_string_hashcodes 如果您希望它是字符串文字,请改用单引号来包装代码双引号。 -
感谢您的意见!我正在尝试在 gradle 中创建一个 cron,甚至运行一个简单的命令,我得到一个失败的状态。即使做
xquery = "fn:current-datetime();"我构建失败了。 -
我能够通过切换到 json 样式任务并在我的 ml-config 中创建任务包来解决此问题