Maven - Istantanee
Un'applicazione software di grandi dimensioni è generalmente costituita da più moduli ed è uno scenario comune in cui più team lavorano su diversi moduli della stessa applicazione. Ad esempio, si consideri che un team sta lavorando sul front-end dell'applicazione come progetto app-ui (app-ui.jar: 1.0) e sta utilizzando il progetto del servizio dati (data-service.jar: 1.0).
Ora può accadere che il team che lavora sul servizio dati stia subendo correzioni di bug o miglioramenti a un ritmo rapido e rilasci la libreria nel repository remoto quasi a giorni alterni.
Ora, se il team del servizio dati carica una nuova versione a giorni alterni, sorgeranno i seguenti problemi:
Il team del servizio dati dovrebbe informare il team dell'interfaccia utente dell'app ogni volta che ha rilasciato un codice aggiornato.
Il team app-ui ha richiesto di aggiornare regolarmente il proprio pom.xml per ottenere la versione aggiornata.
Per gestire questo tipo di situazione, SNAPSHOT entra in gioco il concetto.
Cos'è SNAPSHOT?
SNAPSHOT è una versione speciale che indica una copia di sviluppo corrente. A differenza delle versioni normali, Maven cerca una nuova versione SNAPSHOT in un repository remoto per ogni build.
Ora il team del servizio dati rilascerà SNAPSHOT del suo codice aggiornato ogni volta nel repository, ad esempio servizio dati: 1.0-SNAPSHOT, sostituendo un vecchio vaso SNAPSHOT.
Istantanea vs versione
In caso di versione, se Maven ha scaricato una volta la versione menzionata, ad esempio data-service: 1.0, non proverà mai a scaricare una versione 1.0 più recente disponibile nel repository. Per scaricare il codice aggiornato, la versione del servizio dati deve essere aggiornata alla 1.1.
In caso di SNAPSHOT, Maven recupererà automaticamente l'ultimo SNAPSHOT (servizio dati: 1.0-SNAPSHOT) ogni volta che il team di app-ui crea il proprio progetto.
app-ui pom.xml
app-ui il progetto sta utilizzando 1.0-SNAPSHOT del servizio dati.
<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 il progetto sta rilasciando 1.0-SNAPSHOT per ogni piccola modifica.
<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>
Sebbene, in caso di SNAPSHOT, Maven recuperi automaticamente l'ultimo SNAPSHOT su base giornaliera, puoi costringere Maven a scaricare l'ultima build di snapshot utilizzando l'opzione -U su qualsiasi comando Maven.
mvn clean package -U
Apriamo la console dei comandi, vai al file C:\ > MVN > app-ui directory ed eseguire quanto segue mvn comando.
C:\MVN\app-ui>mvn clean package -U
Maven inizierà a costruire il progetto dopo aver scaricato l'ultimo SNAPSHOT del servizio dati.
[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]------------------------------------------------------------------------