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