ArchUnit中如何针对特定类替代resideOutsideOfPackages方法?
解决方案
你不需要迁移ServiceA,直接通过ArchUnit的条件组合就能实现需求,有两种更直观的写法:
写法一:修改原规则的排除条件
在原规则基础上,给resideOutsideOfPackages追加「排除ServiceA」的条件,意思是:app包下的类不允许依赖「不在允许包内,且不是ServiceA」的类:
val rule: ArchRule = noClasses().that().resideInAPackage("$Base.app..") .should().dependOnClassesThat() .resideOutsideOfPackages(allowablePackages) .and().not().belongToAnyOf(ServiceA::class.java) rule.check(importedClasses)
写法二:改用onlyDependOnClassesThat(逻辑更清晰)
直接明确app包下的类只能依赖「允许包内的类,或者ServiceA」,规则意图一目了然:
val rule: ArchRule = classes().that().resideInAPackage("$Base.app..") .should().onlyDependOnClassesThat( resideInAnyPackage(*allowablePackages) .or().belongToAnyOf(ServiceA::class.java) ) rule.check(importedClasses)
两种写法都能满足需求,无需调整现有包结构。
内容的提问来源于stack exchange,提问作者HomeLighter
相关产品推荐
相关产品推荐

