Você está na página 1de 5

Meus cursos

1 de 5

http://www.alura.com.br/course/MAVEN/section/2

Alura | Cursos Online de Tecnologia


Maven: gerenciando dependncias

Convenes e repositrios

Explicao
(Reportar problema na explicao)

Esse captulo continua os projetos criados no captulo anterior.


O maven facilita o gerenciamento do ciclo de build de um projeto uma vez que ele
prefere convenes ao invs de configuraes. Como j vimos, os diretrios so
definidos por padro. Podemos mud-los, mas o padro src/main/java e src/test
/java.
Se desejamos adicionar arquivos de recurso como internacionalizao, criamos o
diretrio src/main/resources. O diretrio de sada o target. Mas todas essas
convees vem com um custo. Se desejamos alter-la por algum motivo, temos
que criar a configurao no arquivo pom.xml. Teoricamente no existe nenhum
problema em fugir do padro exceto que um desenvolvedor novo no saber direito
onde encontrar os arquivos que estava a acostumado a encontrar.
O poder do maven est principalmente em suas convees e fugir muito delas
pode atrapalhar o processo de desenvolvimento no dia a dia.
Todo projeto do maven tem um nome - tambm configurvel no pom.xml - que

06/10/2014 09:41

Meus cursos

2 de 5

http://www.alura.com.br/course/MAVEN/section/2

identificado atravs da tag artifactId. No nosso caso, o nome do projeto produtos.


Alm do nome, todo projeto pertence a algum grupo, identificado pelo groupId.
Durante a criao de nosso projeto, escolhemos o grupo br.com.caelum.maven.
Exemplos de groupId e artifactIds para projetos famosos so:
groupId: org.hibernate artifactId: hiberante-core
groupId: br.com.caelum artifactId: vraptor
groupId: com.amazonaws artifactId: aws-java-sdk
Lembramos que no importante decorar tais estruturas uma vez que podemos
usar o mvnrepository e a documentao das bibliotecas para descobrir seus
groupId e artifactId.
O maven por padro tenta sempre atualizar seus plugins internos toda vez que um
comando executado. Isso implica em tentar acessar a internet diversas vezes
para verificar a ltima verso dos plugins cuja verso no foi especificada. Mesmo
que no estejamos usando plugins extras, a estrutura interna do maven j
composta por plugins (cada fase utiliza plugins como o de compilao, teste etc)
implicando em uma demora toda vez que chamamos um comando do maven. Para
evitar que o maven bata na rede toda vez que executamos um comando podemos
invoc-lo com a flag -o, como por exemplo em:
mvn -o test
Mas de onde o Maven baixa todos esses arquivos? Ele baixa de um repositrio
central chamado "maven central" que fica localizado em http://mirrors.ibiblio.org
/maven2/. Ao acessarmos, por exemplo, http://mirrors.ibiblio.org/maven2
/org/hibernate/hibernate-core/ temos acesso a todas as verses do hibernate-core
que foram lanadas atravs do grupo org.hibernate. O maven detecta a verso

06/10/2014 09:41

Meus cursos

3 de 5

http://www.alura.com.br/course/MAVEN/section/2

desejada em seu pom e busca no repostrio central tal verso do hibernate.


Suponha que a verso seja a 4.1.2 em http://mirrors.ibiblio.org/maven2
/org/hibernate/hibernate-core/4.1.2/.
Ao buscar o pom do hibernate 4.1.2 ele encontra todas as dependncias do
hibernate http://mirrors.ibiblio.org/maven2/org/hibernate/hibernate-core/4.1.2
/hibernate-core-4.1.2.pom e executa o processo recursivamente buscando em seu
repositrio central todas as dependncias que o usurio ainda no possui em sua
mquina.
Podemos executar o comando dependency:tree para analisar a rvore de
dependncias e enteder o motivo de cada jar estar dentro de nosso projeto:

Note que o maven indica a dependncia que possuimos do xstream. E que


indiretamente dependemos do xpp3.
Mas onde o Maven armazena tais jars e poms aps baix-los da internet? Como
vimos anteriormente, os arquivos so guardados em um diretrio nico para cada

06/10/2014 09:41

Meus cursos

4 de 5

http://www.alura.com.br/course/MAVEN/section/2

usurio: ~/.m2/repository. Sendo assim, dois projetos distintos que referenciam


uma mesma verso de uma biblioteca no precisam armazenar localmente duas
cpias do arquivo. Chamamos esse diretrio de repositrio local do usurio. Ele
ajuda a consumir menos banda ao compartilhar jars entre projetos.
Vamos criar um novo projeto:
mvn archetype:generate -DgroupId=br.com.caelum.maven -DartifactId=blog
Adicionamos agora a necessidade do xstream na mesma verso que anteriormente:
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.3.1</version>
</dependency>
E executamos mvn package.
mvn package
Note que o maven no baixou novamente os jars do hibernate, uma vez que ele j
existia.

06/10/2014 09:41

Meus cursos

5 de 5

http://www.alura.com.br/course/MAVEN/section/2

Em uma analogia, o repositrio uma biblioteca, a estante o groupId e a


prateleira o artifactId. Dentro de uma prateleira temos diversas verses. Se o
arquivo que procuramos no est em nossa biblioteca podemos procurar na
biblioteca remota, em uma ou mais delas. Se no encontramos, vamos reclamar,
claro.
Com convenes bem definidas para os diretrios internos ao projeto, e para o
repositrio compartilhado, o Maven facilita os primeiros passos de trabalho em um
novo projeto devido a similaridade entre todos eles.
Agora que j sabemos como o maven funciona por trs e como um projeto cliente
pode ser trabalhado com Maven, chega o momento de analisarmos uma fase
importante que a gerao de relatrios para a equipe de desenvolvedores.

06/10/2014 09:41

Você também pode gostar