Pergunta

Eu tenho os seguintes projetos maven criados:

  • PM-core
  • PM-Web (com uma dependência para PM-core)
Agora, este projeto é usado para vários clientes, mas para cada cliente existem algumas pequenas diferenças: principalmente diferenças nos arquivos de configuração, mas alguns clientes também exigem arquivos Java adicionais (que podem não ser instalados para os outros clientes).

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?

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top