迁移至Jakarta EE 10时Swagger Maven插件构建失败求助
解决Jakarta EE 10下Swagger 2.0文档生成的兼容问题
方案一:替换插件依赖的javax构件为Jakarta版本
通过修改Maven插件的依赖配置,强制将原插件依赖的javax.*构件替换为Jakarta EE 10兼容的版本,避免编译时找不到javax.servlet.ServletContext的问题:
<plugin> <groupId>com.github.kongchen</groupId> <artifactId>swagger-maven-plugin</artifactId> <version>3.1.8</version> <!-- 选用Swagger 2.0兼容的最新版本 --> <dependencies> <!-- 排除原插件的javax.servlet依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <!-- 替换为Jakarta Servlet API --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> <!-- 替换其他javax.*依赖为Jakarta版本 --> <dependency> <groupId>jakarta.ws.rs</groupId> <artifactId>jakarta.ws.rs-api</artifactId> <version>3.1.0</version> </dependency> </dependencies> <configuration> <!-- 保留原有的Swagger 2.0配置 --> <apiSources> <apiSource> <locations>com.your.package</locations> <basePath>/api</basePath> <info> <title>你的API文档</title> <version>1.0.0</version> </info> <swaggerDirectory>${project.build.directory}/swagger</swaggerDirectory> </apiSource> </apiSources> </configuration> </plugin>
方案二:使用社区适配Jakarta的fork版插件
部分开发者对原swagger-maven-plugin进行了fork,替换了内部的javax依赖为Jakarta版本,可直接选用这类适配后的插件。配置示例(以某第三方维护版本为例,需确认实际可用的groupId和版本):
<plugin> <groupId>io.github.swagger2markup</groupId> <artifactId>swagger-maven-plugin</artifactId> <version>3.1.8-jakarta</version> <configuration> <!-- 原Swagger 2.0配置保持不变 --> <apiSources> <apiSource> <locations>com.your.package</locations> <swaggerDirectory>${project.build.directory}/swagger</swaggerDirectory> </apiSource> </apiSources> </configuration> </plugin>
方案三:手动编写代码生成Swagger 2.0文档(兜底方案)
如果插件方案都不可行,可通过代码手动生成Swagger 2.0的JSON/YAML文件:
- 引入Swagger Core的Jakarta兼容依赖:
<dependency> <groupId>io.swagger.core.v3</groupId> <artifactId>swagger-jaxrs2-jakarta</artifactId> <version>2.2.15</version> <!-- 支持Swagger 2.0的Jakarta适配版本 --> <scope>compile</scope> </dependency>
- 编写生成文档的Java类:
import io.swagger.jaxrs.config.BeanConfig; import io.swagger.util.Json; import java.io.FileWriter; import java.io.IOException; public class SwaggerDocGenerator { public static void main(String[] args) throws IOException { BeanConfig beanConfig = new BeanConfig(); beanConfig.setVersion("1.0.0"); beanConfig.setBasePath("/api"); beanConfig.setResourcePackage("com.your.package"); beanConfig.setScan(true); // 生成Swagger 2.0 JSON文件 String swaggerJson = Json.pretty(beanConfig.getSwagger()); try (FileWriter writer = new FileWriter("target/swagger/swagger.json")) { writer.write(swaggerJson); } } }
- 配置Maven的
exec-maven-plugin在构建阶段执行该类:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <phase>prepare-package</phase> <goals> <goal>java</goal> </goals> <configuration> <mainClass>com.your.package.SwaggerDocGenerator</mainClass> </configuration> </execution> </executions> </plugin>
内容的提问来源于stack exchange,提问作者Jay B
相关产品推荐
相关产品推荐

