用gradle替换文件中的占位符

时间:2019-04-08 18:44:58

标签: gradle

我的gradle任务swagger-codegen具有以下配置:

swaggerSources {
  testProject {
    inputFile = file("$buildDir/generated/input.json")
    code {
      language = 'csharp'
      configFile = file('swaggergen-config.json')
    }
  }
}

文件swaggergen-config.json包含:

{
  "packageName": "Package.Test",
  "packageVersion" : {version},
  "netCoreProjectFile": true
}

如何用{version}正确替换project.version占位符?

1 个答案:

答案 0 :(得分:1)

swagger生成器插件正在寻找一个文件,该文件会使它变得有点复杂,然后再进行字符串解析和替换令牌。

一个解决方案可能是将配置文件视为generateSwaggerCode任务的生成输入。这可以通过复制任务完成,该任务将复制swaggergen-config.json“模板”,并在复制过程中使用蚂蚁{version}过滤器将rootProject.version替换为令牌ReplaceTokens。注意:不过,您需要将{version}切换为蚂蚁风格的令牌格式(例如@version@)。

然后可以将swaggerSources.code.configFile闭包设置为使用新生成的配置。

这将被添加到您的build.gradle

task generateSwaggerGenConfig(type: Copy) {
    from swaggergen-config.json
    into $buildDir/generated/swaggergen-config.json
    filter(org.apache.tools.ant.filters.ReplaceTokens, tokens:['version:rootProject.version])
}

generateSwaggerCode.dependsOn generateSwaggerGenConfig

swaggerSources {
  testProject {
    inputFile = file("$buildDir/generated/input.json")
    code {
      language = 'csharp'
      configFile = file("$buildDir/generated/swaggergen-config.json")
    }
  }
}

生成的swaggergen-config.json看起来像这样

{
  "packageName": "Package.Test",
  "packageVersion" : @version@,
  "netCoreProjectFile": true
}