Qu'est-ce que "pom" emballage dans maven?
j'ai reçu un projet maven pour compiler et être déployé sur un serveur tomcat. Je n'ai jamais utilisé de maven avant aujourd'hui, mais j'ai été googler un peu. Il semble que les fichiers de haut niveau pom.xml
dans ce projet ont le type d'emballage défini comme pom
.
Que dois-je faire après mvn install
pour déployer cette application? Je m'attendais à trouver un fichier war
quelque part ou quelque chose, mais je suppose que je cherche dans le mauvais endroit ou manque une étape.
10 réponses
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
emballage.
quelque part, imbriqué dans la structure du projet, vous trouverez des artefacts (modules) avec war
emballage. Maven construit généralement tout dans les sous-répertoires /target
de chaque module. Donc après mvn install
regardez dans target
sous-répertoire dans un module avec war
emballage.
bien sûr:
$ find . -iname "*.war"
fonctionne également bien ;-).
pom emballage est tout simplement un cahier des charges qui indique le principal artefact n'est pas une guerre ou un bocal, mais le pom.xml lui-même.
souvent il est utilisé en conjonction avec des" modules "qui sont typiquement contenus dans les sous-répertoires du projet en question; cependant, il peut également être utilisé dans certains scénarios où aucun binaire primaire était censé être construit, tous les autres Artéfacts importants ont été déclarés comme Artéfacts secondaires
pensez à un "documentation" projet, l'artéfact primaire pourrait être un PDF, mais il est déjà construit, et le travail de le déclarer comme un Artéfact secondaire pourrait être souhaitable sur la configuration pour dire à maven comment construire un PDF qui n'a pas besoin compilé.
Emballage pom
est utilisé dans des projets d'agrégation d'autres projets, et dans des projets dont la seule utilité de sortie est reliée à une artefact de certains plugin. Dans votre cas, je deviner que votre pom de haut niveau inclut <modules>...</modules>
pour agréger d'autres annuaires, et la sortie réelle est le résultat de l'un des autres (probablement des sous-) annuaires. Si elle est codée raisonnablement à cet effet, elle aura un emballage de war
.
pour répondre simplement à votre question lorsque vous faites un mvn:install , maven créera un artefact empaqueté basé sur ( packaging attribut dans pom.xml), Après l'exécution de maven installer, vous pouvez trouver le fichier .package extension
- Dans le répertoire cible de l'espace de travail de projet
- Aussi où votre maven 2 référentiel local est la recherche d' ( .m2 / respository ) sur votre boîte, votre artefact est répertorié dans .dépôt m2 sous ( groupId/artifactId / artifactId-version.emballage ) répertoire
- si vous regardez sous le répertoire, vous trouverez packaged extension fichier et aussi extension pom (extension pom est essentiellement le 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 sauf pour le haut niveau projet qui n'aura qu'un pom
emballer un artefact comme 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
c'est utile si vous déployez un pom.un fichier xml ou un projet qui ne correspond pas aux autres types d'empaquetage.
nous utilisons l'emballage pom pour beaucoup de nos projets et lions des phases et des objectifs supplémentaires selon les besoins.
par exemple, certaines de nos applications utilisent:
prepare-package -> test -> package -> install -> deploy
lorsque vous installez l'application mvn il doit l'ajouter à votre local .dépôt en m2. Pour publier ailleurs, vous aurez besoin de mettre en place des informations correctes de gestion de la distribution. Vous pouvez également avoir besoin d'utiliser le plugin Maven builder helper, si les Artéfacts ne sont pas automatiquement attachés à par Maven.
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 mon-webapp est web project, qui dépend du code à mon-app project. Donc pour regrouper deux projets en un, nous avons des pom de haut niveau.xml qui mentionne quels sont les projets (modules selon la terminologie maven) à être enfin regroupés. Quel haut niveau de pom.xml peut utiliser l'empaquetage pom.
mon-webapp peut avoir un packaging de guerre et peut dépendre de mon-application. mon application peut avoir jar emballage.
"151930920 la" Vraie vie " cas d'utilisation
dans une entreprise Java-heavy, nous avions un projet python qui devait entrer dans un dépôt D'artefacts Nexus. Python n'a pas vraiment d'artefacts, donc il suffit juste voulu .tar ou .fermez les fichiers python et poussez. Le repo avait déjà Maven integration, donc nous avons utilisé <packaging>pom</packaging>
designator avec le Maven assembly plugin pour empaqueter le projet python comme un .zip
et le télécharger.
les étapes sont décrites dans ce so post
https://maven.apache.org/pom.html
le type d'emballage devant être pom 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 l'emballage est jar, alors la phase paquet exécutera l'objectif jar:jar. Si l'emballage est pom, l'objectif sera exécuté site:fixez-descripteur
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 de manière diffrente dans différents outils D'automatisation
comme on appelle build.xml in ANT, pom.xml in MAVEN
MAVEN peut packages pots,les guerres, les oreilles et les POM qui chose de nouveau pour nous tous
si vous voulez cochez what IS POM.XML
"pom" emballage n'est rien, mais le conteneur, qui contient d'autres packages/modules comme pot, la guerre, et de l'oreille.
si vous effectuez une opération sur un paquet/conteneur extérieur comme mvn clean compiler installer. ensuite, les paquets/modules internes obtiennent aussi une compilation propre.
il n'est pas nécessaire d'effectuer une opération distincte pour chaque colis/module.