O que é a embalagem "pom" no maven?

175

Recebi um projeto maven para compilar e implantar em um servidor tomcat. Nunca usei o maven antes de hoje, mas tenho pesquisado bastante no Google. Parece que os pom.xmlarquivos de nível superior neste projeto têm o tipo de embalagem definido como pom.

O que devo fazer depois mvn installpara implantar esse aplicativo? Eu esperava encontrar um wararquivo em algum lugar ou algo assim, mas acho que estou procurando no lugar errado ou faltando uma etapa.

Derek
fonte
3
mvn instalar - isto é usado para instalar o artefato (jar, guerra, orelha) em seu repositório local (normalmente ele vai ser ~ / .m2 / direcotry repositório)
Łukasz Siwiński

Respostas:

148

pomé, basicamente, um recipiente de submódulos, cada sub-módulo é representado por um subdirectório no mesmo directório como pom.xmlcom poma embalagem.

Em algum lugar, aninhado na estrutura do projeto, você encontrará artefatos (módulos) com o warempacotamento. O Maven geralmente cria tudo em /targetsubdiretórios de cada módulo. Então, depois de mvn installolhar para o targetsubdiretório em um módulo com warembalagem.

Claro:

$ find . -iname "*.war"

funciona igualmente bem ;-).

Tomasz Nurkiewicz
fonte
45

O empacotamento pom é simplesmente uma especificação que afirma que o artefato principal não é uma guerra ou jarro, mas o próprio pom.xml.

Muitas vezes, é usado em conjunto com "módulos", que normalmente estão contidos nos subdiretórios do projeto em questão; no entanto, também pode ser usado em certos cenários em que nenhum binário primário foi criado para ser construído, todos os outros artefatos importantes foram declarados como artefatos secundários

Pense em um projeto de "documentação", o artefato primário pode ser um PDF, mas ele já foi construído, e o trabalho para declará-lo como um artefato secundário pode ser desejado na configuração para informar ao maven como criar um PDF que não precisa compilado.

Edwin Buck
fonte
Outro exemplo em que posso pensar em linhas semelhantes ao projeto pom ==> classe abstrata e módulo (s) dentro dele ==> classe (s) concreta (s).
bharatj
22

O empacotamento de pomé usado em projetos que agregam outros projetos e em projetos cuja única saída útil é um artefato anexado de algum plug-in. No seu caso, eu acho que o seu pom de nível superior inclui <modules>...</modules>a agregação de outros diretórios, e a saída real é o resultado de um dos outros (provavelmente sub) diretórios. Se codificado sensivelmente para esse fim, terá uma embalagem de war.

bmargulies
fonte
1
O que você quer dizer com "cuja única saída útil é um artefato anexado de algum plug-in"?
Omjego
9

Para simplesmente responder sua pergunta quando você faz um mvn: install , o maven cria um artefato empacotado com base em ( atributo de empacotamento em pom.xml). Após a instalação do maven, você pode encontrar o arquivo com a extensão .package

  • No diretório de destino da área de trabalho do projeto
  • Além disso, onde seu repositório local do maven 2 está procurando ( .m2 / respository ) em sua caixa, Seu artefato está listado no repositório .m2 no diretório ( groupId / artifactId / artifactId-version.packaging )
  • Se você procurar no diretório, encontrará o arquivo de extensão empacotado e também a extensão pom (a extensão pom é basicamente o pom.xml usado para gerar este pacote)
  • Se o seu projeto maven for multi-módulo, cada módulo terá dois arquivos, conforme descrito acima, exceto no projeto de nível superior que terá apenas um
Prasanna Talakanti
fonte
8

Empacotar um artefato como POM significa que ele possui um ciclo de vida muito simples

package -> install -> deploy

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

Isso é útil se você estiver implementando um arquivo pom.xml ou um projeto que não se encaixa nos outros tipos de pacotes.

Utilizamos embalagens pom para muitos de nossos projetos e vinculamos fases e objetivos extras, conforme apropriado.

Por exemplo, alguns de nossos aplicativos usam:

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

Quando você mvn instala o aplicativo, ele deve ser adicionado ao seu repositório .m2 localmente. Para publicar em outro lugar, você precisará configurar as informações corretas de gerenciamento de distribuição. Você também pode precisar usar o plug-in auxiliar do maven builder, se os artefatos não forem anexados automaticamente pelo Maven.

James Morgan
fonte
6

Sugiro ver o exemplo clássico em: http://maven.apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once

Aqui my-webapp é um projeto web, que depende do código no projeto my-app. Portanto, para agrupar dois projetos em um, temos o pom.xml de nível superior, que menciona quais são os projetos (módulos conforme a terminologia do maven) a serem agrupados finalmente. O pom.xml de nível superior pode usar embalagens pom.

O my-webapp pode ter empacotamento de guerra e dependência do meu aplicativo. my-app pode ter embalagem jar.

Vishal
fonte
2

Caso de uso da vida real

Em uma empresa pesada em Java, tínhamos um projeto python que precisava entrar em um repositório de artefatos Nexus. O Python realmente não tem artefatos, então, bastava querer .tar ou .zip dos arquivos python e pressionar. O repositório já tinha integração <packaging>pom</packaging>com o maven , por isso usamos o designador com o plugin maven assembly para empacotar o projeto python como a .zipe carregá-lo.

As etapas estão descritas nesta postagem do SO

Adam Hughes
fonte
1

A embalagem “pom” nada mais é do que o contêiner, que contém outros pacotes / módulos como jar, war e ear.

se você executar qualquer operação no pacote / contêiner externo, como o mvn clean compile install. então os pacotes / módulos internos também recebem uma instalação de compilação limpa.

não é necessário executar uma operação separada para cada pacote / módulo.

Abdul Gafoor
fonte
1

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

O tipo de embalagem necessário para pom nos projetos pai e agregação (multi-módulo). Esses tipos definem os objetivos vinculados a um conjunto de estágios do ciclo de vida. Por exemplo, se a embalagem for jar, a fase do pacote executará o objetivo jar: jar. Se a embalagem for pom, o objetivo executado será o site: attach-descriptor

TaylorChen
fonte
0

O POM (Modelo de Objeto do Projeto) nada mais é do que o script de automação para a construção do projeto, podemos escrever o script de automação em XML, os arquivos do script de construção são nomeados difrenetly em diferentes ferramentas de automação

como chamamos build.xml em ANT, pom.xml em MAVEN

MAVEN pode empacotar frascos, guerras, ouvidos e POM, algo novo para todos nós

se você quiser verificar O QUE É POM.XML

Venky Vungarala
fonte