Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArchUnit:检查包是否相互依赖的最优雅的方法_Java_Archunit - Fatal编程技术网

Java ArchUnit:检查包是否相互依赖的最优雅的方法

Java ArchUnit:检查包是否相互依赖的最优雅的方法,java,archunit,Java,Archunit,我有两个包com.myapp.foo和com.myapp.bar,我想知道最优雅的方法来明确检查这两个包(只有那些,因为还有更多的com.myapp.XX)是否相互依赖 这就是我现在拥有的(工作出色): 是否有一种更优雅的方式,可能不使用切片赋值?谢谢 我可能会使用两条规则 @ArchTest final ArchRule fooShouldNotDependOnBar = ArchRuleDefinition .classes() .that().resideInAnyPackage("com

我有两个包
com.myapp.foo
com.myapp.bar
,我想知道最优雅的方法来明确检查这两个包(只有那些,因为还有更多的
com.myapp.XX
)是否相互依赖

这就是我现在拥有的(工作出色):


是否有一种更优雅的方式,可能不使用
切片赋值
?谢谢

我可能会使用两条规则

@ArchTest
final ArchRule fooShouldNotDependOnBar = ArchRuleDefinition
.classes()
.that().resideInAnyPackage("com.myapp.foo")
.should().onlyDependOnClassesThat()
.resideOutsideOfPackage("com.myapp.bar");

@ArchTest
final ArchRule barShouldNotDependOnFoo = ArchRuleDefinition
.classes()
.that().resideInAnyPackage("com.myapp.bar")
.should().onlyDependOnClassesThat()
.resideOutsideOfPackage("com.myapp.foo");
如果希望在单个规则中编写相同的代码,而不使用自定义类,那么以下操作应该可以。我不确定我是否会称之为优雅,因为它似乎有点复杂。也许有更好的方法用一条规则来编写它

@ArchTest
final ArchRule packagesFooAndBarNotDependOnEachOther = SlicesRuleDefinition
    .slices()
    .matching("com.myapp.(*)")
    .should()
    .notDependOnEachOther()
    .ignoreDependency(
        JavaClass.Predicates.resideOutsideOfPackages("com.myapp.foo", "com.myapp.bar"),
        DescribedPredicate.alwaysTrue())
    .ignoreDependency(
        DescribedPredicate.alwaysTrue(),
        JavaClass.Predicates.resideOutsideOfPackages("com.myapp.foo", "com.myapp.bar"))
    );
规则首先匹配
com.myapp
的所有直接子包。第一个
ignoreDependency
然后排除给定包之外类的所有依赖项(以允许例如
com.myapp.xx
访问
com.myapp.foo
)。第二个
ignoreDependency
排除给定包到任何外部包的所有依赖关系(以允许例如
com.myapp.foo
访问
com.myapp.xx

@ArchTest
final ArchRule packagesFooAndBarNotDependOnEachOther = SlicesRuleDefinition
    .slices()
    .matching("com.myapp.(*)")
    .should()
    .notDependOnEachOther()
    .ignoreDependency(
        JavaClass.Predicates.resideOutsideOfPackages("com.myapp.foo", "com.myapp.bar"),
        DescribedPredicate.alwaysTrue())
    .ignoreDependency(
        DescribedPredicate.alwaysTrue(),
        JavaClass.Predicates.resideOutsideOfPackages("com.myapp.foo", "com.myapp.bar"))
    );