Right now I usually find a pom.xml
file on the web that has a pom
packaging and copy and paste it to create my parent project. Then I used to run <
mvn archetype:create
has been deprecated in favor of mvn archetype:generate
, so just the name changed. There is an archetype for multi-module projects in the official repositories, so running this command yields the (minimalist) result:
[axe@gromp test]$ mvn archetype:generate
..
<num>: remote -> pom-root (Root project archetype for creating multi module projects)
..
Choose a number: 109: <num>
..
[axe@gromp test]$ tree
.
└── modules.test
└── pom.xml
1 directory, 1 file
[axe@gromp test]$ cat modules.test/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>modules.test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>modules.test</name>
</project>
So, basically you will have to create the folder structure and module descriptors (pom.xml files) yourself. Using a simple shell script or batch file will easily do this, if you require it more than once.
If you are working with the eclipse IDE you should use the m2eclipse plug-in. This is one of the easiest way to create multi-module projects. You can add a module to every maven project by creating a 'Maven Module-Project' within eclipse. When doing this you have the possibility to select a parent project. The plug-in does everything, means it copies the new module to parent module and modifies the pom.xml file.
Simple 4 steps if you want to avoid xml copy paste.
Create a 284(default) archetype project. Open the pom file created change the packaging from jar to pom
Delete the src folder from the project - This is now the Parent project without src, since the packaging is pom. In the above folder create another new project(284 default). Change the packaging to war or ejb or ear. This becomes the sub module.
Execute mvn eclipse:eclipse on each module. Now the project should be ready to be imported as a Eclipse Project.
While importing the project, Eclipse would complain the below Project configuration is not up-to-date with pom.xml. Run Maven->Update Project or use Quick Fix. To avoid the above error right click and choose Quick Fix. This will update the POMS. Another way to avoid this error is by declaring the sub modules in the Parent pom
Reference the below link for more details. http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Example_1
I'm not sure if I understand your question correctly, but for creating a multi module project I normally use a simple pom (at the root level):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.vijaykiran</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>m1</module>
<module>m2</module>
</modules>
</project>
This is probably the simplest multi-module parent pom that you can use. The project you want to create might already have an archetype which might help you in creating the structure. Although you can get help from an IDE to write the pom yourself, if there's an archetype available for the type of the project you want to build, it is normally easier to use that instead.
The easiest way I've found to do this is to use the pom-root
archetype to create the top-level pom and then repeatedly use archetype:generate
to create each module individually. This will automatically add the modules to the root pom (aggregator) and set the root pom as the parent pom for each module (edit: apparently some archetypes can have a hard-coded parent, but it works for maven-archetype-quickstart
).
Here's the breakdown:
Create the top-level root:
mvn archetype:generate \
-DarchetypeGroupId=org.codehaus.mojo.archetypes \
-DarchetypeArtifactId=pom-root \
-DarchetypeVersion=RELEASE
cd
into your newly created root dir.
For each module:
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=RELEASE
Note that -DarchetypeVersion=RELEASE
above will automatically use the latest version of the archetype. You may want to add -DgroupId=...
to each of those commands to avoid repeating yourself.
Same answer as Chris H. i just added groupId, artifactId and version options and disabled the interactive mode.
mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes \
-DarchetypeArtifactId=pom-root \
-DarchetypeVersion=RELEASE \
-DinteractiveMode=false \
-DgroupId=com.mycompany.app \
-DartifactId=my-app \
-Dversion=1.0.0-SNAPSHOT \