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.
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 ;-).
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.
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
.
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.
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
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.
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
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
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.
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