Maven Snapshot: o que é e para que serve? Explicação para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Conhecendo a versão "viva"

\n\n

Imagine 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?

\n\n

É 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\n

1. O que é Maven Snapshot? (Explicação para iniciantes)

\n\n

No mundo Maven, cada artefato (biblioteca, módulo) tem três coordenadas: groupId, artifactId e version. A versão pode ser de dois tipos:

\n\n
    \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
\n\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á.

\n\n

2. Para que serve o Snapshot? Principais cenários de uso

\n\n

O Snapshot resolve três problemas-chave no desenvolvimento em equipe:

\n\n

2.1. Integração contínua (CI/CD)

\n

Imagine 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.

\n\n

2.2. Dependências entre módulos dentro de um mesmo projeto

\n

Em 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.

\n\n

2.3. Teste de integrações antes da release

\n

Suponha 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.

\n\n

3. Como é um Snapshot no pom.xml real?

\n\n

Basta adicionar o sufixo -SNAPSHOT à versão. Aqui está um exemplo:

\n\n
<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\n

E é assim que você conecta um Snapshot de outro projeto no seu pom.xml:

\n\n
<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\n

Observe: 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:

\n\n
mvn clean install -U\n
\n\n

4. Snapshot vs Release: diferenças chave

\n

Blogs

Book Recommendations