Sharing src/test classes between modules in a multi-module maven project
Solution 1:
Your Consumer project depends upon your Data project, therefore we are happy that Data must be built prior to Consumer. As a result, using the techniques suggested in the comments, I would ensure your Data project contains all the test code that you wish to share and configure the POM to produce a test JAR:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
Your Consumer project would then depend upon both the normal Data JAR artifact, plus the additional test-jar
artifact, with test scope of course:
<dependency>
<groupId>com.foo</groupId>
<artifactId>data</artifactId>
<version>1.0</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
I've used this approach on many occasions and it works well.
Solution 2:
So the problem is that (some) tests in the data
module depend on the SampleDataHelper
class? You can move the SampleDataHelper
class to src/main
of the data-test
module, if you at the same time move the tests (that depend on the specific class) to the src/test
of the data-test
module. Consequently, there would be no more circular dependencies.