使 swagger codegen maven 插件从另一个 maven 依赖项访问 yaml 文件
Make swagger codegen maven plugin access yaml files from another maven dependency
我有一个用 Swagger 编写的 API,我想为其生成服务实现和客户端,它们必须位于单独的 Maven 模块中。
我正在考虑将它们分成 3 个独立的 Maven 模块(或同一父 pom 的子模块)。
parent
+- api
+- src/main/resources/api/service.yaml
+- client
+- service
然后在客户端和服务中我都会有 swagger-codegen-maven-plugin
。这样两者都会同步,我只会从一个地方维护服务。其他客户端也可以依赖 api
工件并从 service.yaml
Swagger API 定义生成他们的代码。
我的困难是如何让服务和客户端引用另一个 Maven 依赖项中的 service.yaml
?
这是我目前在服务pom.xml
中的,但它指的是服务模块的本地资源,而不是api
maven依赖。
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>${io.swagger.codegen.version}</version>
<executions>
<execution>
<id>api</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<!-- can this refer to another maven dependency's resources? -->
<inputSpec>${basedir}/src/main/resources/api/service.yaml</inputSpec>
<language>spring</language>
<library>spring-boot</library>
<modelPackage>com.test.model</modelPackage>
<apiPackage>com.test.api</apiPackage>
<generateSupportingFiles>false</generateSupportingFiles>
<configOptions>
<java8>true</java8>
<dateLibrary>java8</dateLibrary>
<interfaceOnly>true</interfaceOnly>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
不确定这是我必须从 Maven 做的事情,以引用来自另一个 Maven 依赖项的资源,还是我必须在 swagger 插件配置中做的事情。
我设法找到的解决方案是使用 maven-remote-resources-plugin
。在需要暴露资源的maven工程的pom.xml
中可以放:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/*.yaml</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
然后在需要导入它们的项目中,项目需要引用如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<configuration>
<resourceBundles>
<resourceBundle>group:api:version</resourceBundle>
</resourceBundles>
</configuration>
<executions>
<execution>
<phase>
generate-sources
</phase>
<goals>
<goal>process</goal>
</goals>
</execution>
</executions>
</plugin>
其中 group:api:version
是公开资源的 maven 依赖项的组 ID、工件 ID 和版本。
最后,在swagger-codegen-maven-plugin
配置里面,yaml文件可以参考为:
<inputSpec>${project.build.directory}/maven-shared-archive-resources/api/service.yaml</inputSpec>
我有一个用 Swagger 编写的 API,我想为其生成服务实现和客户端,它们必须位于单独的 Maven 模块中。
我正在考虑将它们分成 3 个独立的 Maven 模块(或同一父 pom 的子模块)。
parent
+- api
+- src/main/resources/api/service.yaml
+- client
+- service
然后在客户端和服务中我都会有 swagger-codegen-maven-plugin
。这样两者都会同步,我只会从一个地方维护服务。其他客户端也可以依赖 api
工件并从 service.yaml
Swagger API 定义生成他们的代码。
我的困难是如何让服务和客户端引用另一个 Maven 依赖项中的 service.yaml
?
这是我目前在服务pom.xml
中的,但它指的是服务模块的本地资源,而不是api
maven依赖。
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>${io.swagger.codegen.version}</version>
<executions>
<execution>
<id>api</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<!-- can this refer to another maven dependency's resources? -->
<inputSpec>${basedir}/src/main/resources/api/service.yaml</inputSpec>
<language>spring</language>
<library>spring-boot</library>
<modelPackage>com.test.model</modelPackage>
<apiPackage>com.test.api</apiPackage>
<generateSupportingFiles>false</generateSupportingFiles>
<configOptions>
<java8>true</java8>
<dateLibrary>java8</dateLibrary>
<interfaceOnly>true</interfaceOnly>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
不确定这是我必须从 Maven 做的事情,以引用来自另一个 Maven 依赖项的资源,还是我必须在 swagger 插件配置中做的事情。
我设法找到的解决方案是使用 maven-remote-resources-plugin
。在需要暴露资源的maven工程的pom.xml
中可以放:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/*.yaml</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
然后在需要导入它们的项目中,项目需要引用如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<configuration>
<resourceBundles>
<resourceBundle>group:api:version</resourceBundle>
</resourceBundles>
</configuration>
<executions>
<execution>
<phase>
generate-sources
</phase>
<goals>
<goal>process</goal>
</goals>
</execution>
</executions>
</plugin>
其中 group:api:version
是公开资源的 maven 依赖项的组 ID、工件 ID 和版本。
最后,在swagger-codegen-maven-plugin
配置里面,yaml文件可以参考为:
<inputSpec>${project.build.directory}/maven-shared-archive-resources/api/service.yaml</inputSpec>