Coding With Fun
Home Docker Django Node.js Articles Python pip guide FAQ Policy

Apache Maven snapshot


May 26, 2021 Maven


Table of contents


Maven - Snapshot

Large software applications typically consist of multiple modules, which is a common scenario in which multiple teams work on different modules of the same application. For example, a team is responsible for the application's front-end application user interface engineering (app-ui.jar:1.0) while they use data-service engineering (data-service.jar:1.0).

Now the team in charge of data services may be fixing bugs or enhancements and iterating quickly, and then they release engineering library files into remote repositories almost daily.

Now if the data service team uploads a new version every day, the following questions will be asked:

  • Each time the Data Services team releases an updated version of the code, tell the Application Interface team.
  • Application interface teams need to regularly update their pom .xml to get an updated version

In order to solve this situation, the snapshot concept plays a role.

What is a snapshot?

A snapshot is a special version that represents a copy currently under development. Unlike regular versions, Maven checks out a new snapshot version from the remote repository for each build.

The Data Services team now publishes a snapshot of each updated code, such as data-service:1.0-SNAPSHOT, to the repository to replace the old snapshot jar file.

Snapshot vs version

For versions, maven will not attempt to download a new version 1.0 from the repository once it has downloaded the specified version (for example, data-service:1.0). To download the new code, the data service version needs to be upgraded to 1.1.

For snapshots, Maven automatically gets the latest snapshots (data-service:1.0-SNAPSHOT) each time the user interface team builds their project.

The application user interface pom .xml

The app user interface project is using a snapshot of version 1.0 of the data service

<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

The data service works for each minor change release 1.0 snapshot

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

Although, for snapshots, Maven automatically gets the latest snapshot each time, you can use the -U parameter in any maven command to force maven to download the latest snapshot.

mvn clean package -U

Let's open the command console and go to C: The MVN and app-ui directories and execute the following mvn commands.

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

Maven will begin construction after downloading the latest snapshot of the data service.

[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: Tue Jul 10 16:52:18 IST 2012
[INFO] Final Memory: 16M/89M
[INFO] ------------------------------------------------------------------------