web-dev-qa-db-fra.com

Comment créer un projet Maven multi-module vide?

En ce moment, je trouve habituellement un pom.xml Fichier sur le Web contenant un package pom, copié-collé pour créer mon projet parent. Ensuite, je courais archetype:create dans le répertoire parent pour créer des sous-modules mais archetype:create est devenu obsolète depuis lors.

Des recommandations sur la création de nouveaux projets multi-modules Maven?

72
Sleepless Caffeine

Le moyen le plus simple que j'ai trouvé est d'utiliser l'archétype pom-root Pour créer le pom de niveau supérieur puis d'utiliser plusieurs fois archetype:generate Pour créer chaque module individuellement. Cela ajoutera automatiquement les modules au pom racine (agrégateur) et définira le pom racine comme pom parent pour chaque module (edit: apparemment, certains archétypes peuvent avoir un parent codé en dur, mais cela fonctionne pour maven-archetype-quickstart) .

Voici la ventilation:

  1. Créez la racine de niveau supérieur:

    mvn archetype:generate \
    -DarchetypeGroupId=org.codehaus.mojo.archetypes \
    -DarchetypeArtifactId=pom-root \
    -DarchetypeVersion=RELEASE
    
  2. cd dans le répertoire racine que vous venez de créer.

  3. Pour chaque module:

    mvn archetype:generate \
    -DarchetypeGroupId=org.Apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-quickstart \
    -DarchetypeVersion=RELEASE
    

Notez que -DarchetypeVersion=RELEASE Ci-dessus utilisera automatiquement la dernière version de l'archétype. Vous voudrez peut-être ajouter -DgroupId=... À chacune de ces commandes pour éviter de vous répéter.

119
Chris H.

Voici un aperçu de la façon dont vous pourriez le faire avec Intellij Idea. Commencez par créer un nouveau projet (Fichier -> Nouveau projet), puis choisissez "Module Maven":

enter image description here

Tapez un nom, cliquez sur suivant, ne changez rien aux étapes suivantes, cliquez sur Terminer.

Maintenant dans votre pom.xml type <packaging> et activer les mises à jour automatiques:

enter image description here

Tapez les modules:

enter image description here

Placez votre curseur sur m1 et appuyez sur Alt+Enter.

enter image description here

Module m1 sera automatiquement ajouté à votre projet. Maintenant tu peux faire Alt+Enter pour m2 et c'est tout.

enter image description here

Vous pouvez aussi commencer par ajouter pom.xml _ pour un module existant de votre projet: cliquez dessus avec le bouton droit de la souris dans l'arborescence du projet, "Ajouter un support au support ...", choisissez "Maven". Cela va créer un pom.xml.

46
Andrey Chaschev

mvn archetype:create est obsolète en faveur de mvn archetype:generate, alors juste le nom a changé. Il existe un archétype pour les projets multi-modules dans les référentiels officiels. Par conséquent, l'exécution de cette commande génère le résultat (minimaliste):

[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>

Vous devrez donc créer la structure de dossiers et les descripteurs de modules (fichiers pom.xml) vous-même. L'utilisation d'un simple script Shell ou d'un fichier de commandes suffit facilement si vous en avez besoin plusieurs fois.

19
Axel Knauf

Je ne suis pas sûr de bien comprendre votre question, mais pour créer un projet multi-module, j'utilise normalement un simple pom (au niveau racine):

<?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>

C'est probablement le pom parent multi-module le plus simple que vous puissiez utiliser. Le projet que vous souhaitez créer peut déjà avoir un archétype qui pourrait vous aider à créer la structure. Bien que vous puissiez obtenir de l'aide d'un IDE pour écrire vous-même le pompon, s'il existe un archétype disponible pour le type de projet que vous voulez construire, il est normalement plus facile de l'utiliser à la place.

9
Vijay Kiran

Si vous travaillez avec Eclipse IDE, vous devez utiliser le plug-in m2Eclipse . C’est l’un des moyens les plus simples de créer des projets multi-modules. Vous pouvez ajouter Créez un module pour chaque projet maven en créant un "module Maven" dans Eclipse. Vous avez ainsi la possibilité de sélectionner un projet parent. Le plug-in fait tout, ce qui signifie qu'il copie le nouveau module dans le module parent et le modifie. fichier pom.xml.

6
Thomas

Même réponse que Chris H. Je viens d'ajouter les options groupId, artifactId et version, et de désactiver le mode interactif.

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  \
5
Mohamed EL HABIB

Considérons un signet de projet parent et 3 sous-modules repos, sécurité et modèle, en faisant référence à documentation Spring . Il n'a pas les dépendances comme dans la doc Spring, mais seulement la configuration de base du point de vue multi-module.

Pour créer un projet maven parent en mode non interactif/en mode batch

mvn archetype:generate \
-DarchetypeGroupId=org.codehaus.mojo.archetypes \
-DarchetypeArtifactId=pom-root \
-DarchetypeVersion=RELEASE \
-DgroupId=bookmarks \
-DartifactId=bookmarks \
-Dversion=0.0.1-SNAPSHOT \
-DinteractiveMode=false

Pour créer des sous-modules en mode non interactif/mode batch.

cd dans votre répertoire racine nouvellement créé. Se référant à répondre par @ Chris.H

-Dpackage est la structure du paquet. Ici c'est des marque-pages. Si non spécifié, il considérera artifactId comme paquet par défaut

mvn archetype:generate \
-DarchetypeGroupId=org.Apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=RELEASE \
-DgroupId=model \
-DartifactId=model \
-Dversion=0.0.1-SNAPSHOT \
-Dpackage=bookmarks \
-DinteractiveMode=false 

Pour créer un nouveau module dans Eclipse, allez dans le menu Fichier-> nouveau-> autre-> maven-> maven, cela apparaît immédiatement dans l'explorateur de package d'espace de travail Eclipse.

Ou de cli, cd dans le dossier parent, ici les signets et exécutez ce qui suit, il créera le projet et vous devrez ensuite importer dans Eclipse en tant que projet maven, ou peut travailler à partir du parent, ici projet de signets

mvn archetype:generate \
-DarchetypeGroupId=org.Apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=RELEASE \
-DgroupId=security \
-DartifactId=security \
-Dversion=0.0.1-SNAPSHOT \
-Dpackage=bookmarks \
-DinteractiveMode=false 
3
Novice

4 étapes simples si vous souhaitez éviter le copier/coller en XML.

  1. Créez un projet archétype 284 (par défaut). Ouvrez le fichier pom créé changez l’emballage de jar en pom

  2. Supprimer le dossier src du projet - Il s'agit maintenant du projet parent sans src, car le package est pom. Dans le dossier ci-dessus, créez un autre nouveau projet (284 par défaut). Remplacez l'emballage par war, ejb ou ear. Cela devient le sous-module.

  3. Exécutez mvn Eclipse: eclipse sur chaque module. Le projet doit maintenant être prêt à être importé en tant que projet Eclipse.

  4. Lors de l'importation du projet, Eclipse s'est plaint de ce que la configuration de projet ci-dessous n'est pas à jour avec pom.xml. Exécutez Maven-> Update Project ou utilisez Quick Fix. Pour éviter l'erreur ci-dessus, cliquez avec le bouton droit de la souris et choisissez Correction rapide. Cela mettra à jour le POMS. Une autre façon d’éviter cette erreur consiste à déclarer les sous-modules dans le pom parent.

Reportez-vous au lien ci-dessous pour plus de détails. http://maven.Apache.org/guides/introduction/introduction-to-the-pom.html#Example_1

1
Padmini Mandal