How to include a maven module outside of the project context?

java, maven, maven-module, svn

Solution

If you run `mvn install` on that global project, it will be installed in your local repository. Your other projects can then reference it as a dependency:

<dependency>
  <groupId>whatever</groupId>
  <artifactId>project-commons</artifactId>
  <version>1.0</version>
</dependency>

The downside of this simplistic approach is that your other projects won't compile until you've checked-out `project-commons` and run `mvn install`.

A more advanced approach is to deploy a network-accessible repository (such as Artifactory or Nexus) which you can deploy global artifacts to. Artifactory has a community edition which is free. You can then list this repository in your settings file and Maven will resolve artifacts that are uploaded to it.

Problem

I'd like to have a module in some kind of global project directory, so that I can include that module in all other projects that use that common code. But how can I then tell a maven parent `pom` to include and compile this global shared module? The following does not work: ``` svn/MyGlobalProject/project-commons/pom.xml //should be shared among different projects svn/MyProject/web-parent/trunk/pom.xml //the parent pom used to build the application svn/MyProject/web-parent/trunk/project-domain/pom.xml //submodule 1 svn/MyProject/web-parent/trunk/project-web/pom.xml //submodule 2 ``` parent pom.xml: ``` <project> <groupId>de.project</groupId> <artifactId>project-parent</artifactId> <packaging>pom</packaging> <modules> <module>project-domain</module> <module>project-web</module> <module>../project-commons</module> <!-- Error --> </modules> </project> ``` `mvn package` results in: ``` Child module trunk\project-commons of trunk\pom.xml does not exist ```

Original source

Related problems