Was ist Pom-Verpackung in Maven?

175

Ich erhielt ein Maven-Projekt zum Kompilieren und Bereitstellen auf einem Tomcat-Server. Ich habe heute noch nie Maven benutzt, aber ich habe ziemlich viel gegoogelt. Anscheinend haben die pom.xmlDateien der obersten Ebene in diesem Projekt den Verpackungstyp festgelegt pom.

Was soll ich tun mvn install, um diese Anwendung bereitzustellen? Ich hatte erwartet, warirgendwo oder so etwas eine Datei finden zu können , aber ich schätze, ich suche an der falschen Stelle oder verpasse einen Schritt.

Derek
quelle
3
mvn install - wird verwendet, um Ihr Artefakt (jar, war, ear) in Ihrem lokalen Repository zu installieren (normalerweise ist es ~ / .m2 / repository direcotry)
Łukasz Siwiński

Antworten:

148

pomist im Grunde ein Container von Submodulen, jedes Submodul wird durch ein Unterverzeichnis im selben Verzeichnis wie pom.xmlbeim pomPacken dargestellt.

Irgendwo in der Projektstruktur finden Sie Artefakte (Module) mit warVerpackung. Maven baut im Allgemeinen alles in /targetUnterverzeichnisse jedes Moduls ein. Also nach einem mvn installBlick in das targetUnterverzeichnis in einem Modul mit warVerpackung.

Natürlich:

$ find . -iname "*.war"

funktioniert genauso gut ;-).

Tomasz Nurkiewicz
quelle
45

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

Oft 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 keine primäre Binärdatei 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, aber es ist bereits erstellt, und die Arbeit, es als sekundäres Artefakt zu deklarieren, ist möglicherweise über die Konfiguration erwünscht, um Maven mitzuteilen, wie ein PDF erstellt werden soll, das nicht benötigt wird zusammengestellt.

Edwin Buck
quelle
Ein anderes Beispiel, das ich mir in ähnlichen Zeilen vorstellen kann wie pom project ==> abstrakte Klasse und darin enthaltene Module ==> konkrete Klasse (n).
Bharatj
22

Das Packaging von pomwird in Projekten verwendet, die andere Projekte zusammenfassen, und in Projekten, deren einzige nützliche Ausgabe ein angehängtes Artefakt eines Plugins ist. In Ihrem Fall würde ich vermuten, dass Ihr POM der obersten Ebene <modules>...</modules>andere Verzeichnisse aggregiert, 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 haben war.

bmargulies
quelle
1
Was meinst du mit "dessen einzige nützliche Ausgabe ein angehängtes Artefakt eines Plugins ist"?
Omjego
9

Um einfach Ihre Frage zu beantworten , wenn Sie einen tun mvn: installieren , maven wird ein verpacktes Artefakt erstellen auf Basis von ( Verpackungs Attribute in pom.xml) Nachdem Sie Ihre Maven ausführen installieren Sie die Datei mit .package Erweiterung finden

  • Im Zielverzeichnis des Projektarbeitsbereichs
  • Auch wenn Ihr lokales Maven 2-Repository auf Ihrer Box nach ( .m2 / respository ) sucht , wird Ihr Artefakt im .m2-Repository im Verzeichnis ( groupId / artefaktId / artefaktId-version.packaging ) aufgeführt
  • Wenn Sie in das Verzeichnis schauen, finden Sie eine gepackte Erweiterungsdatei und auch eine pom-Erweiterung (die pom-Erweiterung ist im Grunde die pom.xml, die zum Generieren dieses Pakets verwendet wird).
  • Wenn Ihr Maven-Projekt aus mehreren Modulen besteht, enthält jedes Modul zwei Dateien, wie oben beschrieben, mit Ausnahme des Projekts der obersten Ebene, das nur einen POM enthält
Prasanna Talakanti
quelle
8

Das Verpacken eines Artefakts als POM bedeutet, dass es einen sehr einfachen Lebenszyklus hat

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 Verpackungstypen passt.

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

Einige unserer Anwendungen verwenden beispielsweise:

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

Wenn Sie die Anwendung mvn installieren, sollte sie Ihrem lokalen .m2-Repository hinzugefügt werden. Um an anderer Stelle zu veröffentlichen, müssen Sie die richtigen Informationen zur Verteilungsverwaltung einrichten. Möglicherweise müssen Sie auch das Maven Builder-Hilfsprogramm verwenden, wenn Artefakte von Maven nicht automatisch angehängt werden.

James Morgan
quelle
5

Ich schlage vor, das klassische Beispiel unter http://maven.apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once zu sehen

Hier ist my-webapp ein Webprojekt, das vom Code in my-app project abhängt. Um zwei Projekte in einem zu bündeln, haben wir pom.xml der obersten Ebene, in der angegeben ist, welche Projekte (Module gemäß Maven-Terminologie) endgültig gebündelt werden sollen. Solche pom.xml der obersten Ebene können Pom-Verpackungen verwenden.

my-webapp kann Kriegspakete haben und von my-app abhängig sein. my-app kann Glasverpackungen haben.

Vishal
quelle
2

Realer Anwendungsfall

In einem Java-lastigen Unternehmen hatten wir ein Python-Projekt, das in ein Nexus-Artefakt-Repository verschoben werden musste. Python hat nicht wirklich Artefakte, wollte also einfach nur die Python-Dateien .tar oder .zip. Und pushen. Das Repo hatte bereits eine Maven-Integration, daher haben wir den <packaging>pom</packaging>Bezeichner mit dem Maven-Assembly-Plugin verwendet, um das Python-Projekt als zu verpacken .zipund hochzuladen.

Die Schritte werden in diesem SO-Beitrag beschrieben

Adam Hughes
quelle
1

"Pom" -Verpackung ist nichts anderes als der Behälter, der andere Verpackungen / Module wie Glas, Krieg und Ohr enthält.

Wenn Sie eine Operation an einem äußeren Paket / Container wie mvn clean compile install ausführen. dann werden auch innere Pakete / Module sauber kompiliert.

Es ist nicht erforderlich, für jedes Paket / Modul eine separate Operation auszuführen.

Abdul Gafoor
quelle
1

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

Der Verpackungstyp, der für übergeordnete Projekte und Aggregationsprojekte (Multimodule) angegeben werden muss. Diese Typen definieren die Ziele, die an eine Reihe von Lebenszyklusphasen gebunden sind. Wenn die Verpackung beispielsweise jar ist, führt die Paketphase das Ziel jar: jar aus. Wenn die Verpackung pom ist, lautet das ausgeführte Ziel site: attach-descector

TaylorChen
quelle
0

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

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

MAVEN kann Gläser, Kriege, Ohren und POM verpacken, was für uns alle neu ist

Wenn Sie möchten, überprüfen Sie, WAS POM.XML IST

Venky Vungarala
quelle