Quarkus生产构建中如何排除openapi扩展?
在Quarkus生产构建中排除SmallRye OpenAPI扩展并剥离相关注解
完全可以在生产构建中排除该扩展,同时后续使用注解时也能确保生产包只保留核心代码,以下是具体实现方案:
一、生产构建直接排除SmallRye OpenAPI扩展
根据你使用的构建工具,有两种常用方式:
Maven 配置方式
- 通过Profile分环境管理依赖
在pom.xml中配置开发/测试环境自动加载扩展,生产环境不包含:
<profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-openapi</artifactId> </dependency> </dependencies> </profile> <profile> <id>prod</id> <!-- 生产环境不引入该扩展 --> </profile> </profiles>
构建生产包时执行:
mvn clean package -Pprod
- 构建命令临时排除
无需修改pom,直接在生产构建命令中添加排除参数:
mvn clean package -Dquarkus.extensions.exclude=io.quarkus:quarkus-smallrye-openapi
Gradle 配置方式
- 通过Profile控制依赖
在build.gradle中根据Quarkus profile决定是否引入扩展:
plugins { id 'io.quarkus' } quarkus { profile = System.getProperty('quarkus.profile', 'dev') } dependencies { if (quarkus.profile == 'dev') { implementation 'io.quarkus:quarkus-smallrye-openapi' } }
生产构建执行:
./gradlew clean build -Dquarkus.profile=prod
- 构建命令临时排除
./gradlew clean build -Dquarkus.extensions.exclude=io.quarkus:quarkus-smallrye-openapi
二、后续使用OpenAPI注解时,生产环境剥离相关代码
如果后续代码中用到@Operation、@APIResponse等OpenAPI注解,可通过以下方式确保生产包只保留核心逻辑:
1. 使用@Profile限定注解生效范围
将标注了OpenAPI注解的类或方法限定在非生产环境,生产构建时这些代码会被自动忽略:
@Profile("!prod") @Path("/user") public class UserResource { @Operation(summary = "获取用户信息") @GET @Path("/{id}") public User getUser(@PathParam("id") Long id) { // 核心业务逻辑 return userService.getById(id); } }
2. 依赖Quarkus生产优化自动剥离注解
Quarkus生产构建默认开启quarkus.optimization.remove-unused-code=true,如果已经排除了SmallRye OpenAPI扩展,代码中未被引用的OpenAPI注解会被编译时自动移除,不会出现在最终二进制文件中。
3. 拆分注解与核心逻辑
如果需要保留方法逻辑但移除注解,可将注解单独放在非生产环境生效的方法上,核心逻辑抽离:
public class UserResource { // 核心逻辑方法,无注解 public User getUserById(Long id) { return userService.getById(id); } // 仅非生产环境暴露带注解的接口 @Profile("!prod") @Operation(summary = "获取用户信息") @GET @Path("/{id}") public User getUser(@PathParam("id") Long id) { return getUserById(id); } }
总结
- 优先通过构建Profile或命令行排除扩展,从根源上减少依赖体积
- 后续使用注解时,用
@Profile限定生效环境,确保生产包无冗余代码 - 依赖Quarkus原生的生产优化机制,自动清理未使用的注解和代码
内容的提问来源于stack exchange,提问作者Sakibul Alam
相关产品推荐
相关产品推荐

