欢迎关注公众号【拿客】这里聚焦低延迟架构、AI智能体、高并发系统设计领域。点击上方「蓝色字体」关注星标获取最新技术内容。编译期拦截枚举重复定义推荐一个实用的Maven插件在Java开发中枚举Enum是我们经常使用的一种数据类型它用来定义一组固定的常量集合。但是你有没有遇到过这样的问题在枚举中定义了重复的code值直到线上运行才发现问题今天给大家推荐一款我自己开发的Maven插件 ——enum-check-maven-plugin它能在编译阶段自动帮你检查枚举中的重复字段值让问题提前暴露避免线上故障。问题场景让我们先来看一个常见的错误场景publicenumStatusEnum{SUCCESS(200,成功),ERROR(500,失败),// 不小心复制粘贴code重复了BAD_REQUEST(400,错误请求),NOT_FOUND(400,未找到);// 400 重复了privatefinalintcode;privatefinalStringdesc;StatusEnum(intcode,Stringdesc){this.codecode;this.descdesc;}}这种错误在日常开发中很常见复制粘贴代码时忘记改code多人协作开发时重复定义新增枚举项时没注意已有值而问题在于这种错误在编译期不会被发现只有运行到对应逻辑才会报错。如果你正好没有覆盖到这个测试用例那就等着线上出问题吧。解决方案enum-check-maven-pluginenum-check-maven-plugin 就是为了解决这个问题而生的Maven插件。它能够✅在编译阶段自动检查枚举字段是否重复✅支持单字段检查比如code唯一✅支持组合字段检查多个字段组合唯一✅注解驱动只检查你标记的枚举不侵入其他代码✅支持多模块项目自动扫描所有模块✅源码级别解析不需要等待编译完成核心特性1. 注解驱动按需检查插件采用注解驱动你只需要在需要检查的枚举上添加EnumCheck注解即可importio.github.coderknock.enumcheck.annotation.EnumCheck;EnumCheck// 开启检查publicenumStatusEnum{// ...}不想检查的枚举不加注解就行完全灵活。2. 支持单字段和组合字段检查单字段检查最常用场景EnumCheck(fieldscode)// 检查code唯一publicenumErrorCodeEnum{SUCCESS(200,成功),BAD_REQUEST(400,错误请求),NOT_FOUND(404,未找到);// ...}组合字段检查多个字段联合唯一EnumCheck(fields{type,code})// type code 组合唯一publicenumBizErrorCodeEnum{// ...}3. 灵活配置插件提供了灵活的配置项plugingroupIdio.github.coderknock/groupIdartifactIdenum-check-maven-plugin/artifactIdversion2.0.0/versionexecutionsexecutiongoalsgoalcheck/goal/goals/execution/executionsconfiguration!-- 发现重复是否中断构建 --failOnErrortrue/failOnError!-- 指定要扫描的包不指定则扫描整个项目 --includesincludecom.example.*/include/includes/configuration/plugin4. 扫描效果展示当插件发现重复值时会在构建阶段立即报错阻止你把有问题的代码打包[ERROR] Found duplicate enum values: [ERROR] Enum: com.example.StatusEnum, field: code, value: 400 [ERROR] BAD_REQUEST [ERROR] NOT_FOUND [ERROR] Enumeration error check failed!这样就能在编译阶段就发现问题而不是等到线上运行出错。工作原理插件使用 JBoss Forge Roaster 进行源码级别解析不需要等待编译完成就能直接分析源码中的枚举定义。整体工作流程是否Maven 编译阶段扫描项目中所有 .java 文件找到带有 EnumCheck 的枚举解析注解配置获取要检查的字段提取所有枚举实例的字段值检查是否有重复发现重复?输出错误信息根据配置中断构建构建继续检查通过使用方式只需要两步就能集成到你的项目中第一步添加插件依赖在你的pom.xml中添加插件配置buildpluginsplugingroupIdio.github.coderknock/groupIdartifactIdenum-check-maven-plugin/artifactIdversion2.0.0/versionexecutionsexecutionphasecompile/phasegoalsgoalcheck/goal/goals/execution/executions/plugin/plugins/build第二步添加依赖注解项目中需要使用EnumCheck注解因此需要添加依赖dependencygroupIdio.github.coderknock/groupIdartifactIdenum-check-annotation/artifactIdversion2.0.0/version/dependency第三步在枚举上添加注解importio.github.coderknock.enumcheck.annotation.EnumCheck;EnumCheck(fieldscode)publicenumYourEnum{// ...}完成之后每次编译插件都会自动帮你检查。为什么选择这个插件对比其他方案方案优点缺点单元测试灵活需要手写测试用例容易遗漏运行时检查简单发现问题太晚已经到线上IDE检查开发阶段发现需要安装插件团队协作难以统一enum-check-maven-plugin编译阶段自动检查无需手写用例全团队统一需要集成到Maven构建核心优势提前发现问题在CI/CD流程就能发现错误不把问题带到线上零侵入只在需要检查的枚举上加注解不影响现有代码集成简单几分钟就能完成集成之后自动运行开源免费MIT许可证可自由使用和修改适用场景这个插件特别适合基础框架开发统一错误码定义需要保证code唯一企业级应用多种状态枚举、业务错误码管理多人协作项目避免多人开发导致的重复定义对质量要求高的项目尽可能在早期发现问题项目地址GitHubhttps://github.com/coder-knock/enum-check-maven-pluginMaven Centralhttps://search.maven.org/artifact/io.github.coder-knock/enum-check-maven-plugin欢迎Star、Fork也欢迎提交Issue和PR总结枚举字段重复是一个看似很小但危害很大的问题。通过在编译阶段引入检查我们可以用极小的成本避免潜在的线上故障。如果你也在Java项目中使用枚举定义错误码、状态码等需要保证唯一性的场景强烈推荐你试一试这个插件相信它能帮你省下不少调试时间。如果你觉得这个插件有用欢迎点个Star支持一下也欢迎分享给身边的Java开发朋友。有任何问题或建议欢迎在GitHub上提Issue。#枚举 #Java #Maven #插件 #静态检查 #代码质量 #Java开发 #编程#Java开发 #Maven插件 #代码质量 #静态检查 #枚举#编程 #技术分享 #开源项目 #开发者工具 #后端开发