我有两个单独的软件包:

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)));

10-07 19:06