对 maven swagger-codegen 插件使用以下配置:
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>2.2.2</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${basedir}/src/main/resources/swagger.yaml</inputSpec>
<ignoreFileOverride>${basedir}/.swagger-codegen-ignore</ignoreFileOverride>
<language>jaxrs</language>
<library>jersey2</library>
<configOptions>
<sourceFolder>src/main/java</sourceFolder>
<apiPackage>com.github.jmccloskey.api</apiPackage>
<modelPackage>com.github.jmccloskey.model</modelPackage>
<invokerPackage>com.github.jmccloskey.invoker</invokerPackage>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
代码生成有效,但在生成的模型中使用 Java Date。从 swagger-codegen 文档中,可以通过在 configOptions 中添加以下内容来覆盖它以使用 JodaTime:
<dateLibrary>joda</dateLibrary>
这是我想要做的,但我得到一个编译失败:
.../JodaDateTimeProvider.java:[3,41] package com.sun.jersey.core.spi.component does not exist
我认为 spi 是 Jersey1 用于依赖注入,而 Jersey2 使用 hk2。
我能够通过将 jersey-bundle 添加到我的依赖项(以及其他一些,如 jettison、rome 和 javax.mail)来解决编译失败,但在我的 API 中存在运行时问题:
2. java.lang.IllegalStateException: Unable to perform operation: method inject on com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App
3. java.lang.IllegalStateException: Unable to perform operation: create on org.glassfish.jersey.message.internal.MessageBodyFactory
混合 Jersey 1 依赖项不是正确的方法。有没有办法将 swagger-codegen maven 插件配置为使用 hk2 代替?
有关完整的示例项目,请参阅此github 存储库。任何正确方向的指针将不胜感激。