package com.tngtech.archunit.exampletest.junit; import com.tngtech.archunit.junit.AnalyzeClasses; import com.tngtech.archunit.junit.ArchIgnore; import com.tngtech.archunit.junit.ArchTest; import com.tngtech.archunit.junit.ArchUnitRunner; import com.tngtech.archunit.lang.ArchRule; import org.junit.runner.RunWith; import static com.tngtech.archunit.library.Architectures.layeredArchitecture; @RunWith(ArchUnitRunner.class) @AnalyzeClasses(packages = "com.tngtech.archunit.example") public class LayeredArchitectureTest { @ArchTest @ArchIgnore public static final ArchRule layer_dependencies_are_respected = layeredArchitecture() .layer("Controllers").definedBy("com.tngtech.archunit.example.controller..") .layer("Services").definedBy("com.tngtech.archunit.example.service..") .layer("Persistence").definedBy("com.tngtech.archunit.example.persistence..") .whereLayer("Controllers").mayNotBeAccessedByAnyLayer() .whereLayer("Services").mayOnlyBeAccessedByLayers("Controllers") .whereLayer("Persistence").mayOnlyBeAccessedByLayers("Services"); }