Um Projeto, Vários Clientes

Boa tarde a todos,

Estou chegando agora numa consultoria que desenvolve um sistema WEB. Ao longo do tempo, o sistema foi sendo customizado para n clientes e atualmente existem projetos separados para cada cliente. Estes projetos possuem as funcionalidades do projeto original, mais os acréscimos solicitados pelos clientes.

Um novo gerente assumiu o projeto e deseja fazer um “merge” dos fontes dos projetos, porém as customizações devem continuar disponíveis somente para os respectivos clientes que as solicitaram, ou seja, as funcionalidades do sistema do cliente X não deverão ser incluídas no sistema do cliente Y depois da unificação dos fontes.

Considerando que os fontes do projeto são arquivos java, jsps e xmls, qual a solução mais comum para casos como este ?

Qualquer sugestão é bem vinda.

Obrigado

Vocês usam um sistema para controle de versões, tipo CVS, SVN, etc, certo?

Neste caso acho que o melhor a se fazer é criar branches no repositório, um branch para cada cliente que possui customizações.

Estou usando SVN… obrigado pela sugestão, vou tentar usar branches

A idéia é ter um único projeto, com branch eu tenho a facilidade de fazer merge das customizações no projeto original mas continuo tendo n projetos, certo ?

Certo. Dá uma olhada com calma na documentação do Subversion que dá pra fazer sim.

Tentar integrar vários projetos através de VCS não vai ser muito agradável. A quantidade de conflitos a resolver tornará seu trabalho bem imrodutivo.

Creio que o melhor seja repensar sua arquitetura. Utilize um sistema mais modular, onde as modificações podem ser adicionadas e removidas sem muito problema. Veja como sistemas com OSGI e comportam, não que você precise de OSGi mas pelo menos vai ter uma boa idéia de como um sistema modular atua.

Concordo com o pensamento do Phillip. Acho que você tem que redesenhar a sua aplicação pra ter um core e as customizações seriam algo como plugins. Pense na arquitetura do Eclipse: você tem o core (eclipse) e vários plugins que você pode instalar pra que ele tenha as funcionalidades das quais precisa.