我们正在将 Maven 项目迁移到 Bazel。在此项目中,我们从 Java 注释生成了 OpenAPI 文档并使用
swagger-maven-plugin
,如下所示:
<plugin>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-maven-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<outputFileName>swagger</outputFileName>
<outputPath>${project.basedir}/src/main/resources/webroot</outputPath>
<outputFormat>JSON</outputFormat>
<resourcePackages>
<package>com.example.package1</package>
<package>com.example.package2</package>
</resourcePackages>
<prettyPrint>true</prettyPrint>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>resolve</goal>
</goals>
</execution>
</executions>
</plugin>
有没有办法使用 Bazel 规则生成此文件?
注意:虽然 Bazel 支持使用 rules_jvm_external 下载和发布 Maven 工件,但它不直接支持基于 Maven 的插件。 Maven 插件无法直接由 Bazel 运行,因为没有任何 Maven 兼容层。
这意味着这个 Maven 插件不适用于 Bazel 构建
相反,我建议您采用以下方法: OpenAPI 生成器 Bazel
您还可以检查:
创建 Bazel 构建规则
load("@io_bazel_rules_swagger//swagger:swagger.bzl", "swagger_gen")
swagger_gen(
name = "my_swagger_gen",
output = "swagger.json",
resource_packages = [
"com.example.package1",
"com.example.package2",
# Add more packages if needed
],
)
将 Swagger 规则添加到工作区
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "io_bazel_rules_swagger",
urls = ["https://github.com/bazelbuild/rules_swagger/archive/master.tar.gz"],
strip_prefix = "rules_swagger-master",
)
load("@io_bazel_rules_swagger//swagger:swagger_deps.bzl", "swagger_register_toolchains")
swagger_register_toolchains()
配置Swagger代码生成工具
您必须配置 swagger-config.json 来指定项目所需的设置和选项
建立目标:
bazel build //path/to:my_swagger_gen
生成的 OpenAPI 文档保存在文件 swagger.json
中与 Bazel 构建管道集成
您可以通过在构建主项目之前添加触发 Swagger 生成的依赖项或自定义构建规则,将 OpenAPI 文档的生成集成到 Bazel 构建管道中。