Consider the following project: P1 ---- m1 ---- m2 ---- m2.1 ---- m2.2 ---- m3 ---- m3.1 ---- m3.2 ---- m3.3 --- pom.xml
For testing, mocking, prototyping... we often want to be able to replace a set of modules/artifacts by new modules/artifacts: for instance m1, m2.2 and m3.3 by m1-mock, m2.2-test and m3.3-test. It's not easy to do it: either you have to generate different artifacts with the same name (with different behavior...) or to modify your modules/dependencies + use of profiles which complicates the build. It's not really what we want to do. How do you cope with this? A solution could be to applied IoC to maven. Somethings like this (P1) pom.xml <dependencyManagement> <dependency ref="ref-m1"/> <dependency> <groupId>...</groupIdp> <artifactId>m2.1</artifactId> </dependency> <dependency ref="ref-m2.2"/> ... </dependencyManagement> <modules> <module ref="ref-m1"/> <module>m2</module> <module>m3</module> </modules> with different configurations c1: <bean id="ref-m1" module="m1"> <property name="artifactId" value="m1" /> ... </bean> <bean id="ref-m2.2" module="m2.2"> <property name="artifactId" value="m2.2" /> ... </bean> <bean id="ref-m3.3"module="m3.3"> <property name="artifactId" value="m3.3" /> ... </bean> and c2: <!-- <bean id="ref-m1" module="m1-mock"> <property name="artifactId" value="m1-mock" /> ... </bean> <!-- module and artifactId value could be different for instance we just want to replace the m2.2 artifact by its corresponding test artifact m2.2-test but not the name of the module --> <bean id="ref-m2.2" module="m2.2"> <property name="artifactId" value="m2.2" /> <property name="classifier" value="test" /> ... </bean> <bean id="ref-m3.3"module="m3.3"> <property name="artifactId" value="m3.3" /> <property name="classifier" value="test" /> ... </bean> What do you think about it? Rémy