Normally when using swagger, you generate a swagger.yaml file for your API. But what if you already have a swagger.yaml file and you want to generate the API interface and models, like you would also do with a webservice using a WSDL file? To achieve this, swagger has a great tool: swagger-codegen. The tool has a CLI and a maven plugin, but no gradle plugin. So how do we use it with gradle?
Here is a list of things we need to do to get it to work:
- Create a gradle task that generates the API interface every time we build (which should be generated to src/generated/java to keep everything separated)
- Make sure ‘gradle clean’ also cleans the generated files
- Support gradle incremental builds
- Making sure it compiles: the generated classes should be available in src/main/java, and execute the generate task before build/compile
- BONUS: IntelliJ should generate the files automatically when you import the project or sync the project.
A big thanks to my colleague Willem Cheizoo from JDriven for helping me create this list and pointing me in the right direction.
Creating a generate task
To be able to use the codegen in our gradle task, we need to add the dependency to the buildscript in our build.gradle file.