Como modularizar um aplicativo Java (grande)?

Tenho um aplicativo bastante grande (vários MLOC) em mãos que gostaria de dividir em partes separadas mais sustentáveis. Atualmente, o produto é composto por cerca de 40 projetos Eclipse, muitos deles com interdependências. Isso por si só inviabiliza um sistema de compilação contínuo, porque ele teria que ser reconstruído muito a cada check-i

Existe uma maneira de "práticas recomendadas" de como

identificar peças que podem ser imediatamente separadasnterdependências de documentos visualmenteunangle o código existentehandle "patches" que precisamos aplicar às bibliotecas (atualmente tratadas colocando-as no caminho de classe antes da biblioteca real)

Se houver ferramentas (livres / abertas) para suportar isso, eu gostaria de sugestõe

Embora eu não tenha nenhuma experiência com o Maven, parece que isso força um design muito modular. Gostaria de saber agora se isso é algo que pode ser adaptado iterativamente ou se um projeto que deveria usá-lo precisaria ser estruturado com a modularidade em mente desde o iníci

Edit 2009-07-10

Estamos no processo de dividir alguns módulos principais usandoApache Ant / Ivy. Ferramenta realmente útil e bem projetada, não impondo tanto a você quanto o mave

Anotei alguns detalhes mais gerais e opiniões pessoais sobre por que estamos fazendo isso no meu blog - muito tempo para postar aqui e talvez não seja interessante para todos, então siga a seu próprio critério: www.danielschneller.com

questionAnswers(7)

yourAnswerToTheQuestion