How to use POMs as a dependency in Maven?

kevinarpe picture kevinarpe · Jun 3, 2013 · Viewed 64.6k times · Source

Is there a way to add a pom type dependency to my POM and get all its modules?

JavaMail is a good example. Maven Central Repo has a parent POM called: com.sun.mail:all:1.5.0 with modules: mail, mailapi, mailapijar, smtp, imap, gimap, pop3, and dsn.

However, the "all" artefact only has a single file: pom.xml Is there a way to add this "all" artefact as a dependency to my POM and get all its modules? I am 90% sure this is not the right way to use dependencies in Maven, but I want to hear it from an expert on The Stack.

Ideas:

  • <dependencies><dependency>...<type>pom</type></dependency></dependencies>
  • <dependencyManagement><dependencies><dependency>...<type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

Related: Netbeans: maven dependencies of type pom

Answer

Guillaume Darmont picture Guillaume Darmont · Jun 3, 2013

You have to go with

<dependencies>
  <dependency>
     <groupId>com.my</groupId>
     <artifactId>commons-deps</artifactId>
     <type>pom</type>
  </dependency>
</dependencies>

This will transitively add all dependencies declared in com.my:commons-deps to your current POM.

Using

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>...</groupId>
            <artifactId>...</artifactId>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

works as a simple 'include' of artifacts versions in your dependency management. Thus, it won't add any dependency in your project.