[Maven] Instalando um Artefato no Repositório Local

Neste tutorial, iremos mostrar como instalar um artefato no repositório local do Maven que, por padrão, fica no diretório ~/.m2/repository. Mesmo sabendo que não há muita utilidade em utilizar o repositório local em um computador não-servidor, pode ser interessante testar o artefato utilizando-o como dependência de outro projeto antes de instalá-lo em um repositório remoto.

Como exemplo, vamos criar um projeto simples com o archetype Quickstart e chamá-lo de congrats-project. Esse projeto nada mais terá do que uma classe com um único método que retorna uma String como mensagem de parabéns com um nome que passaremos no construtor.

$ mvn archetype:generate -DgroupId=org.andgomes -DartifactId=congrats-project -Dversion=1.0 -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Delete o arquivo App.java e crie o CongratsMessenger.java, a única classe da nossa aplicação, no mesmo diretório.

Agora vamos invocar a fase install, que utiliza o plugin Install para salvar o arquivo JAR da aplicação, gerado na fase package(a fase package é executada antes da fase install no build lifecycle), no repositório local.

$ mvn install
[INFO] Installing /home/anderson/congrats-project/target/congrats-project-1.0.jar to /home/anderson/.m2/repository/org/andgomes/congrats-project/1.0/congrats-project-1.0.jar

Durante a instalação, o Maven informa que o artefato está sendo armazenado no diretório do repositório local. Vamos dar uma olhada em como ficou a estrutura do nosso artefato dentro do repositório.

org/
| andgomes/
| | congrats-project/
| | | 1.0/
| | | | congrats-project-1.0.jar
| | | | congrats-project-1.0.pom
| | | | _remote.repositories

Observe que o repositório mais aninhado é identificado com a versão do projeto e o arquivo POM do projeto foi renomeado. O arquivo _remote.repositories é mantido pelo Maven para armazenar o nome do repositório do qual a dependência foi baixada. No nosso caso, como instalamos o artefato localmente, nada é registrado.

Agora, para demonstrar a utilização do projeto congrats-project, vamos criar um outro projeto simples que o declara como dependência e utiliza a classe CongratsMessenger para exibir uma mensagem de parabéns no terminal.

$ mvn archetype:generate -DgroupId=org.andgomes -DartifactId=simple-project -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeGroupId=org.apache.maven.archetypes -DinteractiveMode=false

Adicionamos a declaração de dependência no arquivo POM e modificamos a classe App para utilizar o método getCongratsMessage() e exibir a mensagem.

Para testar se tudo está funcionando corretamente, vamos compilar e executar a classe App com o plugin Exec do Maven passando como parâmetro o nome da classe totalmente qualificado. Dentro do diretório simple-project, execute os comandos:

$ mvn compile
$ mvn exec:java -Dexec.mainClass="org.andgomes.App"

Saída:

Congratulations, Anderson!
Show your support

Clapping shows how much you appreciated Anderson Gomes’s story.