Preciso de alguns conselhos sobre como estruturar nossos projetos no Git. Usamos Java e o Maven é a nossa ferramenta de construção. O Maven assume que todos os seus projetos têm um ancestral comum eventualmente. O Maven também pode ser uma verdadeira rainha do drama quando as coisas não estão configuradas exatamente da maneira como a fundação Apache configura seus projetos (qualquer pessoa que use o plug-in de lançamento provavelmente sabe do que estou falando).
Queremos um pom pai de nível superior que controle as versões do plug-in e construa a configuração (configuração do repositório, quais artefatos construir, convenções de nomenclatura, versões do plug-in, etc.). Maven gostaria que todos os nossos projetos de TI estivessem em subpastas desse projeto principal. Isso implica em um grande repositório Git para a organização.
Isso criará um ambiente muito barulhento. Se houver duas equipes trabalhando em projetos não relacionados, elas constantemente terão que realizar fusões da outra equipe. Idealmente, eu gostaria de ter um repo por projeto.
Mas esse tipo de conflito com o modelo extremamente hierárquico de Maven, que exige subprojetos, subpastas.
Preciso de alguns conselhos sobre como as pessoas reconciliaram esses dois modelos ... obrigado!
fonte
Respostas:
Você tem 2 opções:
1. por git way: use submodules. Aqui está uma documentação sobre como o git gerencia submodules git submodules . Pessoalmente, não o usei, mas parece adequado ao seu problema.
2. por maven way: no maven, não é obrigatório que seu projeto raiz (configuração) seja hierarquicamente o diretório pai de todos os seus projetos. Você pode ter uma estrutura assim:
configuração, projeto1 e projeto2 estão no mesmo nível de diretório e cada um pode ser um repositório git. Ao criar o projeto1 ou o projeto2, você executa o comando maven no nível do projeto1 ou do projeto2 e o maven tenta buscar o pai (configuração) no repositório do maven e não no diretório pai. Você deve prestar atenção às versões. Eu recomendaria no projeto1 ou no projeto2 manter uma referência a um pai (configuração) com uma versão de lançamento. Para fazer uma liberação, é necessário fazer isso em duas etapas: libere a configuração primeiro e libere o projeto depois. Projeto1 e projeto2 podem evoluir independentemente e não precisam ter a mesma versão de configuração que um pai.
Apenas em casos especiais, quando você deseja ter a configuração e os projetos como versões do INSTANTÂNEO, no projeto1 ou no projeto2, você pode usar a
<relativePath>
tag inside<parent>
tag para apontar para o caminho local da configuração. Eu não recomendo isso, porque criará problemas no ambiente de desenvolvimento (pelo menos para mim no Eclipse)Peço desculpas pelo meu inglês.
fonte
Não, o Maven simplesmente deseja recuperar os artefatos necessários. A melhor maneira de fazer isso é com um repositório de artefatos, como Nexus ou Artifactory . Cada projeto pode ter seu próprio repositório Git.
Esse é o seu verdadeiro problema. Faz sentido usar um POM pai para impor a configuração, mas não há razão para combinar configuração com controle de construção. De fato, exceto em um projeto com vários módulos autônomos, eu diria que é uma péssima idéia pelos motivos que você declara (além do fato de que você precisaria criar todos os seus projetos, todos os A Hora).
fonte