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 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
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: maven
janeiro 25, 2010 às 6:42 PM |
Muito bom seu artigo Erico, mas me responda por favor, como faço para instalar um jar meu pelo maven no repositorio hosted?
Obrigado!
agosto 19, 2011 às 10:58 AM |
É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?