web-dev-qa-db-de.com

Was ist "Pom" -Verpackung in Maven?

Ich bekam ein Maven-Projekt zum Kompilieren und Bereitstellen auf einem Tomcat-Server. Ich habe Maven noch nie zuvor benutzt, aber ich habe ziemlich viel gegoogelt. Es scheint, als hätten die pom.xml-Dateien der obersten Ebene in diesem Projekt den Verpackungstyp als pom festgelegt.

Was soll ich nach mvn install tun, um diese Anwendung bereitzustellen? Ich habe erwartet, eine war-Datei irgendwo oder irgendetwas finden zu können, aber ich schätze, ich suche an der falschen Stelle oder verpasse einen Schritt.

146
Derek

pom ist im Grunde ein Container von Submodulen. Jedes Submodul wird durch ein Unterverzeichnis im gleichen Verzeichnis wie pom.xml mit pom package dargestellt.

Irgendwo in der Projektstruktur verschachtelt, finden Sie Artefakte (Module) mit war-Paketierung. Im Allgemeinen baut Maven alles in /target-Unterverzeichnisse jedes Moduls. Schauen Sie sich nach mvn install das target-Unterverzeichnis in einem Modul mit war-Paketierung an.

Na sicher:

$ find . -iname "*.war"

funktioniert genauso gut ;-).

123

pom packaging ist einfach eine Spezifikation, die besagt, dass das primäre Artefakt kein Krieg oder Glas ist, sondern die pom.xml selbst.

Häufig wird es in Verbindung mit "Modulen" verwendet, die normalerweise in Unterverzeichnissen des betreffenden Projekts enthalten sind. Es kann jedoch auch in bestimmten Szenarien verwendet werden, in denen kein primäres Binärprogramm erstellt werden sollte. Alle anderen wichtigen Artefakte wurden als sekundäre Artefakte deklariert 

Stellen Sie sich ein "Dokumentations" -Projekt vor. Das primäre Artefakt ist möglicherweise ein PDF-Dokument, aber es ist bereits erstellt, und die Arbeit, es als sekundäres Artefakt zu deklarieren, kann für die Konfiguration wünschenswert sein, um Maven mitzuteilen, wie ein PDF erstellt wird muss nicht kompiliert werden.

36
Edwin Buck

Das Paket von pom wird in Projekten verwendet, die andere Projekte zusammenfassen, und in Projekten, deren einzige nützliche Ausgabe ein angefügtes Artefakt eines Plugins ist. In Ihrem Fall würde ich schätze , dass Ihr Pom auf der obersten Ebene <modules>...</modules> enthält, um andere Verzeichnisse zusammenzufassen, und die tatsächliche Ausgabe ist das Ergebnis eines der anderen (wahrscheinlich Unter-) Verzeichnisse. Es wird, wenn es für diesen Zweck sinnvoll codiert ist, eine Verpackung von war haben.

20
bmargulies

Wenn ein Artefakt als POM verpackt wird, hat es einen sehr einfachen Lebenszyklus

package -> install -> deploy

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

Dies ist nützlich, wenn Sie eine pom.xml-Datei oder ein Projekt bereitstellen, das nicht zu den anderen Pakettypen passt.

Wir verwenden POM-Verpackungen für viele unserer Projekte und binden gegebenenfalls zusätzliche Phasen und Ziele.

Zum Beispiel verwenden einige unserer Anwendungen:

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

Wenn Sie die Anwendung mvn installieren, sollte sie zu Ihrem lokalen .m2-Repository hinzugefügt werden. Um an anderer Stelle veröffentlichen zu können, müssen Sie korrekte Vertriebsverwaltungsinformationen einrichten. Möglicherweise müssen Sie auch das Helfer-Plugin für den Maven Builder verwenden, wenn Artefakte nicht automatisch von Maven verknüpft werden.

7
James Morgan

Um Ihre Frage einfach zu beantworten, wenn Sie ein mvn: install ausführen, erstellt maven ein gepacktes Artefakt basierend auf (package -Attribut in pom.xml). Nachdem Sie Ihre Maven-Installation ausgeführt haben, können Sie die Datei mit finden .package extension

  • Im Zielverzeichnis des Projektarbeitsbereichs
  • Wenn Ihr lokales maven 2-Repository nach (.m2/respository) auf Ihrer Box sucht, ist Ihr Artefakt im .m2-Repository unter (groupId/artifactId/artifactId-version.packaging) Verzeichnis
  • Wenn Sie unter dem Verzeichnis nachschauen, finden Sie eine Erweiterungsdatei mit Paketen sowie eine Pom-Erweiterung (Pom-Erweiterung ist im Wesentlichen die zum Generieren dieses Pakets verwendete pom.xml-Datei.)
  • Wenn Ihr Maven-Projekt aus mehreren Modulen besteht, werden für jedes Modul zwei Dateien wie oben beschrieben erstellt, außer für das Projekt auf oberster Ebene, das nur ein Pom enthält 
7

Ich empfehle das klassische Beispiel unter: http://maven.Apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_one_project_at_once

Hier ist meine Webapp ein Webprojekt, das vom Code bei meinem App-Projekt abhängt. Um zwei Projekte in einem zu bündeln, haben wir die oberste Ebene pom.xml, in der erwähnt wird, welche Projekte (Module gemäß Maven-Terminologie) abschließend gebündelt werden sollen. In dieser obersten Ebene pom.xml können Pom-Verpackungen verwendet werden.

my-webapp kann Kriegspakete enthalten und hängt von meiner App ab. my-app kann eine Glasverpackung haben.

3
Vishal

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

Der Verpackungstyp, der für übergeordnete und Aggregationsprojekte (Multi-Modul-Projekte) erforderlich ist. Diese Typen definieren die Ziele, die an eine Reihe von Lebenszyklusstadien gebunden sind. Wenn die Verpackung beispielsweise jar ist, wird in der Paketphase das Ziel jar: jar ausgeführt. Wenn die Verpackung pom ist, wird als Ziel ausgeführt: site: attach-descriptor

1
TaylorChen

Anwendungsfall im echten Leben 

In einer Java-schweren Firma hatten wir ein Python-Projekt, das in ein Nexus-Artefakt-Repository aufgenommen werden musste. Python hat eigentlich keine Artefakte, also wollten Sie einfach nur die .tar- oder .Zip-Dateien der Python-Dateien und Push. Das Repo hatte bereits die Maven-Integration, daher haben wir <packaging>pom</packaging> designator mit dem maven Assembly Plugin verwendet, um das Python-Projekt als .Zip zu packen und hochzuladen.

Die Schritte sind in diesem SO post

1
Adam Hughes

„Pom“ -Verpackungen sind nichts anderes als der Behälter, der andere Pakete/Module wie Glas, Krieg und Ohr enthält. 

wenn Sie eine Operation an Umverpackung/Container ausführen, wie z. B. mvn clean compile install. dann erhalten innere Pakete/Module auch eine saubere Kompilierungsinstallation.

es ist nicht erforderlich, für jedes Paket/Modul einen separaten Vorgang auszuführen.

0
Abdul Gafoor

POM (Project Object Model) ist nichts anderes als das Automatisierungsskript zum Erstellen des Projekts. Wir können das Automatisierungsskript in XML schreiben... Die Gebäudeskriptdateien werden in verschiedenen Automatisierungswerkzeugen unterschiedlich benannt

wie wir in ANT build.xml nennen, in MAVEN pom.xml

MAVEN kann Krüge, Kriege, Ohren und POM verpacken, was für uns alle neu ist

wenn Sie WHAT IS POM.XML prüfen möchten

0
Venky Vungarala