Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ArchUnit: How to avoid dependency violation to java classes

Tags:

java

archunit

I want to verify, that classes within a given package, only refer to classes that reside in the package itself. However I get a violation, telling me that the a class depends on e.g. java.lang.String, which is totally ok for me. Is there a way to ignore the basic java packages?

        @ArchTest
        static final ArchRule zeroDependencyOfDomain = noClasses().that()
            .resideInAPackage("..domain..")
            .should().dependOnClassesThat()
            .resideOutsideOfPackages("..domain..");
like image 800
bertolami Avatar asked Apr 01 '26 07:04

bertolami


1 Answers

If you don't want to explicitly specify all external packages like java., javax., com.google., org.apache. etc. and you just care about project packages, then you can just join two conditions like "domain or external lib".

String PROJECT_PACKAGE = "com.myproject..";

DescribedPredicate<JavaClass> domainOrExternalLibPredicate = JavaClass.Predicates.resideInAnyPackage("..domain..")
    .or(JavaClass.Predicates.resideOutsideOfPackage(PROJECT_PACKAGE));

@ArchTest
static final ArchRule zeroDependencyOfDomain = classes().that()
    .resideInAPackage("..domain..")
    .should().onlyDependOnClassesThat()
    .resideInAnyPackage(domainOrExternalLibPredicate);

In this caste, external lib is defined as anything outside your PROJECT_PACKAGE.

like image 112
Tomasz Fijałkowski Avatar answered Apr 02 '26 19:04

Tomasz Fijałkowski