动态设置毫升级属性

时间:2018-10-02 04:35:59

标签: marklogic 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 个答案:

答案 0 :(得分:2)

据我所记得,ml-gradle在作为插件应用后立即读取属性。这意味着此行之后所有对属性的更改

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

无效。在应用ext插件之前,您是否尝试过设置ml-gradle属性?

编辑: 设置自定义属性的另一种方法是像这样设置它们:

ext {
    mlAppConfig {
        modulesDatabaseName = 'Modules'
    }
}

这在apply plugin行之后也适用。

答案 1 :(得分:0)

我建议使用gradle属性插件。如果您还没有这样的东西,请把它放在build.gradle文件的顶部:

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

一旦安装了saliman属性插件,就可以将开发者特定的属性放在名为gradle-dev.properties的文件中,并与-PenvironmentName=dev运行以启用它们。

默认情况下,它将同时查找gradle.propertiesgradle-local.properties。它将始终读取gradle.properties和特定于环境的属性文件(如果存在)。后者将覆盖第一个属性。

根据特定的任务,您还可以在build.gradle内覆盖属性,但是我要避免使用开箱即用的ml-gradle来执行此操作。

HTH!

答案 2 :(得分:0)

我想分享另一种用于在MarkLogic Data Hub Framework(ml-gradle)项目中运行DHF任务的方法。在DFH开发中,有时我需要在登台数据库或最终数据库上运行相同的任务。因此,我使用GradleBuild任务来包装ml-gradle任务,并在GradleBuild任务中设置项目属性。

task myFinalDbTask(type: GradleBuild) {    
  tasks = ['myMlGradleTask']
  startParameter.projectProperties = [
    database: mlFinalDbName,
    port: mlFinalPort
  ]
}