Предположим, что вы импортировали все свои классы:
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
(внутренние классы, анонимные классы, lambdas et c.) Вы можете настроить фильтр:
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);