Colleagues have been touting the wonders of maven and its magical dependency stuff but I\'m finding that it fails at what I would consider the obvious use.
Suppose I
With the master POM:
~/scratch/pom.xml
4.0.0
scratch
scratch
pom
1.0-SNAPSHOT
nipple
cabbage
And the module POMs:
~/scratch/nipple/pom.xml
scratch
scratch
1.0-SNAPSHOT
4.0.0
scratch
nipple
1.0-SNAPSHOT
~/scratch/cabbage/pom.xml
scratch
scratch
1.0-SNAPSHOT
4.0.0
scratch
cabbage
1.0-SNAPSHOT
scratch
nipple
1.0-SNAPSHOT
I can issue mvn package in the root directory after clearing out my local repository and end up with all the modules built. (Into empty-ish JARs, but built.)
Maven seems to look for dependencies either in the repository, or in the build in progress. It will not automatically traverse your project structure when you're only building a single module, because it's not required that you even have the parent project on your computer, much less one directory above the current module. (The parent-child relationship isn't even bijective.)
A reason why this is so might be because a directory layout where the location of modules would be predictable is in no way mandatory. It's even somewhat common and acceptable that the layout for the above example be like this:
projects
|
+--scratch
| |
| +--scratch-parent
| | |
| | +--pom.xml [The POM of scratch:scratch:1.0-SNAPSHOT]
| |
| +--nipple
| | |
| | +--pom.xml [The POM of scratch:mod1:1.0-SNAPSHOT]
| |
| +--cabbage
| | |
| | +--pom.xml [The POM of scratch:mod2:1.0-SNAPSHOT]
In this case, the section of the parent POM would be:
../nipple
../cabbage
Notice that there is nothing saying which artifact ID is in which module. It just serves to tell Maven that these are filesystem locations where to search for other artifacts related to this build.