'Replace placeholder in file with gradle

I have gradle task swagger-codegen with the following configuration:

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

The file swaggergen-config.json contains:

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

How to properly replace {version} placeholder with project.version?



Solution 1:[1]

The swagger generator plugin looks for a file which makes this a little bit more complicated than just parsing the string and replacing the token.

A solution could be to treat the configuration file as a generated input to the generateSwaggerCode task. This can be done via a copy task that copies your swaggergen-config.json "template" and replaces the {version} with token rootProject.version using an ant ReplaceTokens filter during copy. Note: You'll want to switch {version} to the ant-style token format (e.g. @version@), though.

The swaggerSources.code.configFile closure could then be set to use the newly generated configuration.

This would be added to your 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")
    }
  }
}

The generated swaggergen-config.json would look like this

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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 user3399000