¿Qué es el empaque “pom” en maven?

175

Me dieron un proyecto de Maven para compilar e implementar en un servidor Tomcat. Nunca he usado Maven antes hoy, pero he estado buscando bastante en Google. Parece que los pom.xmlarchivos de nivel superior en este proyecto tienen el tipo de empaquetado establecido como pom.

¿Qué se supone que debo hacer después mvn installde implementar esta aplicación? Esperaba poder encontrar un wararchivo en algún lugar o algo así, pero supongo que estoy buscando en el lugar equivocado o me falta un paso.

Derek
fuente
3
mvn install: se usa para instalar su artefacto (jar, war, ear) en su repositorio local (generalmente será ~ / .m2 / repositorio directo)
Łukasz Siwiński

Respuestas:

148

pomes básicamente un contenedor de submódulos, cada submódulo está representado por un subdirectorio en el mismo directorio que pom.xmlcon el pomempaquetado.

En algún lugar, anidado dentro de la estructura del proyecto, encontrará artefactos (módulos) con warempaque. Maven generalmente construye todo en /targetsubdirectorios de cada módulo. Así que despuésmvn install busque en el targetsubdirectorio en un módulo con warempaque.

Por supuesto:

$ find . -iname "*.war"

funciona igual de bien ;-).

Tomasz Nurkiewicz
fuente
45

pom packaging es simplemente una especificación que establece que el artefacto principal no es una guerra o un frasco, sino el pom.xml en sí.

A menudo se usa junto con "módulos" que normalmente están contenidos en subdirectorios del proyecto en cuestión; sin embargo, también se puede usar en ciertos escenarios donde no se debe construir ningún binario primario, todos los demás artefactos importantes se han declarado como artefactos secundarios

Piense en un proyecto de "documentación", el artefacto primario podría ser un PDF, pero ya está construido, y el trabajo para declararlo como un artefacto secundario podría ser deseable en la configuración para decirle a Maven cómo construir un PDF que no necesita compilado

Edwin Buck
fuente
Otro ejemplo que puedo pensar en líneas similares como pom project ==> clase abstracta y módulo (s) dentro de él ==> clase (s) concreta (s).
bharatj
22

El empaquetado pomse utiliza en proyectos que agregan otros proyectos, y en proyectos cuyo único resultado útil es un artefacto adjunto de algún complemento. En su caso, supongo que su pom de nivel superior incluye <modules>...</modules>agregar otros directorios, y la salida real es el resultado de uno de los otros (probablemente sub) directorios. Si se codifica con sensatez para este propósito, tendrá un embalaje de war.

bmargulies
fuente
1
¿Qué quiere decir con "cuyo único resultado útil es un artefacto adjunto de algún complemento"?
omjego
9

Para responder a su pregunta simplemente cuando realiza un mvn: install , maven creará un artefacto empaquetado basado en ( atributo de empaquetado en pom.xml). Después de ejecutar su instalación de maven, puede encontrar el archivo con la extensión .package

  • En el directorio de destino del espacio de trabajo del proyecto
  • También donde su repositorio local de maven 2 busca ( .m2 / respository ) en su caja, su artefacto aparece en el repositorio .m2 en el directorio ( groupId / artifactId / artifactId-version.packaging )
  • Si busca en el directorio, encontrará un archivo de extensión empaquetado y también una extensión pom (la extensión pom es básicamente el pom.xml utilizado para generar este paquete)
  • Si su proyecto maven es de múltiples módulos, cada módulo tendrá dos archivos como se describe anteriormente, excepto el proyecto de nivel superior que solo tendrá un pom
Prasanna Talakanti
fuente
8

Empaquetar un artefacto como POM significa que tiene un ciclo de vida muy simple

package -> install -> deploy

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

Esto es útil si está implementando un archivo pom.xml o un proyecto que no se ajusta a los otros tipos de paquetes.

Utilizamos empaques de pom para muchos de nuestros proyectos y vinculamos fases y objetivos adicionales según corresponda.

Por ejemplo, algunas de nuestras aplicaciones usan:

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

Cuando instale la aplicación, debe agregarla a su repositorio local .m2. Para publicar en otro lugar, deberá configurar la información de administración de distribución correcta. Es posible que también necesite usar el complemento auxiliar de Maven Builder, si Maven no adjunta automáticamente los artefactos.

James Morgan
fuente
6

Sugiero ver el ejemplo clásico en: http://maven.apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once

Aquí my-webapp es un proyecto web, que depende del código del proyecto my-app. Entonces, para agrupar dos proyectos en uno, tenemos pom.xml de nivel superior que menciona cuáles son los proyectos (módulos según la terminología de Maven) que se agruparán finalmente. Tal nivel superior pom.xml puede usar empaque de pom.

my-webapp puede tener un paquete de guerra y puede depender de my-app. my-app puede tener envases de jarra.

Vishal
fuente
2

Caso de uso de la vida real

En una empresa pesada en Java, teníamos un proyecto de Python que necesitaba entrar en un repositorio de artefactos Nexus. Python realmente no tiene artefactos, así que simplemente quería .tar o .zip los archivos de python y presionar. El repositorio ya tenía integración maven, por lo que utilizamos <packaging>pom</packaging>designador con el complemento de ensamblaje maven para empaquetar el proyecto python como a .zipy subirlo.

Los pasos se describen en esta publicación SO

Adam Hughes
fuente
1

El empaque "pom" no es más que el contenedor, que contiene otros paquetes / módulos como jar, war y ear.

si realiza alguna operación en un paquete / contenedor externo como mvn clean compile install. entonces los paquetes / módulos internos también obtienen una instalación de compilación limpia.

no es necesario realizar una operación separada para cada paquete / módulo.

Abdul Gafoor
fuente
1

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

El tipo de empaquetado debe ser pom para proyectos primarios y de agregación (módulos múltiples). Estos tipos definen los objetivos vinculados a un conjunto de etapas del ciclo de vida. Por ejemplo, si el empaquetado es jar, la fase del paquete ejecutará el objetivo jar: jar. Si el paquete es pom, el objetivo ejecutado será sitio: adjuntar descriptor

TaylorChen
fuente
0

POM (Project Object Model) no es más que el script de automatización para construir el proyecto, podemos escribir el script de automatización en XML, los archivos de script de construcción se nombran de manera diferente en diferentes herramientas de automatización

como llamamos build.xml en ANT, pom.xml en MAVEN

MAVEN puede empaquetar frascos, guerras, oídos y POM, algo nuevo para todos nosotros

si quieres ver QUÉ ES POM.XML

Venky Vungarala
fuente