Skip to content

ArchUnit 1.0.0

Compare
Choose a tag to compare
@codecholeric codecholeric released this 03 Oct 18:04
· 373 commits to main since this release

⚠️ If you upgrade from the latest 0.x version, please also refer to the release notes of release candidate 1.0.0-rc1 as these release notes refer to upgrading from the release candidate ⚠️

Breaking Changes

  • Naming around JavaPackage subpackages and dependencies has been improved to remove ambiguities. In general, whenever all classes from a package and subpackages recursively are involved, this is now called "package tree". Otherwise, it only targets the classes directly within this package (see #919/#968; thanks a lot to @grimsa)
    The following mapping shows how to translate the old methods to the current methods:
    • getAllClasses() -> getClassesInPackageTree()
    • getAllSubpackages() -> getSubpackagesInTree()
    • getClassDependenciesFromSelf() -> getClassDependenciesFromThisPackageTree()
    • getClassDependenciesToSelf() -> getClassDependenciesToThisPackageTree()
    • getPackageDependenciesFromSelf() -> getPackageDependenciesFromThisPackageTree()
    • getPackageDependenciesToSelf() -> getPackageDependenciesToThisPackageTree()
    • accept(..) -> traversePackageTree(..)
  • Importing the default package via ClassFileImporter.importPackages("") will now yields the same result as using importClasspath() without any ImportOption (see #954)
  • ClassFileImporter.importClasspath() now behaves consistently to other import APIs. I.e. no default ImportOptions like DoNotIncludeArchives are added anymore, instead all ImportOptions need to be added the same way as for all other import methods (see #958)
  • The custom collection ImportOptions has been removed from the public API and been replaced by a standard Collection<ImportOption> where appropriate (see #958)
  • The package com.tngtech.archunit.library.plantuml has been moved to com.tngtech.archunit.library.plantuml.rules to make room for adding other PlantUML related features (see #959)
  • SLF4J-API has been upgraded from 1.7.30 to 2.0.3, so any log adapter dependency to be used with ArchUnit (e.g. to hook in Log4J) has to be compatible with SLF4J-API 2.x from now on (see #966)

Bug Fixes

  • Fix bug where multiple synthetic access calls to methods like access$123(..) would lead to only one access being imported. Note, that these synthetic methods are added for calls to private fields / methods from inner classes to outer classes, etc. (see #957)

Enhancements

Lang

  • archunit_ignore_patterns.txt is now also respected by FreezingArchRule. Thus, ignored violations are not added to the ViolationStore anymore (see #915)

Library

  • testClassesShouldResideInTheSamePackageAsImplementation(..) now supports multiple test classes with same simple name (see #918; thanks a lot to @mslowiak)
  • PlantUmlArchCondition now does not throw exceptions anymore, if a class is in none or multiple components, but instead reports those as standard violations. This way these violations can also be frozen via FreezingArchRule instead of crashing the test (see #960)

Further Acknowledgement

  • Thanks a lot to @hankem for upgrading various dependencies, cleaning up code and extensive reviews