<dependency>
+<dependency>
<groupId>com.tngtech.archunit</groupId>
<artifactId>archunit-junit4</artifactId>
- <version>0.13.1</version>
+ <version>0.14.0</version>
<scope>test</scope>
</dependency>
diff --git a/README.md b/README.md
index 20a83016f8..011717c124 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@ framework.
###### Gradle
```
-testImplementation 'com.tngtech.archunit:archunit:0.13.1'
+testImplementation 'com.tngtech.archunit:archunit:0.14.0'
```
###### Maven
@@ -26,7 +26,7 @@ testImplementation 'com.tngtech.archunit:archunit:0.13.1'
<dependency>
+<dependency>
<groupId>com.tngtech.archunit</groupId>
<artifactId>archunit-junit4</artifactId>
- <version>0.13.1</version>
+ <version>0.14.0</version>
<scope>test</scope>
</dependency>
dependencies {
- testImplementation 'com.tngtech.archunit:archunit-junit4:0.13.1'
+dependencies {
+ testImplementation 'com.tngtech.archunit:archunit-junit4:0.14.0'
}
<dependency>
+<dependency>
<groupId>com.tngtech.archunit</groupId>
<artifactId>archunit-junit5</artifactId>
- <version>0.13.1</version>
+ <version>0.14.0</version>
<scope>test</scope>
</dependency>
dependencies {
- testImplementation 'com.tngtech.archunit:archunit-junit5:0.13.1'
+dependencies {
+ testImplementation 'com.tngtech.archunit:archunit-junit5:0.14.0'
}
<dependency>
+<dependency>
<groupId>com.tngtech.archunit</groupId>
<artifactId>archunit</artifactId>
- <version>0.13.1</version>
+ <version>0.14.0</version>
<scope>test</scope>
</dependency>
dependencies {
- testImplementation 'com.tngtech.archunit:archunit:0.13.1'
+dependencies {
+ testImplementation 'com.tngtech.archunit:archunit:0.14.0'
}
JavaClasses classes = new ClassFileImporter().importPackages("com.mycompany.myapp");
+JavaClasses classes = new ClassFileImporter().importPackages("com.mycompany.myapp");
JavaClasses classes = new ClassFileImporter().importPath("/some/path");
+JavaClasses classes = new ClassFileImporter().importPath("/some/path");
JavaClass clazz = classes.get(Object.class);
+JavaClass clazz = classes.get(Object.class);
System.out.print(clazz.getSimpleName()); // returns 'Object'
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
+import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
// ...
@@ -755,7 +758,7 @@
-myRule.check(importedClasses);
+myRule.check(importedClasses);
@Test
+@Test
public void Services_should_only_be_accessed_by_Controllers() {
JavaClasses importedClasses = new ClassFileImporter().importPackages("com.mycompany.myapp");
@@ -789,7 +792,7 @@
-@RunWith(ArchUnitRunner.class) // Remove this line for JUnit 5!!
+@RunWith(ArchUnitRunner.class) // Remove this line for JUnit 5!!
@AnalyzeClasses(packages = "com.mycompany.myapp")
public class MyArchitectureTest {
@@ -816,7 +819,7 @@
-@RunWith(ArchUnitRunner::class) // Remove this line for JUnit 5!!
+@RunWith(ArchUnitRunner::class) // Remove this line for JUnit 5!!
@AnalyzeClasses(packagesOf = [MyArchitectureTest::class])
class MyArchitectureTest {
@ArchTest
@@ -848,7 +851,7 @@
-noClasses().that().resideInAPackage("..source..")
+noClasses().that().resideInAPackage("..source..")
.should().dependOnClassesThat().resideInAPackage("..foo..")
@@ -859,7 +862,7 @@
-classes().that().resideInAPackage("..foo..")
+classes().that().resideInAPackage("..foo..")
.should().onlyHaveDependentClassesThat().resideInAnyPackage("..source.one..", "..foo..")
@@ -873,7 +876,7 @@
-classes().that().haveNameMatching(".*Bar")
+classes().that().haveNameMatching(".*Bar")
.should().onlyBeAccessed().byClassesThat().haveSimpleName("Bar")
classes().that().haveSimpleNameStartingWith("Foo")
+classes().that().haveSimpleNameStartingWith("Foo")
.should().resideInAPackage("com.foo")
classes().that().implement(Connection.class)
+classes().that().implement(Connection.class)
.should().haveSimpleNameEndingWith("Connection")
classes().that().areAssignableTo(EntityManager.class)
+classes().that().areAssignableTo(EntityManager.class)
.should().onlyBeAccessed().byAnyPackage("..persistence..")
classes().that().areAssignableTo(EntityManager.class)
+classes().that().areAssignableTo(EntityManager.class)
.should().onlyBeAccessed().byClassesThat().areAnnotatedWith(Transactional.class)
layeredArchitecture()
+layeredArchitecture()
.layer("Controller").definedBy("..controller..")
.layer("Service").definedBy("..service..")
.layer("Persistence").definedBy("..persistence..")
@@ -960,7 +963,7 @@ 4.7. Cycle Ch
slices().matching("com.myapp.(*)..").should().beFreeOfCycles()
+slices().matching("com.myapp.(*)..").should().beFreeOfCycles()
JavaClasses classes = new ClassFileImporter().importPackages("com.mycompany.myapp");
+JavaClasses classes = new ClassFileImporter().importPackages("com.mycompany.myapp");
ArchRule rule =
+ArchRule rule =
classes().that().resideInAPackage("..service..")
.should().onlyBeAccessed().byAnyPackage("..controller..", "..service..");
JavaClasses importedClasses = new ClassFileImporter().importPackage("com.myapp");
+JavaClasses importedClasses = new ClassFileImporter().importPackage("com.myapp");
ArchRule rule = // define the rule
rule.check(importedClasses);
JavaClasses classes = new ClassFileImporter().importClasspath();
+JavaClasses classes = new ClassFileImporter().importClasspath();
JavaClasses classes = new ClassFileImporter().importPath("/some/path/to/classes");
+JavaClasses classes = new ClassFileImporter().importPath("/some/path/to/classes");
ImportOption ignoreTests = new ImportOption() {
+ImportOption ignoreTests = new ImportOption() {
@Override
public boolean includes(Location location) {
return !location.contains("/test/"); // ignore any URI to sources that contains '/test/'
@@ -1119,7 +1122,7 @@ 6.1. Import
new ClassFileImporter()
+new ClassFileImporter()
.withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
.withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
.importClasspath();
@@ -1251,7 +1254,7 @@
-JavaClasses classes = new ClassFileImporter().importClasspath(new ImportOptions());
+JavaClasses classes = new ClassFileImporter().importClasspath(new ImportOptions());
// ArchUnit's java.lang.String
JavaClass javaClass = classes.get(String.class);
@@ -1274,7 +1277,7 @@
-@interface CustomAnnotation {
+@interface CustomAnnotation {
String value();
}
@@ -1284,7 +1287,7 @@
-JavaAnnotation<?> annotation = javaClass.getAnnotationOfType("some.pkg.CustomAnnotation");
+JavaAnnotation<?> annotation = javaClass.getAnnotationOfType("some.pkg.CustomAnnotation");
// result is untyped, since it might not be on the classpath (e.g. enums)
Object value = annotation.get("value");
@@ -1295,7 +1298,7 @@
-CustomAnnotation annotation = javaClass.getAnnotationOfType(CustomAnnotation.class);
+CustomAnnotation annotation = javaClass.getAnnotationOfType(CustomAnnotation.class);
String value = annotation.value();
@@ -1321,7 +1324,7 @@
-Set<JavaClass> services = new HashSet<>();
+Set<JavaClass> services = new HashSet<>();
for (JavaClass clazz : classes) {
// choose those classes with FQN with infix '.service.'
if (clazz.getName().contains(".service.")) {
@@ -1357,7 +1360,7 @@
-ArchRule rule = ArchRuleDefinition.noClasses()
+ArchRule rule = ArchRuleDefinition.noClasses()
.that().resideInAPackage("..service..")
.should().accessClassesThat().resideInAPackage("..controller..");
@@ -1372,7 +1375,7 @@
-java.lang.AssertionError: Architecture Violation [Priority: MEDIUM] -
+java.lang.AssertionError: Architecture Violation [Priority: MEDIUM] -
Rule 'no classes that reside in a package '..service..'
should access classes that reside in a package '..controller..'' was violated (1 times):
Method <some.pkg.service.SomeService.callController()>
@@ -1387,7 +1390,7 @@
-noClasses()
+noClasses()
.that().resideInAPackage("..service..")
.or().resideInAPackage("..persistence..")
.should().accessClassesThat().resideInAPackage("..controller..")
@@ -1407,7 +1410,7 @@
-ArchRule rule = ArchRuleDefinition.methods()
+ArchRule rule = ArchRuleDefinition.methods()
.that().arePublic()
.and().areDeclaredInClassesThat().resideInAPackage("..controller..")
.should().beAnnotatedWith(Secured.class);
@@ -1427,7 +1430,7 @@
-classes that ${PREDICATE} should ${CONDITION}
+classes that ${PREDICATE} should ${CONDITION}
@@ -1438,7 +1441,7 @@
-DescribedPredicate<JavaClass> resideInAPackageService = // define the predicate
+DescribedPredicate<JavaClass> resideInAPackageService = // define the predicate
ArchCondition<JavaClass> accessClassesThatResideInAPackageController = // define the condition
noClasses().that(resideInAPackageService)
@@ -1452,7 +1455,7 @@
-DescribedPredicate<JavaClass> haveAFieldAnnotatedWithPayload =
+DescribedPredicate<JavaClass> haveAFieldAnnotatedWithPayload =
new DescribedPredicate<JavaClass>("have a field annotated with @Payload"){
@Override
public boolean apply(JavaClass input) {
@@ -1484,7 +1487,7 @@
-classes that have a field annotated with @Payload should only be accessed by @Secured methods
+classes that have a field annotated with @Payload should only be accessed by @Secured methods
@@ -1497,7 +1500,7 @@
-JavaClass.Predicates.simpleName(String)
+JavaClass.Predicates.simpleName(String)
@@ -1507,7 +1510,7 @@
-import static com.tngtech.archunit.core.domain.JavaClass.Predicates.assignableTo;
+import static com.tngtech.archunit.core.domain.JavaClass.Predicates.assignableTo;
import static com.tngtech.archunit.core.domain.JavaClass.Predicates.simpleName;
DescribedPredicate<JavaClass> serializableNamedFoo =
@@ -1523,7 +1526,7 @@
-HasName.Predicates.name(String)
+HasName.Predicates.name(String)
@@ -1533,7 +1536,7 @@
-// Does not compile, because type(..) targets a subtype of HasName
+// Does not compile, because type(..) targets a subtype of HasName
HasName.Predicates.name("").and(JavaClass.Predicates.type(Serializable.class))
// Does compile, because name(..) targets a supertype of JavaClass
@@ -1555,7 +1558,7 @@
-ArchCondition<JavaClass> callEquals =
+ArchCondition<JavaClass> callEquals =
ArchConditions.callMethod(Object.class, "equals", Object.class);
ArchCondition<JavaClass> callHashCode =
ArchConditions.callMethod(Object.class, "hashCode");
@@ -1571,7 +1574,7 @@
-classes that ${PREDICATE} should ${CONDITION}
+classes that ${PREDICATE} should ${CONDITION}
@@ -1595,7 +1598,7 @@
-ClassesTransformer<JavaPackage> packages = new AbstractClassesTransformer<JavaPackage>("packages") {
+ClassesTransformer<JavaPackage> packages = new AbstractClassesTransformer<JavaPackage>("packages") {
@Override
public Iterable<JavaPackage> doTransform(JavaClasses classes) {
Set<JavaPackage> result = new HashSet<>();
@@ -1617,7 +1620,7 @@
-// how we map classes to business modules
+// how we map classes to business modules
ClassesTransformer<BusinessModule> businessModules = ...
// filter business module dealing with orders
@@ -1639,7 +1642,7 @@
-classes().that(haveAFieldAnnotatedWithPayload).should(onlyBeAccessedBySecuredMethods)
+classes().that(haveAFieldAnnotatedWithPayload).should(onlyBeAccessedBySecuredMethods)
.because("@Secured methods will be intercepted, checking for increased privileges " +
"and obfuscating sensitive auditing information");
@@ -1651,7 +1654,7 @@
-classes().that(haveAFieldAnnotatedWithPayload).should(onlyBeAccessedBySecuredMethods)
+classes().that(haveAFieldAnnotatedWithPayload).should(onlyBeAccessedBySecuredMethods)
.as("Payload may only be accessed in a secure way");
@@ -1676,7 +1679,7 @@
archunit_ignore_patterns.txt
-.*some\.pkg\.LegacyService.*
+.*some\.pkg\.LegacyService.*
@@ -1689,7 +1692,7 @@
archunit_ignore_patterns.txt
-# There are many known violations where LegacyService is involved; we'll ignore them all
+# There are many known violations where LegacyService is involved; we'll ignore them all
.*some\.pkg\.LegacyService.*
@@ -1711,7 +1714,7 @@ 8.1. Archit
-com.tngtech.archunit.library.Architectures
+com.tngtech.archunit.library.Architectures
-onionArchitecture()
+onionArchitecture()
.domainModels("com.myapp.domain.model..")
.domainServices("com.myapp.domain.service..")
.applicationServices("com.myapp.application..")
@@ -1790,7 +1793,7 @@ 8.2. Slices
-com.tngtech.archunit.library.dependencies.SlicesRuleDefinition
+com.tngtech.archunit.library.dependencies.SlicesRuleDefinition
-// sort classes by the first package after 'myapp'
+// sort classes by the first package after 'myapp'
// then check those slices for cyclic dependencies
SlicesRuleDefinition.slices().matching("..myapp.(*)..").should().beFreeOfCycles()
@@ -1819,7 +1822,7 @@ 8.2. Slices
-SliceAssignment legacyPackageStructure = new SliceAssignment() {
+SliceAssignment legacyPackageStructure = new SliceAssignment() {
// this will specify which classes belong together in the same slice
@Override
public SliceIdentifier getIdentifierOf(JavaClass javaClass) {
@@ -1854,7 +1857,7 @@ 8.2.1. Co
archunit.properties
-# This will limit the maximum number of cycles to detect and thus required CPU and heap.
+# This will limit the maximum number of cycles to detect and thus required CPU and heap.
# default is 100
cycles.maxNumberToDetect=50
@@ -1877,7 +1880,7 @@ <
-com.tngtech.archunit.library.GeneralCodingRules
+com.tngtech.archunit.library.GeneralCodingRules
@@ -1893,7 +1896,7 @@
-com.tngtech.archunit.library.plantuml
+com.tngtech.archunit.library.plantuml
@@ -1902,7 +1905,7 @@
-URL myDiagram = getClass().getResource("my-diagram.puml");
+URL myDiagram = getClass().getResource("my-diagram.puml");
classes().should(adhereToPlantUmlDiagram(myDiagram, consideringAllDependencies()));
@@ -1919,7 +1922,7 @@
-@startuml
+@startuml
[Some Source] <<..some.source..>>
[Some Target] <<..some.target..>> as target
@@ -1940,7 +1943,7 @@ 8.4.1
-// considers all dependencies possible (including java.lang, java.util, ...)
+// considers all dependencies possible (including java.lang, java.util, ...)
classes().should(adhereToPlantUmlDiagram(
mydiagram, consideringAllDependencies())
@@ -1960,7 +1963,7 @@ 8.4.1
-// there are further ignore flavors available
+// there are further ignore flavors available
classes().should(adhereToPlantUmlDiagram(mydiagram).ignoreDependencies(predicate))
@@ -2019,7 +2022,7 @@ 8.5.1. Usage
-ArchRule rule = FreezingArchRule.freeze(classes().should()./*complete ArchRule*/);
+ArchRule rule = FreezingArchRule.freeze(classes().should()./*complete ArchRule*/);
@@ -2039,7 +2042,7 @@ 8.5.2. Conf
archunit.properties
-freeze.store.default.path=/some/path/in/a/vcs/repo
+freeze.store.default.path=/some/path/in/a/vcs/repo
@@ -2048,7 +2051,7 @@ 8.5.2. Conf
archunit.properties
-# must be set to true to allow the creation of a new violation store
+# must be set to true to allow the creation of a new violation store
# default is false
freeze.store.default.allowStoreCreation=true
@@ -2068,7 +2071,7 @@ 8.5.2. Conf
--Darchunit.freeze.store.default.allowStoreCreation=true
+-Darchunit.freeze.store.default.allowStoreCreation=true
@@ -2091,7 +2094,7 @@ Violati
-FreezingArchRule.freeze(rule).persistIn(customViolationStore);
+FreezingArchRule.freeze(rule).persistIn(customViolationStore);
-freeze.store=fully.qualified.name.of.MyCustomViolationStore
+freeze.store=fully.qualified.name.of.MyCustomViolationStore
-freeze.store.propOne=valueOne
+freeze.store.propOne=valueOne
freeze.store.propTwo=valueTwo
@@ -2117,7 +2120,7 @@ Violati
-propOne=valueOne
+propOne=valueOne
propTwo=valueTwo
@@ -2132,7 +2135,7 @@
-FreezingArchRule.freeze(rule).associateViolationLinesVia(customLineMatcher);
+FreezingArchRule.freeze(rule).associateViolationLinesVia(customLineMatcher);
@@ -2160,7 +2163,7 @@ 9. JUnit Su
-@Test
+@Test
public void rule1() {
JavaClasses importedClasses = new ClassFileImporter().importClasspath();
@@ -2199,7 +2202,7 @@ 9.1.1. Writ
-@RunWith(ArchUnitRunner.class) // Remove this line for JUnit 5!!
+@RunWith(ArchUnitRunner.class) // Remove this line for JUnit 5!!
@AnalyzeClasses(packages = "com.myapp")
public class ArchitectureTest {
@@ -2237,7 +2240,7 @@
-@AnalyzeClasses(packages = {"com.myapp.subone", "com.myapp.subone"})
+@AnalyzeClasses(packages = {"com.myapp.subone", "com.myapp.subone"})
@@ -2246,7 +2249,7 @@
-@AnalyzeClasses(packagesOf = {SubOneConfiguration.class, SubTwoConfiguration.class})
+@AnalyzeClasses(packagesOf = {SubOneConfiguration.class, SubTwoConfiguration.class})
@@ -2254,7 +2257,7 @@
-public class MyLocationProvider implements LocationProvider {
+public class MyLocationProvider implements LocationProvider {
@Override
public Set<Location> get(Class<?> testClass) {
// Determine Locations (= URLs) to import
@@ -2272,7 +2275,7 @@
-@AnalyzeClasses(importOptions = {DoNotIncludeTests.class, DoNotIncludeJars.class})
+@AnalyzeClasses(importOptions = {DoNotIncludeTests.class, DoNotIncludeJars.class})
@@ -2297,7 +2300,7 @@
-@AnalyzeClasses(packages = "com.myapp.special", cacheMode = CacheMode.PER_CLASS)
+@AnalyzeClasses(packages = "com.myapp.special", cacheMode = CacheMode.PER_CLASS)
-public class ArchitectureTest {
+public class ArchitectureTest {
// will run
@ArchTest
@@ -2336,7 +2339,7 @@ 9.1.5. Gr
-public class ServiceRules {
+public class ServiceRules {
@ArchTest
public static final ArchRule ruleOne = ...
@@ -2392,7 +2395,7 @@
--Darchunit.propertyName=propertyValue
+-Darchunit.propertyName=propertyValue
@@ -2414,7 +2417,7 @@
archunit.properties
-resolveMissingDependenciesFromClassPath=false
+resolveMissingDependenciesFromClassPath=false
@@ -2442,7 +2445,7 @@
-com.tngtech.archunit.core.importer.resolvers.ClassResolver
+com.tngtech.archunit.core.importer.resolvers.ClassResolver
@@ -2451,7 +2454,7 @@
archunit.properties
-classResolver=some.pkg.MyCustomClassResolver
+classResolver=some.pkg.MyCustomClassResolver
@@ -2461,7 +2464,7 @@
archunit.properties
-classResolver.args=myArgOne,myArgTwo
+classResolver.args=myArgOne,myArgTwo
-
-
+
+
\ No newline at end of file
diff --git a/docs/userguide/html/class-naming-deps.png b/docs/userguide/html/class-naming-deps.png
index 3768d47466..6b263e4e5e 100644
Binary files a/docs/userguide/html/class-naming-deps.png and b/docs/userguide/html/class-naming-deps.png differ
diff --git a/docs/userguide/html/class-package-contain.png b/docs/userguide/html/class-package-contain.png
index 6b3e88b7ea..57427037a1 100644
Binary files a/docs/userguide/html/class-package-contain.png and b/docs/userguide/html/class-package-contain.png differ
diff --git a/docs/userguide/html/cycle-check.png b/docs/userguide/html/cycle-check.png
index d3551dc93d..908c03ddfa 100644
Binary files a/docs/userguide/html/cycle-check.png and b/docs/userguide/html/cycle-check.png differ
diff --git a/docs/userguide/html/diamond-example.png b/docs/userguide/html/diamond-example.png
index 5645eee1ae..891ee258c6 100644
Binary files a/docs/userguide/html/diamond-example.png and b/docs/userguide/html/diamond-example.png differ
diff --git a/docs/userguide/html/domain-overview.png b/docs/userguide/html/domain-overview.png
index 2ed172bb2c..7b7d57d9a2 100644
Binary files a/docs/userguide/html/domain-overview.png and b/docs/userguide/html/domain-overview.png differ
diff --git a/docs/userguide/html/import-vs-lang.png b/docs/userguide/html/import-vs-lang.png
index 35985153b9..3087d7bf12 100644
Binary files a/docs/userguide/html/import-vs-lang.png and b/docs/userguide/html/import-vs-lang.png differ
diff --git a/docs/userguide/html/inheritance-access-check.png b/docs/userguide/html/inheritance-access-check.png
index c17ae1f3fd..e44934bb1a 100644
Binary files a/docs/userguide/html/inheritance-access-check.png and b/docs/userguide/html/inheritance-access-check.png differ
diff --git a/docs/userguide/html/inheritance-annotation-check.png b/docs/userguide/html/inheritance-annotation-check.png
index 762ca11edf..60da19e79b 100644
Binary files a/docs/userguide/html/inheritance-annotation-check.png and b/docs/userguide/html/inheritance-annotation-check.png differ
diff --git a/docs/userguide/html/inheritance-naming-check.png b/docs/userguide/html/inheritance-naming-check.png
index 528d537ca9..f0e145ffb3 100644
Binary files a/docs/userguide/html/inheritance-naming-check.png and b/docs/userguide/html/inheritance-naming-check.png differ
diff --git a/docs/userguide/html/layer-check.png b/docs/userguide/html/layer-check.png
index 46891d3e32..494b83d17a 100644
Binary files a/docs/userguide/html/layer-check.png and b/docs/userguide/html/layer-check.png differ
diff --git a/docs/userguide/html/onion-architecture-check.png b/docs/userguide/html/onion-architecture-check.png
index aae91f6dee..577bb5eb9e 100644
Binary files a/docs/userguide/html/onion-architecture-check.png and b/docs/userguide/html/onion-architecture-check.png differ
diff --git a/docs/userguide/html/package-deps-no-access.png b/docs/userguide/html/package-deps-no-access.png
index 96381eb5a5..9769384e37 100644
Binary files a/docs/userguide/html/package-deps-no-access.png and b/docs/userguide/html/package-deps-no-access.png differ
diff --git a/docs/userguide/html/package-deps-only-access.png b/docs/userguide/html/package-deps-only-access.png
index fb9275845a..d6f26df943 100644
Binary files a/docs/userguide/html/package-deps-only-access.png and b/docs/userguide/html/package-deps-only-access.png differ
diff --git a/docs/userguide/html/resolution-example.png b/docs/userguide/html/resolution-example.png
index 87b091fad4..d879ee4d1b 100644
Binary files a/docs/userguide/html/resolution-example.png and b/docs/userguide/html/resolution-example.png differ
diff --git a/docs/userguide/html/resolution-overview.png b/docs/userguide/html/resolution-overview.png
index 3534e0ea8c..63216d73c5 100644
Binary files a/docs/userguide/html/resolution-overview.png and b/docs/userguide/html/resolution-overview.png differ
diff --git a/docs/userguide/html/simple-plantuml-archrule-example.png b/docs/userguide/html/simple-plantuml-archrule-example.png
index 9dcb93ccc5..73a4e9a6fe 100644
Binary files a/docs/userguide/html/simple-plantuml-archrule-example.png and b/docs/userguide/html/simple-plantuml-archrule-example.png differ
diff --git a/settings.gradle b/settings.gradle
index 7dbee14b3a..b7c4dcecfe 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -4,7 +4,7 @@ plugins {
include 'archunit', 'archunit-example', 'archunit-integration-test',
'archunit-junit', 'archunit-junit4', 'archunit-junit5-api','archunit-junit5-engine-api','archunit-junit5-engine', 'archunit-junit5',
- 'archunit-example:example-plain', 'archunit-example:example-junit4', 'archunit-example:example-junit5'
+ 'archunit-example:example-plain', 'archunit-example:example-junit4', 'archunit-example:example-junit5', 'docs'
project(':archunit-junit4').projectDir = file('archunit-junit/junit4')
project(':archunit-junit5-api').projectDir = file('archunit-junit/junit5/api')
@@ -17,4 +17,4 @@ gradleEnterprise {
termsOfServiceUrl = "https://gradle.com/terms-of-service"
termsOfServiceAgree = "yes"
}
-}
\ No newline at end of file
+}