Maven: Combine projetos da web
-
20-09-2019 - |
Pergunta
Eu tenho os seguintes projetos maven criados:
- PM-core
- PM-Web (com uma dependência para PM-core)
Eu tenho considerado várias alternativas sobre como apoiar isso com o Maven, mas ainda estou procurando a solução perfeita.
A melhor solução que consigo pensar é criar um projeto Maven separado para cada cliente (por exemplo, PM-Client1, ...), que contém apenas os arquivos de configuração específicos do cliente e arquivos Java ou JSPs adicionais, .... A próxima etapa seria considerar o projeto PM-Web e o projeto do cliente como um projeto da Web, significando: Ter-os combinados (embalados) em 1 arquivo de guerra com arquivos do projeto do cliente tendo precedência sobre arquivos do projeto PM-Web.
Mais concreto: correndo mvn package
No PM-Client1, levaria tudo do PM-Web, adicionaria/substituiria os arquivos do PM-Client1 e o empacotará em uma única guerra.
Portanto, a questão é: como conseguir isso com o Maven?
Solução
Sim, isso pode ser feito usando Sobreposições. A amostra na página da web é exatamente do que você está falando.
Para a estrutura do projeto, você pode ter algo assim:
. |-- PM-Core |-- PM-WebCommon (of type war, depends on core) |-- PM-Client1 (of type war, depends on webcommon) `-- PM-Client2 (of type war, depends on webcommon)
E use a sobreposição em PM-Client1 e PM-Client2 para "mesclar" com PM-WebCommon e Package Wars para cada cliente.
ATUALIZAR Não vou cobrir todos os detalhes, mas acho que declarar a dependência de guerra com um escopo do tipo runtime
é necessário ao usar a sobreposição, é assim que a sobreposição funciona (na verdade, toda a sobreposição é um tipo de hack). Agora, para resolver seu problema de eclipse, uma solução seria criar um frasco contendo as classes do projeto PM-WebCommon. Para fazer isso, use o attachClasses
parâmetro opcional e defina -o para true
. Isso dirá ao Maven para criar um PM-WebCommon-<version>-classes.jar
que você poderá declarar como dependência no PM-Client1 (com um provided
alcance). Para os detalhes, dê uma olhada MWAR-73 e MWAR-131. Isso também é discutido no Perguntas frequentes do plugin de guerra. Observe que essa não é uma prática recomendada, a maneira certa seria mover as classes para um módulo separado (e essa é a outra solução que eu queria mencionar).
ATUALIZAR (201001018): Eu tentei o attachClasses
parâmetro e funciona com a versão 2.1-beta-1 do plug-in.
Outras dicas
Você poderia usar perfis Vejo http://maven.apache.org/guides/mini/guide-building-for-different-ensonments.html E use classificadores Para distinguir entre os artefatos das diferentes construções da mesma versão. Nesta configuração, você pode criar módulos opcionais adicionais para cada um de seus clientes personalizações específicas no projeto pai ou seja
+ Pm
++ pm-core
++ pm-web
++ pm-client1
++ pm-client2
Ou você pode olhar para usar o uso do plugin de montagem do MAVEN
Compare também as respostas para a pergunta diferentes arquivos de guerra, recursos compartilhados .