Динамическая настройка свойств 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
  ]
}
Другие вопросы по тегам