Maven - Instantanés

Une grande application logicielle se compose généralement de plusieurs modules et c'est un scénario courant où plusieurs équipes travaillent sur différents modules de la même application. Par exemple, considérons qu'une équipe travaille sur le front-end de l'application en tant que projet app-ui (app-ui.jar: 1.0) et qu'elle utilise un projet de service de données (data-service.jar: 1.0).

Maintenant, il peut arriver que l'équipe travaillant sur le service de données subisse des corrections de bogues ou des améliorations à un rythme rapide et qu'elle publie la bibliothèque dans un référentiel distant presque tous les deux jours.

Maintenant, si l'équipe du service de données télécharge une nouvelle version tous les deux jours, les problèmes suivants se poseront -

  • L'équipe du service de données doit informer l'équipe app-ui chaque fois qu'elle a publié un code mis à jour.

  • L'équipe app-ui doit mettre à jour régulièrement son pom.xml pour obtenir la version mise à jour.

Pour gérer ce genre de situation, SNAPSHOT le concept entre en jeu.

Qu'est-ce que SNAPSHOT?

SNAPSHOT est une version spéciale qui indique une copie de développement en cours. Contrairement aux versions régulières, Maven recherche une nouvelle version SNAPSHOT dans un référentiel distant pour chaque build.

Maintenant l'équipe de service de données publiera l'INSTANTANÉ de son code mis à jour chaque fois au référentiel, disons le service de données: 1.0-SNAPSHOT, remplaçant un pot plus ancien d'INSTANTANÉ.

Instantané vs version

Dans le cas de Version, si Maven a téléchargé une fois la version mentionnée, disons data-service: 1.0, il n'essaiera jamais de télécharger une version 1.0 plus récente disponible dans le référentiel. Pour télécharger le code mis à jour, la version du service de données est mise à niveau vers la version 1.1.

En cas d'INSTANTANÉ, Maven récupérera automatiquement le dernier INSTANTANÉ (data-service: 1.0-SNAPSHOT) chaque fois que l'équipe app-ui construira leur projet.

app-ui pom.xml

app-ui le projet utilise 1.0-SNAPSHOT du service de données.

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

service de données pom.xml

data-service le projet libère 1.0-SNAPSHOT pour chaque changement mineur.

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

Bien que, dans le cas de SNAPSHOT, Maven récupère automatiquement le dernier SNAPSHOT quotidiennement, vous pouvez forcer maven à télécharger la dernière version de snapshot en utilisant le commutateur -U vers n'importe quelle commande maven.

mvn clean package -U

Ouvrons la console de commande, allons à la C:\ > MVN > app-ui répertoire et exécutez ce qui suit mvn commander.

C:\MVN\app-ui>mvn clean package -U

Maven commencera à construire le projet après avoir téléchargé le dernier SNAPSHOT du service de données.

[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]------------------------------------------------------------------------