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