Che cos'è l'imballaggio "pom" in Maven?


176

Mi è stato assegnato un progetto maven per la compilazione e la distribuzione su un server Tomcat. Oggi non ho mai usato Maven, ma ho cercato su Google un po '. Sembra che i pom.xmlfile di livello superiore in questo progetto abbiano il tipo di packaging impostato come pom.

Cosa dovrei fare dopo aver mvn installdistribuito questa applicazione? Mi aspettavo di essere in grado di trovare un warfile da qualche parte o qualcosa del genere, ma immagino che sto cercando nel posto sbagliato o manca un passaggio.


3
mvn install - questo è usato per installare il tuo artefatto (vaso, guerra, orecchio) nel tuo repository locale (di solito sarà ~ / .m2 / direcotry repository)
Łukasz Siwiński

Risposte:


148

pomè fondamentalmente un contenitore di sottomoduli, ogni modulo è rappresentato da una sottodirectory nella stessa directory pom.xmlcon pomimballaggio.

Da qualche parte, nidificati all'interno della struttura del progetto, troverai manufatti (moduli) con warpackaging. Maven generalmente costruisce tutto nelle /targetsottodirectory di ciascun modulo. Quindi, dopo aver mvn installesaminato la targetsottodirectory in un modulo con il warpackaging.

Ovviamente:

$ find . -iname "*.war"

funziona ugualmente bene ;-).


45

Il packaging pom è semplicemente una specifica che afferma che il manufatto primario non è una guerra o un barattolo, ma lo stesso pom.xml.

Spesso viene usato insieme a "moduli" che sono generalmente contenuti nelle sottodirectory del progetto in questione; tuttavia, può anche essere utilizzato in alcuni scenari in cui non è stato creato alcun binario primario, tutti gli altri artefatti importanti sono stati dichiarati artefatti secondari

Pensa a un progetto di "documentazione", l'artefatto primario potrebbe essere un PDF, ma è già stato creato, e il lavoro per dichiararlo come artefatto secondario potrebbe essere desiderato sulla configurazione per dire a Maven come costruire un PDF che non è necessario compilato.


Un altro esempio a cui riesco a pensare in linee simili come pom project ==> classe astratta e moduli al suo interno ==> classi concrete.
bharatj,

22

Il packaging di pomviene utilizzato in progetti che aggregano altri progetti e in progetti il ​​cui unico output utile è un artefatto allegato da alcuni plugin. Nel tuo caso, immagino che il tuo pom di livello superiore includa <modules>...</modules>l'aggregazione di altre directory e l'output effettivo è il risultato di una delle altre (probabilmente) sottodirectory. Se codificato in modo ragionevole a tale scopo, avrà una confezione di war.


1
Cosa intendi con "il cui unico output utile è un artefatto allegato da alcuni plugin"?
omjego,

9

Per rispondere semplicemente alla tua domanda quando fai un mvn: install , maven creerà un artefatto impacchettato basato su ( attributo packaging in pom.xml), Dopo aver eseguito l'installazione di maven puoi trovare il file con l'estensione .package

  • Nella directory di destinazione dell'area di lavoro del progetto
  • Anche dove il tuo repository locale di maven 2 è alla ricerca di ( .m2 / repository ) sulla tua scatola, il tuo artefatto è elencato nel repository .m2 nella directory ( groupId / artefactId / artifactId-version.packaging )
  • Se guardi sotto la directory troverai il file di estensione in pacchetto e anche l'estensione pom (l'estensione pom è fondamentalmente il pom.xml usato per generare questo pacchetto)
  • Se il tuo progetto maven è multi-modulo, ogni modulo avrà due file come descritto sopra, ad eccezione del progetto di livello superiore che avrà solo un pom

8

Il confezionamento di un artefatto come POM significa che ha un ciclo di vita molto semplice

package -> install -> deploy

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

Ciò è utile se si sta distribuendo un file pom.xml o un progetto che non si adatta agli altri tipi di packaging.

Utilizziamo l'imballaggio pom per molti dei nostri progetti e leghiamo fasi e obiettivi aggiuntivi, a seconda dei casi.

Ad esempio alcune delle nostre applicazioni utilizzano:

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

Quando installi l'applicazione, devi aggiungerla al tuo repository .m2 localmente. Per pubblicare altrove è necessario impostare le informazioni di gestione della distribuzione corrette. Potrebbe anche essere necessario utilizzare il plug-in di aiuto di Maven Builder, se gli artefatti non sono collegati automaticamente da Maven.


6

Suggerisco di vedere il classico esempio su: http://maven.apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once

Qui my-webapp è un progetto web, che dipende dal codice del progetto my-app. Quindi per raggruppare due progetti in uno, abbiamo pom.xml di livello superiore che menziona quali sono i progetti (moduli secondo la terminologia di Maven) da raggruppare alla fine. Tale pom.xml di livello superiore può utilizzare l'imballaggio pom.

my-webapp può avere pacchetti di guerra e può dipendere da my-app. my-app può avere un packaging in vaso.


2

Caso d'uso reale

In un'azienda pesante di Java avevamo un progetto Python che doveva andare in un repository di artefatti Nexus. Python non ha davvero artefatti, quindi volevo semplicemente .tar o .zip i file python e spingere. Il repository aveva già l'integrazione maven, quindi abbiamo usato <packaging>pom</packaging>designator con il plugin assembly maven per impacchettare il progetto python come .zipe caricarlo.

I passaggi sono indicati in questo post SO


1

Il packaging "pom" non è altro che il contenitore, che contiene altri pacchetti / moduli come jar, war e ear.

se si esegue qualsiasi operazione sul pacchetto / contenitore esterno come mvn clean compile install. quindi anche i pacchetti / moduli interni ottengono un'installazione di compilazione pulita.

non è necessario eseguire un'operazione separata per ciascun pacchetto / modulo.


1

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

Il tipo di imballaggio doveva essere pom per i progetti padre e aggregazione (multi-modulo). Questi tipi definiscono gli obiettivi associati a una serie di fasi del ciclo di vita. Ad esempio, se il packaging è jar, la fase del pacchetto eseguirà il jar: goal goal. Se la confezione è pom, l'obiettivo eseguito sarà site: attach-descriptor


0

POM (Project Object Model) non è altro che lo script di automazione per la creazione del progetto, possiamo scrivere lo script di automazione in XML, i file degli script di costruzione sono denominati in modo diffuso in diversi strumenti di automazione

come chiamiamo build.xml in ANT, pom.xml in MAVEN

MAVEN può confezionare vasetti, guerre, orecchie e POM quali novità per tutti noi

se vuoi controllare CHE COS'È POM.XML

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.