动态设置 ml-gradle 属性
Dynamically setting ml-gradle properties
我需要在构建脚本本身中设置一个 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'
}
}
这在 apply plugin
行之后也有效。
我建议使用 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.properties
和 gradle-local.properties
。它将始终读取 gradle.properties
以及特定于环境的属性文件(如果存在)。后者将覆盖第一个的属性。
根据具体的任务,您还可以覆盖 build.gradle
中的属性,但我会避免在 ml-gradle 开箱即用的任务中这样做。
HTH!
我想分享我在 MarkLogic Data Hub Framework (DHF
) 项目中用于 运行 ml-gradle
任务的另一种方法。在 DFH
开发中,我有时需要 运行 在暂存数据库或最终数据库上执行相同的任务。因此,我使用 GradleBuild
任务环绕 ml-gradle
任务,并在 GradleBuild
任务中设置项目属性。
task myFinalDbTask(type: GradleBuild) {
tasks = ['myMlGradleTask']
startParameter.projectProperties = [
database: mlFinalDbName,
port: mlFinalPort
]
}
我需要在构建脚本本身中设置一个 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'
}
}
这在 apply plugin
行之后也有效。
我建议使用 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.properties
和 gradle-local.properties
。它将始终读取 gradle.properties
以及特定于环境的属性文件(如果存在)。后者将覆盖第一个的属性。
根据具体的任务,您还可以覆盖 build.gradle
中的属性,但我会避免在 ml-gradle 开箱即用的任务中这样做。
HTH!
我想分享我在 MarkLogic Data Hub Framework (DHF
) 项目中用于 运行 ml-gradle
任务的另一种方法。在 DFH
开发中,我有时需要 运行 在暂存数据库或最终数据库上执行相同的任务。因此,我使用 GradleBuild
任务环绕 ml-gradle
任务,并在 GradleBuild
任务中设置项目属性。
task myFinalDbTask(type: GradleBuild) {
tasks = ['myMlGradleTask']
startParameter.projectProperties = [
database: mlFinalDbName,
port: mlFinalPort
]
}