Qu'est-ce que l'emballage «pom» chez maven?

175

On m'a donné un projet maven à compiler et à déployer sur un serveur tomcat. Je n'ai jamais utilisé maven avant aujourd'hui, mais j'ai pas mal cherché sur Google. Il semble que les pom.xmlfichiers de niveau supérieur de ce projet ont le type d'empaquetage défini comme pom.

Que dois-je faire après mvn installavoir déployé cette application? Je m'attendais à pouvoir trouver un warfichier quelque part ou quelque chose, mais je suppose que je cherche au mauvais endroit ou que je manque une étape.

Derek
la source
3
mvn install - ceci est utilisé pour installer votre artefact (jar, war, ear) dans votre référentiel local (généralement ce sera ~ / .m2 / répertoire de dépôt)
Łukasz Siwiński

Réponses:

148

pomest essentiellement un conteneur de sous - modules, chaque sous - module est représentée par un sous - répertoire dans le même répertoire que pom.xmldes pomemballages.

Quelque part, imbriqués dans la structure du projet, vous trouverez des artefacts (modules) avec des waremballages. Maven construit généralement tout dans les /targetsous-répertoires de chaque module. Alors après avoir mvn installregardé dans le targetsous-répertoire dans un module avec waremballage.

Bien sûr:

$ find . -iname "*.war"

fonctionne aussi bien ;-).

Tomasz Nurkiewicz
la source
45

L'empaquetage de pom est simplement une spécification qui déclare que l'artefact principal n'est pas une guerre ou un pot, mais le pom.xml lui-même.

Souvent, il est utilisé en conjonction avec des «modules» qui sont généralement contenus dans les sous-répertoires du projet en question; cependant, il peut également être utilisé dans certains scénarios où aucun binaire principal n'était censé être construit, tous les autres artefacts importants ont été déclarés comme artefacts secondaires

Pensez à un projet de «documentation», l'artefact principal peut être un PDF, mais il est déjà construit, et le travail pour le déclarer comme un artefact secondaire peut être souhaité par rapport à la configuration pour indiquer à maven comment créer un PDF qui n'a pas besoin compilé.

Edwin Buck
la source
Autre exemple auquel je peux penser dans des lignes similaires à pom project ==> classe abstraite et module (s) à l'intérieur ==> classe (s) concrète (s).
bharatj
22

L'empaquetage de pomest utilisé dans les projets qui regroupent d'autres projets, et dans les projets dont la seule sortie utile est un artefact attaché à partir d'un plugin. Dans votre cas, je suppose que votre pom de niveau supérieur inclut <modules>...</modules>d'agréger d'autres répertoires, et la sortie réelle est le résultat de l'un des autres (probablement sous-) répertoires. Il aura, s'il est codé judicieusement à cet effet, un emballage de war.

bmargulies
la source
1
Qu'entendez-vous par "dont la seule sortie utile est un artefact attaché à un plugin"?
omjego
9

Pour simplement répondre à votre question lorsque vous installation mvn: install , maven créera un artefact packagé basé sur ( attribut d' empaquetage dans pom.xml), après avoir exécuté votre installation maven, vous pouvez trouver le fichier avec l'extension .package

  • Dans le répertoire cible de l'espace de travail du projet
  • Aussi où votre référentiel local maven 2 est-il recherché ( .m2 / respository ) sur votre boîte, votre artefact est répertorié dans le référentiel .m2 sous le répertoire ( groupId / artifactId / artifactId-version.packaging )
  • Si vous regardez sous le répertoire, vous trouverez le fichier d'extension packagé et également l'extension pom (l'extension pom est essentiellement le pom.xml utilisé pour générer ce package)
  • Si votre projet maven est multi-module, chaque module aura deux fichiers comme décrit ci-dessus à l'exception du projet de niveau supérieur qui n'aura qu'un pom
Prasanna Talakanti
la source
8

Empaqueter un artefact en tant que POM signifie qu'il a un cycle de vie très simple

package -> install -> deploy

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Ceci est utile si vous déployez un fichier pom.xml ou un projet qui ne correspond pas aux autres types de packaging.

Nous utilisons des emballages en pom pour beaucoup de nos projets et lions des phases et des objectifs supplémentaires le cas échéant.

Par exemple, certaines de nos applications utilisent:

prepare-package -> test -> package -> install -> deploy

Lorsque vous mvn installez l'application, elle doit l'ajouter à votre référentiel local .m2. Pour publier ailleurs, vous devrez configurer des informations de gestion de distribution correctes. Vous devrez peut-être également utiliser le plugin d'aide maven builder, si les artefacts ne sont pas automatiquement attachés par Maven.

James Morgan
la source
6

Je suggère de voir l'exemple classique à: http://maven.apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once

Ici, my-webapp est un projet Web, qui dépend du code du projet my-app. Donc, pour regrouper deux projets en un, nous avons pom.xml de premier niveau qui mentionne quels sont les projets (modules selon la terminologie maven) à regrouper finalement. Un tel pom.xml de niveau supérieur peut utiliser un emballage pom.

my-webapp peut avoir un emballage de guerre et peut avoir une dépendance sur my-app. my-app peut avoir un emballage en pot.

Vishal
la source
2

Cas d'utilisation réel

Dans une entreprise lourde de Java, nous avions un projet python qui devait entrer dans un référentiel d'artefacts Nexus. Python n'a pas vraiment d'artefacts, donc je voulais simplement .tar ou .zip les fichiers python et pousser. Le dépôt avait déjà une intégration maven, nous avons donc utilisé un <packaging>pom</packaging>désignateur avec le plugin d'assemblage maven pour empaqueter le projet python en tant que .zipfichier et le télécharger.

Les étapes sont décrites dans cet article SO

Adam Hughes
la source
1

L'emballage «pom» n'est rien d'autre que le conteneur, qui contient d'autres paquets / modules comme jar, war et ear.

si vous effectuez une opération sur un paquet / conteneur externe comme mvn clean compile install. puis les packages / modules internes obtiennent également une installation de compilation propre.

pas besoin d'effectuer une opération distincte pour chaque package / module.

Abdul Gafoor
la source
1

https://maven.apache.org/pom.html

Le type d'emballage doit être pom pour les projets parents et d'agrégation (multi-modules). Ces types définissent les objectifs liés à un ensemble d'étapes du cycle de vie. Par exemple, si l'empaquetage est jar, alors la phase de package exécutera l'objectif jar: jar. Si le packaging est pom, le but exécuté sera site: attach-descriptor

TaylorChen
la source
0

POM (Project Object Model) n'est rien d'autre que le script d'automatisation pour la construction du projet, nous pouvons écrire le script d'automatisation en XML, les fichiers de script de construction sont nommés différemment dans différents outils d'automatisation

comme nous appelons build.xml dans ANT, pom.xml dans MAVEN

MAVEN peut emballer des pots, des guerres, des oreilles et du POM, ce qui est nouveau pour nous tous

si vous voulez vérifier QU'EST-CE QUE POM.XML

Venky Vungarala
la source