Maven - instantâneos
Um grande aplicativo de software geralmente consiste em vários módulos e é um cenário comum onde várias equipes estão trabalhando em diferentes módulos do mesmo aplicativo. Por exemplo, considere que uma equipe está trabalhando no front-end do aplicativo como um projeto app-ui (app-ui.jar: 1.0) e está usando um projeto de serviço de dados (data-service.jar: 1.0).
Agora pode acontecer que a equipe que trabalha no serviço de dados esteja passando por correção de bugs ou aprimoramentos em um ritmo rápido e eles estejam liberando a biblioteca para repositório remoto quase todos os dias.
Agora, se a equipe de serviço de dados fizer upload de uma nova versão a cada dois dias, surgirão os seguintes problemas -
a equipe de serviço de dados deve avisar a equipe app-ui sempre que lançar um código atualizado.
A equipe app-ui precisa atualizar seu pom.xml regularmente para obter a versão atualizada.
Para lidar com esse tipo de situação, SNAPSHOT conceito entra em jogo.
O que é SNAPSHOT?
SNAPSHOT é uma versão especial que indica uma cópia de desenvolvimento atual. Ao contrário das versões regulares, o Maven verifica se há uma nova versão SNAPSHOT em um repositório remoto para cada construção.
Agora a equipe de serviço de dados irá liberar SNAPSHOT de seu código atualizado todas as vezes para o repositório, digamos data-service: 1.0-SNAPSHOT, substituindo um jar SNAPSHOT mais antigo.
Instantâneo vs versão
No caso da versão, se o Maven uma vez baixou a versão mencionada, digamos data-service: 1.0, ele nunca tentará baixar um 1.0 mais recente disponível no repositório. Para baixar o código atualizado, a versão do serviço de dados deve ser atualizada para 1.1.
No caso do INSTANTÂNEO, o Maven buscará automaticamente o INSTANTÂNEO o mais recente (data-service: 1.0-SNAPSHOT) cada vez que a equipe app-ui constrói seu projeto.
app-ui pom.xml
app-ui projeto está usando 1.0-SNAPSHOT de serviço de dados.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app-ui</groupId>
<artifactId>app-ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>data-service</groupId>
<artifactId>data-service</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
data-service pom.xml
data-service o projeto está lançando 1.0-SNAPSHOT para cada alteração menor.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>data-service</groupId>
<artifactId>data-service</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
Embora, no caso de SNAPSHOT, o Maven busque automaticamente o SNAPSHOT mais recente diariamente, você pode forçar o maven a fazer o download da última compilação de instantâneo usando o switch -U para qualquer comando maven.
mvn clean package -U
Vamos abrir o console de comando, vá para o C:\ > MVN > app-ui diretório e execute o seguinte mvn comando.
C:\MVN\app-ui>mvn clean package -U
O Maven começará a construir o projeto após fazer o download do último SNAPSHOT do serviço de dados.
[INFO] Scanning for projects...
[INFO]--------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [clean, package]
[INFO]--------------------------------------------
[INFO] Downloading data-service:1.0-SNAPSHOT
[INFO] 290K downloaded.
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory C:\MVN\app-ui\target
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\main\resources
[INFO] [compiler:compile {execution:default-compile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\app-ui\target\
surefire-reports
--------------------------------------------------
T E S T S
--------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-ui\target\
app-ui-1.0-SNAPSHOT.jar
[INFO]--------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]--------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: 2015-09-27T12:30:02+05:30
[INFO] Final Memory: 16M/89M
[INFO]------------------------------------------------------------------------