Search code examples
androidopenapi-generator

How to use the Open API 3 gradle plugin


I'm trying to use the Open API 3 generator plugin for gradle. It is enough to add the lines

plugins {
    id "org.openapi.generator" version "5.0.1"
}

in the project's build.gradle to get the error:

com.google.common.base.Suppliers$NonSerializableMemoizingSupplier cannot be cast to java.util.function.Supplier

I'm using gradle 6.4


Solution

  • This is how I have implemented it now. Please notice the line:

    classpath("com.google.guava:guava:30.1-jre")
    

    that is the fix of the issue.

    In the project build.gradle add:

    buildscript {
        dependecies {
            classpath("com.google.guava:guava:30.1-jre")
    }
    
    plugins {
        id "org.openapi.generator" version "5.0.1"
    }
    
    task generateCode(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask) {
        generatorName = "kotlin"
        inputSpec = sampleApiSpec
        outputDir = "$projectDir/generatedapi"
    
        groupId = "$project.group"
        id = "$project.name"
        version = "$project.version"
        apiPackage = "com.package.name.generatedapi.apis"
        invokerPackage = "com.package.name.generatedapi.apis.invoker"
        modelPackage = "com.package.name.generatedapi.apis.model"
        enablePostProcessFile = true
        skipOverwrite = false
        modelNamePrefix = "Raw"
        configOptions = [
                java8               : "true",
                dateLibrary         : "java8",
                serializationLibrary: "moshi",
                library             : "resttemplate",
                useBeanValidation   : "true",
                enableBuilderSupport: "true",
        ]
    }
    
    android.sourceSets.main.java.srcDirs += ['generatedapi']
    

    Then you can run:

    ./gradlew generateCode
    

    or you can set generateCode as a dependency for your build task

    Please check: https://github.com/GoogleCloudPlatform/artifact-registry-maven-tools/issues/27

    EDIT Even better:

    buildscript {
        dependecies {
            classpath('org.openapitools:openapi-generator-gradle-plugin:5.0.1') {
                exclude group: 'com.google.guava'
            }
    }
    
    configurations {
        compile.exclude module: 'guava-jdk5'
    }
    

    So no need to overwrite the guava lib just exclude the one imported by the generator

    https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator-gradle-plugin