Páginas

quinta-feira, 10 de maio de 2012

Maven: Acessando um Repositório Particular

Normalmente, em uma empresa, uma equipe de desenvolvimento com projetos baseados em Maven irão utilizar um repositório central particular com o objetivo de espelhar os repositórios remotos bem como armazenar os artefatos gerados pela equipe. Este tipo de configuração permite que o download de artefatos para a máquina do desenvolvedor seja muito mais rápida por não depender de acessos constantes a internet, ou seja, a partir do momento em que o artefato esteja disponível no repositório particular, a velocidade de obtenção deste artefato por um desenvolvedor fica limitado apenas a velocidade de rede; e, também, a publicação dos artefatos produzidos pela equipe de desenvolvedores no repositório particular facilita a configuração de um ambiente de integração contínua.

Nesta postagem venho compartilhar a configuração local em nosso ambiente de trabalho, encontrada após testes, e definida como a melhor forma de uso (até o momento).

settings.xml

O alvo deste compartilhamento é a configuração do arquivo "settings.xml" de definições locais do usuário, localizado, normalmente, na pasta ".m2" dentro da pasta de cada usuário, e utilizado pelo Maven para obter a forma de acesso aos repositórios.

Vou abordar apenas as configurações necessárias para atingir o objetivo de acessar o repositório particular, a configuração de proxies não entrará nesta lista, pois o acesso ao repositório particular é local e não depende de proxy.

mirrors

<mirrors>
 <mirror>
  <id>nexus</id>
  <mirrorOf>*</mirrorOf>
  <url>http://servidornexus/nexus/content/groups/public</url>
 </mirror>
 <mirror>
  <id>dev-snapshots</id>
  <mirrorOf>snapshots</mirrorOf>
  <url>http://servidornexus/nexus/content/repositories/snapshots/</url>
 </mirror>
 <mirror>
  <id>dev-releases</id>
  <mirrorOf>releases</mirrorOf>
  <url>http://servidornexus/nexus/content/repositories/releases/</url>
 </mirror>
</mirrors>
Observe nesta parte da configuração que estamos definindo 3 repositórios de acesso, um para os nossos snapshots, um para os nossos releases e um para todos os outros artefatos.

servers

<servers>
 <server>
  <id>snapshots</id>
  <username>user</username>
  <password>password</password>
 </server>
 <server>
  <id>releases</id>
  <username>user</username>
  <password>password</password>
 </server>
</servers>
Nesta parte definimos nossa credencial de acesso com permissão de inclusão de artefatos nos repositórios de snapshots e releases, cada servidor definido aqui deve espelhar o id da configuração dos repositórios na seção profiles.

profiles

<profiles>
 <profile>
  <id>dev</id>
  <activation>
   <activeByDefault>true</activeByDefault>
  </activation>
  <repositories>
   <repository>
    <id>central</id>
    <url>http://central</url>
    <releases>
     <enabled>true</enabled>
    </releases>
    <snapshots>
     <enabled>true</enabled>
    </snapshots>
   </repository>
   <repository>
    <id>snapshots</id>
    <url>http://snapshots</url>
    <releases>
     <enabled>false</enabled>
    </releases>
    <snapshots>
     <enabled>true</enabled>
     <updatePolicy>always</updatePolicy>
    </snapshots>
   </repository>
   <repository>
    <id>releases</id>
    <url>http://releases</url>
    <releases>
     <enabled>true</enabled>
    </releases>
    <snapshots>
     <enabled>false</enabled>
    </snapshots>
   </repository>
  </repositories>
 </profile>
</profiles>
Esta parte da configuração define os repositórios baseado em um profile ativado por padrão. Esta configuração será exportada para cada pom.xml, ou seja, os seus arquivos de definição de projetos (pom.xml) não podem possuir configuração de repositórios, mas apenas as configurações da seção distributionManagement com os ids espelhando os ids dos repositórios definidos aqui.

Note que as tags url são referências inúteis pois serão substituídas pelas definições dos mirrors.

Nenhum comentário:

Postar um comentário

Olá! Antes de postar seu comentário, por favor, observe que comentários técnicos, elogios e sugestões são antecipadamente agradecidos, esclarecimentos sobre os conceitos envolvidos na postagem serão respondidos da melhor forma possível, mas pedidos de ajuda técnica ou suporte individual deverão ser feitos através do formulário de contato. Grato!