ArchUnit 类 应该只依赖于包中的特定 类

ArchUnit classes should depend only on particular classes from a package

我有两个独立的包:

mycomp.sales
- Order
- OrderPlaced
mycom.delivery
- Delivery
- OrderPlacedListener (depends on mycomp.sales.OrderPlaced)

我想设置一个规则来检查包 mycom.delivery 是否仅依赖于 OrderPlaced 而在包 mycomp.sales 中没有其他 类。

到目前为止我想到了这个:

JavaClasses importedClasses = new ClassFileImporter().importPackages("mycomp.delivery");
ArchRule rule = classes()
        .should().onlyDependOnClassesThat().resideOutsideOfPackages("mycomp.sales..")
        .orShould().onlyDependOnClassesThat().areAssignableTo(OrderPlaced.class);
rule.check(importedClasses);

但这在 OrderPlacedListener 上失败了(它依赖于 mycomp.sales.OrderPlaced)。

如何操作?

在您的代码中,两个 OR 子句是单独评估的,这意味着 1. 所有依赖项都必须在 mycomp.sales.. 之外(实际上不是)或 2. 所有依赖项都必须可分配给 OrderPlaced (这显然不是)。

你必须像这样定义一个复合规则:

ArchRule rule = classes()
    .should().onlyDependOnClassesThat(
        resideOutsideOfPackages("mycomp.sales..")
            .or(type(OrderPlaced.class)));