Introdução: Conhecendo a versão "viva"
\n\nImagine que você está trabalhando em um grande projeto Java composto por uma dúzia de módulos. Um módulo (por exemplo, core-api) está sendo constantemente aprimorado por outro desenvolvedor. Você quer usar os trabalhos mais recentes dele, mas a release oficial (1.0.0) só sairá daqui a um mês. O que fazer? Esperar? Copiar o código? Ir até o colega e pedir para ele compilar um arquivo JAR?
É aí que entra o Maven Snapshot — uma versão especial de um artefato que sempre contém a compilação mais recente. Neste artigo, vamos explicar o que é Snapshot em termos simples, como ele difere de uma release normal e por que nenhum projeto Java moderno pode viver sem ele.
\n\n1. O que é Maven Snapshot? (Explicação para iniciantes)
\n\nNo mundo Maven, cada artefato (biblioteca, módulo) tem três coordenadas: groupId, artifactId e version. A versão pode ser de dois tipos:
- \n
- Release — uma versão fixa e estável (por exemplo,
1.0.0,2.3.1). Ela nunca muda. \n - Snapshot — uma versão "viva" e mutável (por exemplo,
1.0.0-SNAPSHOT,2.0.0-SNAPSHOT). É um rascunho que pode ser atualizado a cada compilação. \n
A ideia principal: Snapshot sempre aponta para a versão mais recente do código no branch de desenvolvimento. Se você adicionar uma dependência para 1.0.0-SNAPSHOT, o Maven verificará a cada compilação se uma nova versão deste snapshot apareceu e a baixará.
2. Para que serve o Snapshot? Principais cenários de uso
\n\nO Snapshot resolve três problemas-chave no desenvolvimento em equipe:
\n\n2.1. Integração contínua (CI/CD)
\nImagine que seu servidor CI (Jenkins, GitLab CI) compila o projeto a cada 5 minutos. Se você usar versões normais, terá que alterar manualmente o número da versão a cada minuto. Com Snapshot, isso não é necessário — a versão 1.0.0-SNAPSHOT será sempre a mais recente.
2.2. Dependências entre módulos dentro de um mesmo projeto
\nEm projetos multimódulo (por exemplo, backend, frontend-api, common), os módulos frequentemente referenciam uns aos outros. Enquanto o desenvolvimento está ativo, é conveniente usar dependências SNAPSHOT — elas puxam automaticamente as alterações mais recentes.
2.3. Teste de integrações antes da release
\nSuponha que a equipe A esteja escrevendo a biblioteca auth-lib e a equipe B a esteja usando. A equipe A publica auth-lib:2.0.0-SNAPSHOT, a equipe B adiciona essa dependência e vê imediatamente os novos métodos. Se algo quebrar, pode-se reverter rapidamente para uma release estável.
3. Como é um Snapshot no pom.xml real?
\n\nBasta adicionar o sufixo -SNAPSHOT à versão. Aqui está um exemplo:
<project>\n <modelVersion>4.0.0</modelVersion>\n <groupId>com.pythonlib</groupId>\n <artifactId>my-utils</artifactId>\n <version>1.0.0-SNAPSHOT</version> <!-- Isto é um Snapshot -->\n <packaging>jar</packaging>\n</project>\n\n\nE é assim que você conecta um Snapshot de outro projeto no seu pom.xml:
<dependencies>\n <dependency>\n <groupId>com.otherteam</groupId>\n <artifactId>auth-lib</artifactId>\n <version>2.0.0-SNAPSHOT</version>\n </dependency>\n</dependencies>\n\n\nObserve: por padrão, o Maven não armazenará em cache o Snapshot para sempre. Ele verifica atualizações uma vez por dia (padrão). Mas você pode forçá-lo a atualizar todas as dependências Snapshot usando a flag -U:
mvn clean install -U\n\n\n