3

我需要在构建脚本本身中设置一个 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 如何确定其属性的范围,但您会认为这会起作用。关于如何解决这个问题的任何建议?

4

3 回答 3

2

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

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

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

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

ext {
    mlAppConfig {
        modulesDatabaseName = 'Modules'
    }
}

这也适用于apply plugin行后。

于 2018-10-02T06:27:24.860 回答
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 附带的任务。

于 2018-10-02T06:57:49.830 回答
0

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

task myFinalDbTask(type: GradleBuild) {    
  tasks = ['myMlGradleTask']
  startParameter.projectProperties = [
    database: mlFinalDbName,
    port: mlFinalPort
  ]
}
于 2018-10-03T02:24:19.010 回答