ArchUnit触发ComponentIntersectionException异常的原因是什么?
问题根源
你遇到的ComponentIntersectionException是组件包匹配规则重叠导致的:
- ArchUnit解析PlantUML的
<<..xx..>>标注时,默认只要类的全限定包名包含标注内的字符串,就会被归属到对应组件 - 报错类的全路径为
com.yyy.xxx.common.configurations.properties.SomeClass,包名同时命中两个组件的匹配规则:- Common组件的
<<..common..>>命中路径中的common段 - Configuration组件的
<<..configurations.properties..>>命中路径中的configurations.properties段
- Common组件的
- 该类同时被归属到两个互斥组件,触发了校验异常
修复方案
可选择任意一种方式解决:
- 调整Common组件的匹配规则,缩小匹配范围,比如修改为
<<..common.*, !..common.configurations..>>,排除common目录下的configurations子包 - 将两个组件的匹配规则修改为更精准的前缀匹配,比如Common改成
<<com.yyy.xxx.common.>>,Configuration改成<<com.yyy.xxx.common.configurations.properties.>>,从根源避免匹配重叠 - 如需特殊场景允许部分类归属多组件,可在校验规则中补充自定义组件归属逻辑,但该方案会破坏架构边界清晰度,不推荐使用
内容的提问来源于stack exchange,提问作者HellishHeat
相关产品推荐
相关产品推荐

