Spring Boot多模块项目:基于Maven Profile构建剔除指定端点的Jar
构建时通过Maven Profile移除指定Spring Boot端点(无需单独分支)
完全可行,不需要创建单独分支,以下是几种实战方案:
方案1:编译时注解处理器裁剪方法
- 自定义一个
@BuildProfileOnly注解,参数填写允许的Maven Profile名称 - 编写Maven注解处理器,在编译阶段扫描所有控制器方法,若方法上的注解Profile与当前构建的Profile不匹配,直接删除该方法的字节码
- 在Maven的不同Profile中配置注解处理器的激活参数,确保编译后仅保留符合当前Profile的端点
方案2:资源过滤+类加载排除
- 将需要按Profile拆分的端点抽离为独立的控制器实现类,避免与其他端点混编
- 编写
application-${profile}.yml配置文件,通过spring.context.component-scan.exclude-filter指定当前Profile需要排除的类 - 开启Maven资源过滤,构建时自动替换对应Profile的配置文件,打包后Spring不会加载被排除的类,端点彻底不可访问
方案3:AspectJ编译时织入移除方法
- 定义AspectJ切面,根据Maven Profile决定是否移除目标端点方法
- 配置Maven的AspectJ插件,不同Profile下加载不同的切面规则,编译时直接从字节码中移除不需要的端点方法
- 该方式适合复杂场景,能精准控制方法的保留与移除
避坑提醒
- 多模块项目需保证各模块的Maven Profile配置同步,避免模块间依赖类被误处理
- 构建完成后建议反编译Jar包验证,确认目标端点确实未出现在字节码中(或未被Spring加载)
- 若端点逻辑简单,优先选择方案2,配置成本最低
内容的提问来源于stack exchange,提问作者Lako12
相关产品推荐
相关产品推荐

