首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ArchUnit规则中排除类?

如何在ArchUnit规则中排除类?
EN

Stack Overflow用户
提问于 2020-01-10 16:54:37
回答 3查看 2.9K关注 0票数 5

在ArchUnit中为分层架构创建规则时,我不清楚如何排除单个类(Main)。The base example不包括源和目标。

..。但我不明白它是如何转化为我的需求的。我只想让Main被忽略。为什么?因为Main引用了所有的层,因为它注入了所有的依赖项。

The original code is in my GitHub along with the failing test.(该项目是一个虚拟项目,因此它的运行很简单;只需克隆它,运行测试,然后看到一个失败)。

EN

回答 3

Stack Overflow用户

发布于 2020-01-11 05:46:30

假设您已经导入了所有类:

代码语言:javascript
复制
JavaClasses classes = new ClassFileImporter().importPackages("org.example");

然后,您通常会根据ArchRule检查所有这些类,无论它是类规则还是架构规则:

代码语言:javascript
复制
ArchRule rule = classes()
    .that().areAnnotatedWith(Service.class)
    .should().haveSimpleNameEndingWith("Service");

rule.check(classes);

要从规则中排除类,可以过滤classes并将过滤后的JavaClasses传递给规则:

代码语言:javascript
复制
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等)您可以调整滤镜:

代码语言:javascript
复制
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);
票数 4
EN

Stack Overflow用户

发布于 2020-01-11 16:41:41

这样如何:

代码语言:javascript
复制
.ignoreDependency(fullNameMatching("users.WebAppConfig"), alwaysTrue())
票数 2
EN

Stack Overflow用户

发布于 2020-01-26 19:59:58

另一种可能是将负责启动应用程序的源代码部分(“用户”包)显式声明为真正的层,并将其集成到您的规则中。毕竟,这就是你想让你的源代码工作的方式,所以我想知道让它成为一个异常是不是可行的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59678301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档