Search code examples
yamlswaggeropenapiswagger-codegenswagger-codegen-maven-plugin

How to specify templateDir in Swagger Codegen (Gradle) for OpenAPI 3.0?


Anyone have any idea how to specify a templateDir for swagger codegen v3? I have attached a snippet of my build.gradle below

Also the setTemplateDir does not do anything so I am guessing thats not an existing method.

My class path is io.swagger.codegen.v3:swagger-codegen-maven-plugin:3.0.27

task generateServer {
        doLast {
            def openAPI = new OpenAPIV3Parser().read(rootProject.swaggerFile.toString(), null, null)
            def clientOpts = new ClientOptInput().openAPI(openAPI)
            def codegenConfig = CodegenConfigLoader.forName('spring')
            codegenConfig.setOutputDir(project.buildDir.toString())
//            codegenConfig.setTemplateDir('test');

            clientOpts.setConfig(codegenConfig)
            def clientOps = new ClientOpts()
            clientOps.setProperties([
                    'dateLibrary'     : 'java8', // Date library to use
                    'useTags'         : 'true',  // Use tags for the naming
                    'interfaceOnly'   : 'true'   // Generating the Controller API interface and the models only
            ])

            clientOpts.setOpts(clientOps)

            def generator = new DefaultGenerator().opts(clientOpts)
            generator.generate() // Executing the generation
        }
    }

Solution

  • I figured this out. I would need to create a configurator and set the template directory there

    Also so you know, if a mustache file is missing, then it will be pulled from one of dependency jars

    task generateServer {
            doLast {          
                CodegenConfigurator codegenConfigurator = new CodegenConfigurator()
                codegenConfigurator
                        .setTemplateDir(rootProject.templateDir.toString())
                        .setLang('spring')
                        .setOutputDir(project.buildDir.toString())
                        .setInputSpec(rootProject.swaggerFile.toString())
    
                OpenAPI openAPI = new OpenAPIV3Parser().read(rootProject.swaggerFile.toString(), null, null)
                ClientOptInput clientOptInput = codegenConfigurator.toClientOptInput().openAPI(openAPI)
    
                DefaultGenerator generator = new DefaultGenerator().opts(clientOptInput)
                generator.generate() // Executing the generation*/
            }
        }