Maven and dependent modules

后端 未结 6 1842
伪装坚强ぢ
伪装坚强ぢ 2020-12-13 08:16

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

6条回答
  •  被撕碎了的回忆
    2020-12-13 09:00

    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.

提交回复
热议问题