Динамическая настройка свойств ml-gradle - PullRequest
0 голосов
/ 02 октября 2018

Мне нужно установить свойство ml-gradle (mlModulesDatabaseName) в самом скрипте сборки.У меня сложилось впечатление, что gradle-y способ сделать это - использовать расширение дополнительных модулей:

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 ]

0 голосов
/ 02 октября 2018

Я бы порекомендовал использовать плагин свойств gradle.Поместите что-то вроде этого в начало вашего файла build.gradle, если у вас его еще нет:

plugins {
  id "net.saliman.properties" version "1.4.6"
  id "com.marklogic.ml-gradle" version "3.7.1"
}

Как только у вас есть плагин свойств saliman, вы можете удалить свои специфичные для dev свойства вфайл с именем gradle-dev.properties и запускается с -PenvironmentName=dev, чтобы включить их.

По умолчанию он будет искать как gradle.properties, так и gradle-local.properties.Он всегда будет читать как gradle.properties, так и файл свойств среды (если существует).Последний будет переопределять свойства из первого.

В зависимости от конкретных задач, вы также можете переопределять свойства из build.gradle, но я бы избегал делать это с задачами, которые поставляются с ml-gradle изкоробка.

HTH!

0 голосов
/ 03 октября 2018

Я хотел бы поделиться другим подходом, который я использую для запуска ml-gradle задач в проектах MarkLogic Data Hub Framework (DHF).При разработке DFH мне иногда нужно выполнить одну и ту же задачу либо на промежуточной БД, либо на конечной БД.Поэтому я использую задачу GradleBuild, чтобы обернуть вокруг задачи ml-gradle и задать свойства проекта в задаче GradleBuild.

task myFinalDbTask(type: GradleBuild) {    
  tasks = ['myMlGradleTask']
  startParameter.projectProperties = [
    database: mlFinalDbName,
    port: mlFinalPort
  ]
}
0 голосов
/ 02 октября 2018

Насколько я помню, ml-gradle читает свойства сразу после применения в качестве плагина.Это означает, что все изменения свойств после этой строки

apply plugin: "com.marklogic.ml-gradle"

не имеют никакого эффекта.Вы пытались установить свойства ext перед применением плагина ml-gradle?

Редактировать: Другой способ установить пользовательские свойства - установить их следующим образом:

ext {
    mlAppConfig {
        modulesDatabaseName = 'Modules'
    }
}

Это также работаетпосле строки apply plugin.

...