You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:52:43