My usual practice is to put test dependencies in my Maven parent POM when working on a multi-module project. And I usually have a "testing" module as well for shared test resources such as a logback-test.xml
to quiet down test output.
The test dependencies look like clutter in my parent POM, and they are, or so I recently realized.
As all my non-test modules use the "testing" module as a test dependency, I clean this up by moving my test dependencies out of the parent POM and into the "testing" module alongside the common resources. So my layout looks like:
- Parent POM
- Common properties such as dependency versions, dependencies management marks the "testing" module as "test" scope.
- Testing POM
- Test dependencies not marked as "test" scope—consumers of this module will mark it as "test", and its transitive dependencies will automatically be "test" as well.
- Non-test POMs
- Use the "testing" module as a dependency—specified in the parent POM dependencies management—, no test dependencies or resources inherited from parent POM.
Examples: