Consider you have imported all your classes:
JavaClasses classes = new ClassFileImporter().importPackages("org.example");
Then you typically check all these classes against an ArchRule, no matter if it's a class rule or an architecture rule:
ArchRule rule = classes()
.that().areAnnotatedWith(Service.class)
.should().haveSimpleNameEndingWith("Service");
rule.check(classes);
To exclude classes from the rule, you could filter classes
and pass the filtered JavaClasses
to the rule:
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);
To exclude the class Main
and all classes that are defined inside of Main
(inner classes, anonymous classes, lambdas etc.) you could adjust the filter:
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);