在ArchUnit中为分层架构创建规则时,我不清楚如何排除单个类(Main)。The base example不包括源和目标。
..。但我不明白它是如何转化为我的需求的。我只想让Main被忽略。为什么?因为Main引用了所有的层,因为它注入了所有的依赖项。
The original code is in my GitHub along with the failing test.(该项目是一个虚拟项目,因此它的运行很简单;只需克隆它,运行测试,然后看到一个失败)。
发布于 2020-01-11 05:46:30
假设您已经导入了所有类:
JavaClasses classes = new ClassFileImporter().importPackages("org.example");然后,您通常会根据ArchRule检查所有这些类,无论它是类规则还是架构规则:
ArchRule rule = classes()
.that().areAnnotatedWith(Service.class)
.should().haveSimpleNameEndingWith("Service");
rule.check(classes);要从规则中排除类,可以过滤classes并将过滤后的JavaClasses传递给规则:
import static com.tngtech.archunit.base.DescribedPredicate.not;
import static com.tngtech.archunit.core.domain.JavaClass.Predicates.equivalentTo;
import static com.tngtech.archunit.lang.conditions.ArchPredicates.are;
JavaClasses allExceptMain = classes.that(are(not(equivalentTo(Main.class))));
rule.check(allExceptMain);要排除类Main和在Main中定义的所有类(内部类、匿名类、lambda等)您可以调整滤镜:
import static com.tngtech.archunit.base.DescribedPredicate.not;
import static com.tngtech.archunit.core.domain.JavaClass.Predicates.belongToAnyOf;
JavaClasses allExceptMain = classes.that(not(belongToAnyOf(Main.class)));
rule.check(allExceptMain);发布于 2020-01-11 16:41:41
这样如何:
.ignoreDependency(fullNameMatching("users.WebAppConfig"), alwaysTrue())发布于 2020-01-26 19:59:58
另一种可能是将负责启动应用程序的源代码部分(“用户”包)显式声明为真正的层,并将其集成到您的规则中。毕竟,这就是你想让你的源代码工作的方式,所以我想知道让它成为一个异常是不是可行的方法。
https://stackoverflow.com/questions/59678301
复制相似问题