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..");
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With