Передача параметров на этап corb uri с помощью ml-gradle
Я использую ml-gradle с corb2 2.4.5 и Marklogic 9.0.5.
Я пытаюсь передать параметр corb при запуске задачи gradle. Я передал параметр в
-DURIS-MODULE.id="sf"
В моем модуле xquery у меня есть
declare variable $id as xs:string external;
Процесс corb выполняется, но не устанавливает переменную id. Что мне нужно изменить, чтобы это работало?
2 ответа
Все системные свойства должны быть установлены и переданы вашему заданию CoRB при выполнении задачи CoRB ml-gradle.
Я подозреваю, что вы можете использовать старую версию ml-gradle или что-то еще не работает в вашей работе.
Я подтвердил, что могу передать внешнюю переменную URIS-MODULE в это упрощенное задание, выполнив следующую команду:
gradle -DURIS-MODULE.id=2 -DURIS-MODULE="INLINE-XQUERY|declare variable $id external;concat('PROCESS-MODULE.id=',string($id)),1,1|ADHOC" -DPROCESS-MODULE="INLINE-XQUERY|declare variable $id external;xdmp:log(concat('process module id=',$id))|ADHOC" corb
и я вижу, что журнал ошибок моего сервера приложений включает строку:
2020-03-12 09:23:44.198 Info: process module id=2
Задача ml-gradle CoRB собирает все системные свойства и передает их в CoRB при запуске задачи:
Map options = buildCorbOptions()
//CoRB2 will evaluate System properties for options
systemProperties(options)
super.exec()
В buildCorbOptions()
метод
https://github.com/marklogic-community/ml-gradle/blob/master/src/main/groovy/com/marklogic/gradle/task/CorbTask.groovy
/**
* Construct CoRB2 options from the following sources:
* task variables - lowerCamelCase names that correspond to their CoRB2
* option (i.e. optionsFile => OPTIONS-FILE)
* project properties - Project properties with the naming convention
* of a 'corb' prefix and CamelCased CoRB2 option name
* (i.e. corbOptionsFile => OPTIONS-FILE)
* System properties - Any System property with a CoRB2 option name
*
* If properties are defined in more than one place, System properties will take
* precedence over Project properties, which take precedence over task member variables.
*
* @return Map of CoRB2 options
*/
public Map buildCorbOptions() {
//first, convert legacy task properties and generate options from conventions
Map options = collectNormalizedOptions()
//collect all of the corb task options (i.e. threadCount=12)
options << collectMemberVariables()
//apply any corb project properties (i.e. -PcorbThreadCount=12)
options << collectCorbProjectProperties()
//apply any CoRB2 System properties (i.e. -DTHREAD-COUNT=12)
options << collectSystemProperties()
options //return the merged options
}
призывает collectSystemProperties()
метод:
/**
* Collect all System.properties. This allows for any CoRB option to be set, including those not statically known such
* as CoRB custom inputs (e.g. URIS-MODULE.foo, PROCESS-MODULE.bar, etc) as well as settings for other libraries, such
* as xcc.httpCompliant to enable XCCS compatability for XCC.
* @return all System.properties
*/
public Map collectSystemProperties() {
System.properties
}
Обязательно используйте тип CorbTask
, а не задача Java, чтобы воспользоваться преимуществами обработки параметров.
Использование:
task some-corbCorbTask(type: com.marklogic.gradle.task.CorbTask) {...}
скорее, чем:
task some-corbJAVA(type: Java) {...}