Post-Compile Checks

Learn how you can use post-compile checks to check if dependency rules are not violated.

As soon as we use the public modifier on a class, the compiler will let any other class use it, even if the direction of the dependency points in the wrong direction according to our architecture.

Since the compiler won’t help us out in these cases, we have to find other means to check that the Dependency Rule isn’t violated.

Implementing post-compile checks

One way is to introduce post-compile checks, i.e., checks that are conducted at runtime, when the code has already been compiled. Such runtime checks are best run during automated tests within a continuous integration build.


A tool that supports this kind of checks for Java is ArchUnit. Among other things, ArchUnit provides an API to check if dependencies point in the expected direction. If it finds a violation, it will throw an exception. It’s best to run a test based on a unit testing framework like JUnit from within, making the test fail in case of a dependency violation.

With ArchUnit, we can now check the dependencies between our layers, assuming that each layer has its own package, as defined in the package structure discussed in the previous section. For example, we can check that there is no dependency from the domain layer to the outward-lying application layer:

Get hands-on with 1200+ tech skills courses.