web-dev-qa-db-fra.com

Qu'est-ce que l'emballage "pom" dans maven?

On m'a confié un projet maven de compilation et de déploiement sur un serveur Tomcat. Je n'avais jamais utilisé Maven avant aujourd'hui, mais je cherchais beaucoup sur Google. Il semble que les fichiers de niveau supérieur pom.xml de ce projet aient le type de package défini comme pom.

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

146
Derek

pom est fondamentalement un conteneur de sous-modules, chaque sous-module est représenté par un sous-répertoire dans le même répertoire que pom.xml avec un emballage pom.

Quelque part, imbriqués dans la structure du projet, vous trouverez des artefacts (modules) avec un package war. Maven construit généralement tout dans les sous-répertoires /target de chaque module. Ainsi, après mvn install, examinez le sous-répertoire target dans un module avec un package war.

Bien sûr:

$ find . -iname "*.war"

fonctionne aussi bien ;-).

123

l'emballage de pom est simplement une spécification qui indique que l'artefact principal n'est pas une guerre ou un jar, mais le pom.xml lui-même.

Il est souvent utilisé conjointement avec des "modules" qui sont généralement contenus dans des sous-répertoires du projet en question; Cependant, il peut également être utilisé dans certains scénarios où aucun binaire primaire 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 en tant qu’artefact secondaire peut être souhaité via la configuration pour indiquer à maven comment créer un PDF qui: n'a pas besoin de compiler.

36
Edwin Buck

Le packaging de pom est utilisé dans les projets qui regroupent d'autres projets et dans les projets dont le seul résultat utile est un artefact attaché à un plugin. Dans votre cas, devinions que votre pom de niveau supérieur inclut <modules>...</modules> pour agréger d'autres répertoires et que la sortie réelle est le résultat de l'un des autres (probablement des) sous-répertoires. Si, à cette fin, il est codé de manière judicieuse, il contiendra un emballage de war.

20
bmargulies

Emballer un artefact en tant que POM signifie que son cycle de vie est 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 packages.

Nous utilisons pom packaging pour bon nombre 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 devez installer l’application mvn, elle doit l’ajouter à votre référentiel .m2 local. Pour publier ailleurs, vous devez configurer les informations de gestion de la distribution correctes. Vous devrez peut-être également utiliser le plug-in maven builder helper, si les artefacts ne sont pas automatiquement rattachés à Maven.

7
James Morgan

Pour répondre simplement à votre question lorsque vous effectuez un mvn: install , maven créera un artefact empaqueté basé sur (attribut packaging dans pom.xml). Après avoir exécuté votre installation maven, vous pourrez trouver le fichier avec extension .package

  • Dans le répertoire cible de l'espace de travail du projet
  • De plus, lorsque votre référentiel local maven 2 recherche (.m2/respository) dans votre boîte, votre artefact est répertorié dans le référentiel .m2 sous (groupId/artifactId/artifactId-version.packaging) répertoire
  • Si vous regardez sous le répertoire, vous trouverez un fichier d’extension empaqueté ainsi qu’une extension pom (l’extension pom est essentiellement le pom.xml utilisé pour générer ce paquet).
  • Si votre projet maven est multi-module, chaque module comportera deux fichiers comme décrit ci-dessus, à l'exception du projet de niveau supérieur qui n'aura qu'un pom. 
7

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

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

my-webapp peut avoir un emballage de guerre et peut être dépendant de my-app. my-app peut avoir un emballage de bocal.

3
Vishal

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

Le type de package doit être spécifié pour les projets parent 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 packaging est jar, la phase de package exécutera l'objectif jar: jar. Si l'emballage est pom, l'objectif exécuté sera site: attach-descriptor

1
TaylorChen

Cas d'utilisation réel 

Dans une entreprise Java-lourde, nous avions un projet python qui devait aller 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 Push. Le référentiel avait déjà une intégration maven. Nous avons donc utilisé l'indicatif <packaging>pom</packaging> avec le plugin maven Assembly pour conditionner le projet python sous la forme d'un .Zip et le télécharger.

Les étapes sont décrites dans ce SO post

1
Adam Hughes

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

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

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

0
Abdul Gafoor

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.

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

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

si vous voulez vérifier QUOI IS POM.XML

0
Venky Vungarala