-
Notifications
You must be signed in to change notification settings - Fork 6k
Workflow integration
Default codegen templates are included with the swagger-codegen artifact. You can of course override these by copying them into your own deployment, and setting a new template directory. A good starting point is to grab templates from here:
https://github.com/wordnik/swagger-codegen/tree/master/src/main/resources
And modify them as you like. After doing so, you'll need to override the basic codegen template directory. See the petstore client as an example:
https://github.com/wordnik/swagger-codegen/tree/master/samples/client/petstore
// location of templates
override def templateDir = "mytemplates/Java"
It's easy to make the codegen a part of your build cycle. Take the following pom.xml
for example:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wordnik</groupId>
<artifactId>client-generator</artifactId>
<packaging>jar</packaging>
<name>client-generator</name>
<version>1.0.0-SNAPSHOT</version>
<prerequisites>
<maven>2.2.0</maven>
</prerequisites>
<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>${maven-plugin-version}</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<jvmArgs>
<jvmArg>-Xms64m</jvmArg>
<jvmArg>-Xmx1024m</jvmArg>
</jvmArgs>
<launchers>
<launcher>
<id>java-codegen</id>
<!-- See note #1 -->
<mainClass>JavaPetstoreCodegen</mainClass>
<args>
<!-- See note #2 -->
<arg>http://petstore.swagger.wordnik.com/api/api-docs</arg>
<!-- See note #3 -->
<arg>special-key</arg>
</args>
<jvmArgs>
<!-- See note #4 -->
<jvmArg>-DfileMap=src/test/resources/petstore-1.2/api-docs</jvmArg>
</jvmArgs>
</launcher>
<launcher>
<id>objc-codegen</id>
<mainClass>ObjcPetstoreCodegen</mainClass>
<args>
<arg>http://petstore.swagger.wordnik.com/api/api-docs.json</arg>
<arg>special-key</arg>
<arg></arg>
</args>
<jvmArgs>
<jvmArg>-DfileMap=src/test/resources/petstore-1.2/api-docs</jvmArg>
</jvmArgs>
</launcher>
</launchers>
</configuration>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<repositories>
<!-- See note #5 -->
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-codegen_2.9.1</artifactId>
<version>${codegen-version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala-version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<properties>
<codegen-version>2.0.13</codegen-version>
<scala-version>2.9.1</scala-version>
<junit-version>4.8.1</junit-version>
<maven-plugin-version>3.1.0</maven-plugin-version>
</properties>
</project>
Now to generate the java client, you simply run:
mvn scala:run -Dlauncher=java-codegen
which executes the codegen script under src/main/scala
named JavaPetstoreCodegen
.
To generate the objective-c client, run:
mvn scala:run -Dlauncher=objc-codegen
which executes the codegen script under src/main/scala
named ObjcPetstoreCodegen
.
Some notes:
-
JavaPetstoreCodegen
is the codegen script, should lives undersrc/main/scala
-
This is the URL where the service is running
-
If the api requires a key, put it here.
-
You can generate from a set of files instead of from a live server by setting the
-DfileMap
flag. If this is the case, the URL from #2 will be used as thebasePath
of the service when generating the code.Using files for the codegen is a good idea for automating the build process without having to launch a server to provide the json.
-
If you are using a snapshot, you'll need to add the Sonatype OSS repository, as shown
would suggest when compiling to use flag to ignore tests. The tests requires extra dependencies and the compilation might fail due to that.