Repositório Maven com Nexus em 5 minutos!

Veja como é extremamente simples criar um repositório proxy para utilização do Apache Maven2 com a ferramenta Sonatype Nexus (Open Source).

Após o download, basta instalar a aplicação, empacotada em formato de um web archive (war) em um servidor de aplicações ou até mesmo em um servlet container. Com a aplicação em funcionamento, ao clicarmos no link Repositories, veremos a seguinte imagem:

Nexus Repositorios

Nexus Repositórios

Aqui iremos trabalhar com apenas três tipos de repositórios:

  • Hosted: Repositório local, os artefatos são obtidos e inseridos no servidor que hospeda o aplicativo;
  • Proxy: Repositório que age como um proxy para um repositório que está remoto ao aplicativo;
  • Group: Agrega e ordena um conjunto de repositórios, incluindo os dois citados acima.

Este três tipos de repositórios são essenciais para montarmos um repositório enterprise. O hosted será responsável por agregar os artefatos por nós produzidos e que ficarão sobre nossa guarda, já o proxy irá apontar para os repositórios Maven distribuídos pela internet, e qualquer outro repositório remoto ao nosso (sim, podemos ter outros repositórios sobre nossa guarda e criarmos repositórios proxy sobre eles). O repositório do tipo Group é quem vai agregar nossos repositórios locais e remotos, em uma ordem de busca específica.

Neste exemplo criei dois repositórios do tipo hosted, um para hospedar os artefatos de release de projeto e outro para hospenar os artefatos que ainda não em desenvolvimento ou que ainda não podem ser disponibilizados como releases, ou seja, snapshots. Os outros repositórios tipos já vêm com a configuração básica do Nexus

Para conseguirmos utilizar o repositório com a linha de comando do maven, precisamos ajustar/criar 2 arquivos:

  • settings.xml: Arquivo de mais alto nível na hierarquia, irá guardar as configurações de acesso ao servidor Nexus e os dados para autenticação neste;
  • pom.xml: Responsável por guardar as informações sobre gerenciamento de distribuição dos artefatos gerados nos projetos e também indicar o endereço do repositório Nexus, para que este seja o repositório proxy de qualquer projeto.

Quanto ao arquivo referente a organização de projetos (pom.xml) a idéia é criá-lo para ser comum a qua lquer projeto, ou seja, ser o parent da hierarquia.

Segue a configuração dos arquivos:

[settings.xml]

<settings>
 
  <servers>
     <server>
       <id>nexus</id>
       <username>emarineli</username>
       <password>emarineli</password>
     </server>
  </servers>

</settings>

Os dados de user e password são os mesmo utilizados para se realizar o login na ferramenta.

[pom.xml]

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>br.com.emarineli.estudo</groupId>
    <artifactId>common-pom</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>common pom</name>
    <url>http://emarineli.wordpress.com</url>
 
        <prerequisites>
                <maven>2.0.9</maven>
        </prerequisites>
         
    <description>
        Pom raiz para desenvolvimento de sistemas utilizando Maven 2.
        Contém todas as informações necessárias sobre SCM e Repositórios.
    </description>
 
    <developers>
        <developer>
            <name>Erico Marineli</name>
            <id>emarineli</id>
            <email>emarineli@gmail.com</email>
            <organization>SCAT</organization>
            <roles>
                <role>Programmer</role>
            </roles>
            <timezone>-3</timezone>
        </developer>
    </developers>
 
    <distributionManagement>
 
        <repository>
            <id>nexus</id>
            <name>Repositorio de Releases</name>
            <url>http://localhost:8080/nexus-webapp-1.3.4/content/repositories/emarineli-repo-release/</url>
        </repository>
 
        <snapshotRepository>
            <id>nexus</id>
            <name>Repositorios de Snapshots</name>
            <url>http://localhost:8080/nexus-webapp-1.3.4/content/repositories/emarineli-repo-snapshot/</url>
        </snapshotRepository>
 
    </distributionManagement>
 
    <repositories>
        <repository>
            <id>central</id>
            <url>http://localhost:8080/nexus-webapp-1.3.4/content/groups/public</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>snapshots</id>
            <url>http://localhost:8080/nexus-webapp-1.3.4/content/groups/public-snapshots</url>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
    </repositories>
    <pluginRepositories>
              <pluginRepository>
                    <id>central</id>
                    <url>http://localhost:8080/nexus-webapp-1.3.4/content/groups/public</url>
                    <snapshots>
                          <enabled>false</enabled>
                    </snapshots>
              </pluginRepository>
              <pluginRepository>
                    <id>snapshots</id>
                    <url>http://localhost:8080/nexus-webapp-1.3.4/content/groups/public-snapshots</url>
                    <releases>
                          <enabled>false</enabled>
                    </releases>
              </pluginRepository>
        </pluginRepositories>
  
</project>

Repare que o mesmo identificador utilizado no arquivo settings.xml deve ser passado como identificador no repositório de distribuição de nossos projetos no arquivo pom.xml, além de substituírmos também neste arquivo os repositórios central e snapshots.

Ao final, após utilizar o maven você já poderá ver os artefatos que foram trazidos dos respositórios proxy hospedados no Nexus, como mostra a figura abaixo:

Artefatos hospedados no Nexus

Artefatos hospedados no Nexus

Simples, não? Agora, qualquer pom que herde as configurações deste criado acima, passará a utilizar o repositório enterprise.

Existem diversos tipos de configurações que podemos fazer, como utilizar profiles, adição de configurações no settings ao invés do pom criado acima, cluster redundante com a ferramenta para garantir auta disponibilidade e balanceamento de carga, e  diversas outras. Porém a idéia foi fazer uma configuração incial para utilizar um repositório enterprise com o Nexus.

Apesar de trabalhar com o JFrog Artifactory como enterprise repository, gostei bastante do que vi ao utilizar o Nexus. Altamente recomendado.

[Referências]
Vídeo tutorial básico sobre uso do Nexus.
Maven pom reference.

Tags:

2 Respostas para “Repositório Maven com Nexus em 5 minutos!”

  1. neylor Disse:

    Muito bom seu artigo Erico, mas me responda por favor, como faço para instalar um jar meu pelo maven no repositorio hosted?

    Obrigado!

  2. Rômulo Augusto Disse:

    Érico, estou testando o Nexus e o Artifactory mas não conseguir fazer deploy de artefatos via Maven. Os arquivos (JAR) vão com zero bytes ou vão corrompidos.

    Uso o Maven 2.2.1 e eclipse. Já viu isso?

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.