Como reestruturar o projeto multi-módulo Maven?

Eu peço desculpas pela duração deste post, mas tive dificuldade em torná-lo mais conciso sem apresentar a foto. Eu recentemente herdei o trabalho de build-master para um projeto multi-módulo maven 3.0. O problema é que a estrutura do projeto / módulos é um desastre. Desde o modo como as coisas são atualmente armazenadas no Controle de Origem (usamos o RTC) para a estrutura pom dos módulos, estou arrancando meu cabelo tentando obter um ciclo completo de construção concluído a cada vez.

Como uma hierarquia de projeto, todos os módulos são armazenados "flat"; ou seja: tudo está no mesmo nível. Eu tenho um pom pai e todos os módulos dependem do pai. No entanto, o pai está no mesmo nível que todos os meus outros módulos.

Ex:

<code>c:\dev\MyEarProject
 + parent-pom
   - pom.xml
 + module1
   - pom.xml (depends on parent-pom)
   - src
   -   main
   -     ...
 + module2
   - pom.xml (depends on parent-pom)
   - src
   -   main
   -     ...
 + module3
   - pom.xml (depends on parent-pom)
   - src
   -   main
   -     ...
</code>

O pom pai define todos os módulos necessários para construir o projeto, bem como um conjunto de propriedades para números de versão de artefatos usados ​​nos diferentes submódulos:

<code><modules>
  <module>../module1</module>
  <module>../module2</module>
  <module>../module3</module>
</modules>

<properties>
    <org.springframework.version>3.0.5.RELEASE</org.springframework.version>
    <slf4j.version>1.6.4</slf4j.version>
    <repositoryAddress>${snapshots.repo.url}</repositoryAddress>
    <my.hibernate-module.dao.impl>1.2.3</my.hibernate-module.dao.impl>
    <my.hibernate-module.dao.api>1.2.3</my.hibernate-module.dao.api>
</properties>
</code>

Cada pom do módulo, por sua vez, depende do pom pai através do número do artefato do pom:

<code><parent>
    <groupId>com.cws.cs.lendingsimulationservice</groupId>
    <artifactId>parent-pom</artifactId>
    <version>1.0.6</version>
</parent>
</code>

Para tornar as coisas ainda mais confusas, o nome real do artefato pode, ou não (dependendo do módulo), corresponder ao caminho do módulo. Por exemplo, module1 pode estar localizado no caminhoc:\dev\MyEarProject\module1 mas tem nome de artefatohibernate-module. No entanto, devido à maneira como é armazenado no RTC, o diretório é chamadomodule1 quando é check-out.

A maneira mais fácil de construir tudo, é claro, é entrar emc:\dev\MyEarProject\parent-pom\ e corramvn clean deploy. Isso funciona bem no modo SNAPSHOT, já que o repositório SNAPSHOT permite várias implementações da mesma versão de artefato. Mas no modo de liberação, isso falha.

Essa estrutura está causando 2 problemas para mim.

Toda vez que eu preciso fazer uma mudança de versão para uma propriedade no pai, eu tenho que atualizar o número da versão pai-pom, e todos os módulos filhos da versão pai pom, e todos os módulos filhos da própria versão (desde que o pai mudou).Sempre que eu precisar implantar um ciclo de lançamento, o mvn lançará um erro se um dos módulos não tiver sido alterado desde o último ciclo e, conseqüentemente, não puder ser reimplantado no mesmo repo (o repo não permite substituir os artefatos existentes)

Então eu estou procurando a melhor maneira de reestruturar este projeto para evitar esses problemas. Para o pai pom, eu sei que posso usar um caminho relativo para apontar para o pai em vez disso. No entanto, dada a estrutura "plana" dos módulos, esta é uma abordagem recomendada (isto é: o caminho relativo do pai pom seria ../parent-pom/pom.xml - parece um pouco estranho para mim)? Além disso, dado que o controle de versão do pai é independente dos módulos, usar um caminho relativo não apenas abriria a porta para confusão adicional (ou seja: não haveria como saber qual versão do pom pai está associada a qual versão do submódulo).

Em segundo lugar, como posso construir a orelha inteira sem encontrar os erros de implantação que estou tendo? Como o artefato já existe no repositório, não preciso reconstruí-lo e reimplementá-lo. Eu tentei usar --projects mas com o número de módulos envolvidos, fica extremamente difícil de gerenciar.

questionAnswers(3)

yourAnswerToTheQuestion