I’m using Maven in a CI scenario right now making use of the -am and -amd switches. We are having an issue right now with how the list of projects to make is solved. Consider the following five projects:
A, B, C, D, and E.
The dependencies between these projects are as follows:
E depends on A
E depends on C
E depends on D
C depends on A
C depends on B
D depends on A
B depends on A
So I execute the following command:
mvn install -pl C -am -amd
The following happens:
A builds because C depends on it (-am switch)
B builds because C depends on it (-am switch)
C builds because it is in the project list (-pl switch)
E builds because it depends on C … but fails (-amd switch)
D does not build
D is not covered by -am (makes sense) but I was surprised that -amd didn’t result in it getting picked up. I thought that when Maven was resolving the dependencies to build it would see that D was in the graph and in order to successfully
build E, it would also need to build D.
But it appears that -amd doesn’t work that way. In these scenarios, what is the expected way to resolve this dependency arrangement. Assume that this is just a subset of a larger graph and my intention is not to build the entire graph.
One thing that I am considering doing is making D depend explicitly on C via a test dependency. This seems to work, but feels hacky. In a picture this is what our graph looks like: