Depois de muito relutar, nao teve jeito, tive que ceder a um “sisteminha de controle de build” e foi o Maven,
nunca me soou bem ter uma aplicacao que definisse quais os diretorios e padroes eu deveria utilizar no
desenvolvimento de uma aplicacao, assim como a utilizacao de PMD e Checkstyle sempre foram, e de certo modo
continuam sendo, uma burocracia desnecessária e um inibido de criatividade do desenvolvedor, mas isso já é papo
para outro post.
Para mim nunca fez sentido “embutir” uma ferramenta a mais no processo de desenvolvimento que nao agregasse valor algum
para o desenvolvedor do sistema, mas estudando e utilizando o Maven percebi que realmente, “criatividade” na mao de desenvolvedor
é uma arma, algumas vezes (quase sempre) deve ser definido o padrao de diretorios para recursos, classes, arquivos de configuracoes,
conteudo web e etc….
Vejamos alguns passos para utilizar essa ferramenta:
Instalando
Simples, rápido e indolor, va no site do projeto e facao download do binario: http://maven.apache.org/download.html
Feito isso, descompacte o conteudo e crie uma variavel de ambiente chamada: M2_HOME apontando para este diretorio,
altere a variavel de ambiente: “Path” incluindo no final: ;%M2_HOME%\bin
Abra uma linha de comando e digite:
mvn --version
se a resposta for algo do tipo:
Maven version: 2.0.5
Perfeito, o primeiro passo está dado, Maven2 instalado e funcionando.
Criando projetos
O Maven cria uma estrutura de diretorios de acordo com o tipo do projeto, este pode ser direcionado para projeto web,
projeto EJB (business) ou apenas um jar, por defautl ele cria uma estrutura de diretorio JAR, para isso, va na linha
de comando e digite:
mvn archetype:create -DgroupId=mangar.corp -DartifactId=mangar-jar
groupId = nome do pacote que será criado no repositorio
artifactId = nome do projeto
existem mais alguns parametros que podem ser informados na linha de comando para criar uma arvore de diretorios para determinados
tipos de projetos, uma delas é:
-DarchetypeArtifactId=maven-archetype-webapp
este criará uma estrutura para um projeto web, com WEB-INF.
A estrutura criada será:
mangar-jar
|-- pom.xml
`-- src
`-- main
| `-- java
| `-- App.java
`-- test
`-- java
`-- AppTest.java
Se vc criou uma estrutura jar mas na verdade precisa de uma estrutura web, nao se desespere!
Crie o diretorio, dentro do diretorio main: webapp e webapp\WEB-INF, crie tbem o arquivo web.xml dentro do WEB-INF,
e altere o arquivo pom.xml a tag packaging de jar para war.
pom.xml
É aqui que mora todo o segredo do Maven, este é o arquivo onde ficam todos os segredos, dependencias, empacotamento,
relatorios e todas as magicas que o Maven pode fazer por voce.
No comeco temos:
<groupId>mangar.corp</groupId> <artifactId>mangar-jar</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version>
A tag <version> e a <packaging> sao duas que tambem podem ser informadas na linha de comando quando criado o repositorio
do projeto, mas por default, estes valores apresentados sao os padroes caso nao seja mencionado.
Maiores detalhes sobre esse arquivo vc pode encontrar nos sites: maven.apache.org, onjava entre outros.
Vou apresentar aqui alguns parametros que precisei.
Compilando o codigo com a versao 1.5 do JDK
Na maquina já existia uma VM 1.5 instalada no entando, nao sei por causa de que, meu codigo que compilava perfeitamente
no Eclipse, nao estava rolando via maven (estava usando enum e generics), entao, garimpando na WEB descobri os seguintes
parametros que devem ser incluidos no pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
A tag <build> é unica no arquivo, assim como a <plugins> dentro da <build>, mas a tag <plugin> pode ser incluido de acordo com os
plugins necessários com a fase de build exigir.
Uso de bibliotecas (agregando para o desenvolvedor)
Chegamos na hora boa, a hora que o desenvolvedor vai deixar de apenas cumprir regras sem um ganho de fato.
Em um projeto web, nao é raro utilizar struts, por acaso vc sabe a dependencia entre o pacote struts.jar com os demais pacotes?
Eu tbem nao! Mas o Maven sabe!
Apenas informando que o projeto tem dependencia com struts e qual a versao deste, o maven vai trazer para o repositorio local
todas as dependencias necessárias, para isso, inclua no seu pom:
<dependencies>
<dependency>
<groupId>struts</groupId>
<artifactId>struts</artifactId>
<version>1.2.9</version>
</dependency>
<dependencies>
A tag: <dependencies> é unica para todo o pom, já as <dependency> pode se multiplicar de acordo com a necessidade.
Com esse trecho de codigo o maven fará o downlod da lib do struts 1.2.9 incluindo todas as dependencias.
Repositorios
Como dito na sessao anterior o maven baixa as bibliotecas do repositorio remoto para o repositorio local, por definicao o
repositorio padrao remoto é o: http://repo1.maven.org/maven2/ este contem uma quantidade de bibliotecas muito grande, ainda
assim algumas mais especificas ou versoes mais novas podem nao estar atualizadas, por tanto, vc pode incluir alguns repositorios.
Uma das maneiras de incluir um novo repositorio é incluir o codigo no arquivo pom.xml:
<repositories>
<repository>
<id>galaxy</id>
<url>http://galaxy.andromda.org/maven2</url>
</repository>
</repositories>
A tag <repositories> é unica no pom, a tag <repository> pode ser repetida para incluir os repositorios desejados, inclusive o repositorio
do JBoss.
O repositorio local por definicao é criado dentro do diretorio “home” do usuario, no windows: %Documents and Settings%\%Usuario logado%\.m2\repository
Mas pode ser alterado, para isso, copie o arquivo settings.xml que fica em: %M2_HOME%\conf para o %Documents and Settings%\%Usuario logado%\.m2
localize a linha: <settings> insira logo a baixo : <localRepository>c:/m2</localRepository>
Isso mudara o diretorio do seu repositorio.
Executando
Com tudo isso feito, agora é hora de vermos o Mvn em ação, na linha de comando vá para o diretorio onde está localizado o arquivo pom.xml e digite:
mvn clean install
Executado a primeira vez este comando fará o downlad de todas as bibliotecas associadas direta e indiretamente ao projeto, compulara o projeto,
executará os testes, empacotará o projeto e o instalará no repositorio local.
outros comandos:
clean = limpa o diretorio de target, que o maven usa como stage para a geracao do pacote com os binarios da aplicacao
package = compila o projeto e gera o pacote (war, jar, ….)
compile = apenas compila o projeto, gerando a saida no diretorio target.
site = compila, empacota o projeto e gera o site do projeto




