Marklogic 动态设置ml渐变属性

Marklogic 动态设置ml渐变属性,marklogic,ml-gradle,Marklogic,Ml Gradle,我需要在构建脚本本身中设置一个ml gradle属性(mlModulesDatabaseName)。我的印象是gradle-y的方法是使用额外的模块扩展: ext { mlModulesDatabaseName = 'Modules' } 这似乎将值放置在project.properties映射中,就像从gradle.properties读取该值一样,但在我尝试运行mlReloadModules任务时,它似乎没有指向正确的数据库: $ ./gradlew mlReloadModules

我需要在构建脚本本身中设置一个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是如何定义其属性的,但您可能认为这是可行的。关于如何实现这一点,有什么建议吗?

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

apply plugin: "com.marklogic.ml-gradle"
没有效果。在应用
ml gradle
插件之前,您是否尝试过设置
ext
属性

编辑: 设置自定义特性的另一种方法是如下设置:

ext {
    mlAppConfig {
        modulesDatabaseName = 'Modules'
    }
}

这也适用于
应用插件
行。

我建议使用gradle属性插件。如果您还没有build.gradle文件,请将类似的内容放在其顶部:

plugins {
  id "net.saliman.properties" version "1.4.6"
  id "com.marklogic.ml-gradle" version "3.7.1"
}
一旦saliman properties插件就绪,就可以将特定于开发人员的属性放入名为
gradle-dev.properties
的文件中,并使用
-PenvironmentName=dev
运行以启用它们

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

根据具体任务的不同,您还可以在
build.gradle
中重写属性,但我不希望在ml gradle现成的任务中这样做


我想与大家分享我在MarkLogic Data Hub Framework(
DHF
)项目中运行
ml gradle
任务时使用的另一种方法。在
DFH
开发中,有时我需要在staging DB或final DB上运行相同的任务。因此,我使用
GradleBuild
任务包装
mlgradle
任务,并在
GradleBuild
任务中设置项目属性

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

是的。这就是我要找的。这两个建议对我都有效。感谢。澄清一下-当应用ml gradle插件时,所有属性都被读入并用于设置mlAppConfig引用的AppConfig对象上的值。因此,在ext块中,您可以操纵mlAppConfig对象。对于后代,我应该注意,如果您正确设计gradle脚本,这是更好的答案。如果有人想找到类似的答案,我会走这条路。可悲的是,我正在将ml gradle改装成一个遗留脚本,这会使这变得很困难(呃),所以我不能在这里使用它。