Я использую 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.
"""
и'''
и убедитесь, что понимаете, что такое GString groovy-lang.org/syntax.html#_gstring_and_string_hashcodes Если вы хотите, чтобы это был строковый литерал, используйте одинарные кавычки для заключения кода вместо двойных кавычек. - person Mads Hansen   schedule 30.03.2020xquery = "fn:current-datetime();"
, я получаю сбой сборки. - person Beez   schedule 31.03.2020