Динамическая настройка свойств ml-gradle
Мне нужно установить свойство ml-gradle (mlModulesDatabaseName) в самом скрипте сборки. У меня сложилось впечатление, что для этого нужно использовать расширение дополнительных модулей:
ext {
mlModulesDatabaseName = 'Modules'
}
Похоже, что это помещает значение в карту project.properties, как если бы оно было прочитано из gradle.properties, но при попытке запуска задачи mlReloadModules оно, похоже, не нацелено на нужную базу данных:
$ ./gradlew mlReloadModules -Pdev
:mlDeleteModuleTimestampsFile
:mlClearModulesDatabase
Clearing modules database
Logging HTTP response body to assist with debugging: {"errorResponse":{"statusCode":"404", "status":"Not Found", "messageCode":"XDMP-NOSUCHDB", "message":"XDMP-NOSUCHDB: xdmp:database(\"my-app-modules\") -- No such database my-app-modules"}}
Unable to clear database; cause: 404 Not Found
Finished clearing modules database
:mlPrepareRestApiDependencies
:mlLoadModules
:mlReloadModules
BUILD SUCCESSFUL
Это может быть незнанием того, как gradle определяет свои свойства с моей стороны, но вы думаете, это сработает. Любые предложения о том, как это осуществить?
3 ответа
Насколько я помню ml-gradle
читает свойства сразу после применения в качестве плагина. Это означает, что все изменения в свойствах после этой строки
apply plugin: "com.marklogic.ml-gradle"
не имеют никакого эффекта. Вы пытались настроить свой ext
свойства перед применением ml-gradle
плагин?
Редактировать: Другой способ установить пользовательские свойства - установить их так:
ext {
mlAppConfig {
modulesDatabaseName = 'Modules'
}
}
Это также работает после apply plugin
линия.
Я бы порекомендовал использовать плагин свойств gradle. Поместите что-то вроде этого в начало вашего файла build.gradle, если у вас его еще нет:
plugins {
id "net.saliman.properties" version "1.4.6"
id "com.marklogic.ml-gradle" version "3.7.1"
}
После того, как вы установили плагин saliman properties, вы можете удалить свои специфичные для dev свойства в файле с именем gradle-dev.properties
и беги с -PenvironmentName=dev
чтобы включить их.
По умолчанию он будет искать оба gradle.properties
а также gradle-local.properties
, Это всегда будет читать как gradle.properties
а также файл свойств среды (если существует). Последний будет переопределять свойства первого.
В зависимости от конкретных задач, вы также можете переопределить свойства изнутри build.gradle
, но я бы избегал делать это с задачами, которые поставляются с ml-gradle из коробки.
НТН!
Я хотел бы поделиться другим подходом, который я использую для запуска ml-gradle
задачи в среде MarkLogic Data Hub Framework (DHF
) проекты. В DFH
разработки, мне иногда нужно выполнить одну и ту же задачу либо на промежуточной БД, либо на конечной БД. Поэтому я использую GradleBuild
задача обернуть вокруг ml-gradle
Задача и установить свойства проекта в пределах GradleBuild
задача.
task myFinalDbTask(type: GradleBuild) {
tasks = ['myMlGradleTask']
startParameter.projectProperties = [
database: mlFinalDbName,
port: mlFinalPort
]
}