Qu’est-ce qu’un emballage «pom» dans maven?

On m’a donné un projet Maven pour comstackr et être déployé sur un serveur Tomcat. Je n’ai jamais utilisé de maven avant aujourd’hui, mais je google pas mal. Il semble que les fichiers pom.xml niveau pom.xml dans ce projet aient le type d’emballage défini comme pom .

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

pom est essentiellement 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 pom packaging.

Quelque part, nested dans la structure du projet, vous trouverez des artefacts (modules) avec un emballage de war . Maven construit généralement tout dans /target sous-répertoires /target de chaque module. Donc, après l’ mvn install examinez target sous-répertoire target d’un module contenant un paquetage war .

Bien sûr:

 $ find . -iname "*.war" 

fonctionne aussi bien ;-).

pom packaging est simplement une spécification indiquant que l’artefact primaire n’est pas une guerre ou un jar, mais le pom.xml lui-même.

Souvent, il est 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 fichier binary primaire ne devait être créé, tous les autres artefacts importants ont été déclarés comme artefacts secondaires

Pensez à un projet de “documentation”, l’artefact primaire pourrait être un PDF, mais il est déjà construit, et le travail pour le déclarer comme un artefact secondaire peut être souhaité sur la configuration pour dire à maven comment créer un PDF qui n’a pas besoin compilé.

Le packaging de pom est utilisé dans les projets qui agrègent d’autres projets et dans les projets dont la seule sortie utile est un artefact attaché provenant d’un plugin. Dans votre cas, je suppose que votre pom de premier niveau inclut ... pour agréger d’autres répertoires, et la sortie réelle est le résultat de l’un des autres répertoires (probablement des sous-répertoires). Si elle est codée raisonnablement à cette fin, elle aura un emballage de war .

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

  • Dans le répertoire cible de l’espace de travail du projet
  • Si 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 le répertoire ( groupId / artifactId / artifactId-version.packaging )
  • Si vous regardez sous le répertoire, vous trouverez le fichier d’extension empaqueté ainsi que l’extension pom (l’extension pom est essentiellement le fichier pom.xml utilisé pour générer ce paquet)
  • Si votre projet Maven est multi-module, chaque module aura deux fichiers comme décrit ci-dessus, à l’exception du projet de premier niveau qui aura seulement un pom

Emballer 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 pom packaging pour bon nombre de nos projets et lions des phases et des objectives supplémentaires, le cas échéant.

Par exemple, certaines de nos applications utilisent:

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

Lorsque vous installez l’application, elle doit l’append à votre référentiel local .m2. Pour publier ailleurs, vous devrez configurer des informations de gestion de dissortingbution correctes. Vous devrez peut-être aussi utiliser le plug-in maven builder helper, si Maven ne connecte pas automatiquement les artefacts.

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 niveau supérieur qui mentionne quels sont les projets (modules selon la terminologie utilisée) à regrouper. Ce pom.xml de haut niveau peut utiliser le packaging pom.

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

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

Le type de packaging à utiliser pour les projets parents et les projets d’agrégation (multi-modules). Ces types définissent les objectives liés à un ensemble d’étapes de cycle de vie. Par exemple, si le packaging est jar, la phase du package exécute l’objective jar: jar. Si le packaging est pom, le but exécuté sera site: attach-descriptor

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 diffrenetly dans différents outils d’automatisation

comme on appelle build.xml dans ANT, pom.xml dans MAVEN

MAVEN peut emballer des bocaux, des guerres, des oreilles et POM quelle nouvelle chose à nous tous

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

Cas d’utilisation réelle

Dans une entreprise lourde en Java, nous avions un projet python qui devait aller dans un référentiel d’artefacts Nexus. Python n’a pas vraiment d’artefacts, il suffit donc simplement de “.tar ou .zip” les fichiers python et de les pousser. Le repository avait déjà une intégration Maven, nous avons donc utilisé le désignateur pom avec le plug-in maven assembly pour empaqueter le projet python sous forme de .zip et le télécharger.

Les étapes sont décrites dans cet article SO

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 externe / conteneur comme mvn clean comstack install. alors les paquets / modules internes obtiennent également une installation de compilation propre.

pas besoin d’effectuer une opération séparée pour chaque paquet / module.