使用xquery的ML Gradle task.Server.Eval.task设置变量

使用xquery的ML Gradle task.Server.Eval.task设置变量,gradle,xquery,marklogic,Gradle,Xquery,Marklogic,我正在使用ml gradle运行一个XQuery块来更新MarkLogic数据库。我遇到的问题是,我需要将所有代码都用引号括起来,但由于代码本身有引号,因此在尝试声明变量时,我遇到了一些错误,例如,let$config。有人知道怎么解决这个问题吗?我想我可以把所有的代码连接成一个大字符串,这样它就可以忽略第一个和最后一个引号 task addCron(type: com.marklogic.gradle.task.ServerEvalTask) { xquery = "xquery vers

我正在使用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的文档:

我怀疑您在Groovy/Gradle中遇到了一些字符串模板机制。还可以尝试避开$符号

注意,您可以在XQuery代码中同时使用单引号和双引号


我怀疑您在Groovy/Gradle中遇到了一些字符串模板机制。还可以尝试避开$符号

注意,您可以在XQuery代码中同时使用单引号和双引号


太棒了,我要试一试!感谢@grtjnI能够通过切换到json样式的任务并在我的ml配置文件中创建任务包来修复此问题,我将尝试一下!感谢@grtjnI能够解决这个问题,方法是切换到json样式的任务,并在我的ml配置中创建一个任务包。一般来说,将其他语言代码作为转义字符串嵌入到另一个语言代码中有点凌乱,难以阅读。对于快速的小事情,可能不是很大的交易,但您可以考虑将XQuery代码外部化为从任务中读取而不是嵌入的单独文件。如果要嵌入代码,请不要忘记三重引号“和
并且确保理解GString是什么如果您希望它是字符串文字,请使用单引号而不是双引号来包装代码。感谢您的输入!我试图在gradle中创建一个cron,即使运行一个简单的命令,我也会得到一个失败的状态。即使执行
xquery=“fn:current-datetime();”
我也得到了一个构建失败。通过切换到json样式的任务,并在我的ml配置中创建一个任务包,我能够解决这个问题。一般来说,将其他语言代码作为转义字符串嵌入到另一个语言代码中会有点混乱,也很难阅读。对于快速的小事情,可能不是很大的交易,但您可以考虑将XQuery代码外部化为从任务中读取而不是嵌入的单独文件。如果要嵌入代码,请不要忘记三重引号“和
并且确保理解GString是什么如果您希望它是字符串文字,请使用单引号而不是双引号来包装代码。感谢您的输入!我试图在gradle中创建一个cron,即使运行一个简单的命令,我也会得到一个失败的状态。甚至在执行
xquery=“fn:current-datetime();”
生成时也失败了。我可以通过切换到json样式的任务并在我的ml配置中创建任务包来修复此问题