This rule checks the dependencies and fails if any class is present in more than one dependency.
The following parameters are supported by this rule:
Sample Plugin Configuration:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>1.4.1</version> <!-- find the latest version at http://maven.apache.org/plugins/maven-enforcer-plugin/ --> <executions> <execution> <id>enforce-ban-duplicate-classes</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <banDuplicateClasses> <ignoreClasses> <!-- example of ignoring one specific class --> <ignoreClass>com.xyz.i18n.Messages</ignoreClass> <!-- example of ignoring with wildcards --> <ignoreClass>org.apache.commons.logging.*</ignoreClass> </ignoreClasses> <scopes> <scope>compile</scope> <scope>provided</scope> </scopes> <findAllDuplicates>true</findAllDuplicates> <ignoreWhenIdentical>true</ignoreWhenIdentical> </banDuplicateClasses> </rules> <fail>true</fail> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.codehaus.mojo</groupId> <artifactId>extra-enforcer-rules</artifactId> <version>1.3</version> </dependency> </dependencies> </plugin> </plugins> </build> [...] </project>
You can even ignore classes per dependency if you'd like. For every dependency you can specify either the groupId, artifactId, type or classifier.
You can't specify the version, because once Maven has resolved the version of a specific dependency there's only one version available.
Note that you can use wildcard-expressions for these values, i.e. a '?' for one character and a '*' for any number of characters.
The configuration would look like this
<configuration> <rules> <banDuplicateClasses> <ignoreClasses> <ignoreClass>org.slf4j.*</ignoreClass> </ignoreClasses> <dependencies> <dependency> <artifactId>jcl-over-slf4j</artifactId> <ignoreClasses> <ignoreClass>org.apache.commons.logging.impl.*</ignoreClass> </ignoreClasses> </dependency> <dependency> <groupId>org.*</groupId> <artifactId>maven-*</artifactId> <type>*ar</type> <classifier>sources</classifier> </dependency> </dependencies> </banDuplicateClasses> </rules> </configuration>