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