Para quem está acostumado a trabalhar com projetos que demandam a importação de muitas bibliotecas e suas dependências, sabe o quão chato e demorado se torna apenas realizar essas importações. Muita das vezes perde-se um longo tempo apenas fazendo importações, coisa que não deveria acontecer, já que o foco do projeto é o negócio e não a tecnologia, esta está apenas para auxiliar na conclusão do mesmo e não atrapalhar.

Log4j, Spring, Hibernate, JSF2, MySQL, JSTL e quantas mais ferramentas você precisar serão necessárias importar, e o maior problema é que cada uma dessas ferramentas tem inúmeras dependências. Ainda temos outro problema, quando vamos criar outro projeto temos que importar tudo novamente, organizar tudo, o que torna um retrabalho oneroso e dispendioso.

Então como resolver isso ? MAVEN. Através dessa ferramenta conseguimos apenas em 1 arquivo (pom.xml) dizer tudo que nosso projeto precisa e deixar que ele faça o resto do trabalho para nós. E quando vamos criar um novo projeto, basta copiar nosso pom.xml e pronto, temos tudo necessário no novo projeto.

Neste artigo vamos ver como criar um projeto do zero utilizando Maven, passo a passo. Mas como pré-requisito para este artigo você já deve ter instalado o JBoss Tool e o Eclipse. O JBoss Tool para quem ainda não conhece é uma poderosa ferramenta que ajuda na criação de diversos projetos e tem muitas peculiaridades que com certeza vão fazer diferença na hora que você for desenvolver, para instalá-lo basta ir até Help->Eclipse Marketplace e procurar pelo JBoss Tool para a sua versão do eclipse.

Iniciando projeto Maven

Com o JBoss Tool instalado vamos iniciar a criação do nosso projeto. Vá até File -> New -> Other, ou simplesmente CTRL + N. No campo de pesquisa digite: Maven Project. Clique em Maven Project e depois next, assim como na figura 1.

Escolhendo Maven Project

Figura 1: Escolhendo Maven Project

Na próxima tela não mexa em nada, apenas clique em Next novamente. E você será direcionado para uma tela a fim de escolher o arquétipo do seu projeto. Uma coisa interessante do Maven além de gerenciar toda as dependências do seu projeto é a criação de uma estrutura de diretório padronizada, ou seja, se você está trabalhando com um projeto Web terá um arquétipo próprio para seu projeto, e todos os outros desenvolvedores poderão escolher o mesmo arquétipo.

Veja o nível de aplicabilidade disso: Independente do projeto que você ver, se ele tiver o mesmo arquétipo que o seu, você saberá exatamente onde se encontram cada arquivo, ou seja, a produtividade neste caso é muito melhor do que criar sua própria estrutura de diretórios, a lei é: Padronize sempre que puder.

Enfim, na tela de escolha do arquétipo vamos digitar “maven-archetype-webapp” e selecionar a única opção que deverá aparecer e clicar em Next, assim como na figura 2.

Escolhendo o Arquétipo

Figura 2: Escolhendo o Arquétipo

A próxima tela você configurará o Group ID, Artifact ID e Version. O Grupo ID pode ser o domínio da sua aplicação, geralmente: br.com.meuprojeto. O Artifact ID é o nome final que ficará o seu Jar, ou seja, o nome da sua aplicação, por exemplo: Projeto002 e a Version é a versão correspondente do mesmo, após isso clique em Finish, você deverá esperar o Maven criar todo seu projeto para continuarmos.

Você verá algo como a estrutura mostrada na figura 3, fique atento a um arquivo chamado pom.xml, é nele que faremos toda a configuração necessária.

Estrutura criada pelo Maven

Figura 3: Estrutura criada pelo Maven

Lembre-se de uma coisa: Nosso arquétipo escolhido foi próprio para Web, de acordo com sua necessidade fique a vontade para mudar o arquétipo na hora de criação do projeto.

Por fim, teremos que agora fazer a configuração do pom.xml O arquivo pom.xml contém todas as dependências do nosso projeto, ou seja, tudo que ele precisa para funcionar. Vamos aqui simular que nosso projeto precisa dos seguintes frameworks e ferramentas: Hibernate, Spring, JSF2 e Conector MySQL. Perceba que em cada um destes temos várias outras dependências, são as dependências das dependências, mas isso não nos importa deixe que o Maven vai se encarregar de procurar quem está faltando para o Hibernate funcionar, por exemplo.

Na listagem 1 você verá nosso pom.xml completo com todas as dependências.

Listagem 1: 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.meuprojeto</groupId>
	<artifactId>Projeto002</artifactId>
	<packaging>war</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>Projeto002 App</name>
	<url>http://maven.apache.org</url>
	<properties>
		<org.springframework.version>3.0.6.RELEASE
		</org.springframework.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-api</artifactId>
			<version>2.1.6</version>
		</dependency>
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-impl</artifactId>
			<version>2.1.6</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>javax.persistence</groupId>
			<artifactId>persistence-api</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>3.4.0.GA</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>4.0.2.GA</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.15</version>
		</dependency>
		<dependency>
			<groupId>cglib</groupId>
			<artifactId>cglib-nodep</artifactId>
			<version>2.2.2</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.6.1</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-simple</artifactId>
			<version>1.6.1</version>
		</dependency>
		<dependency>
			<groupId>asm</groupId>
			<artifactId>asm-commons</artifactId>
			<version>3.1</version>
		</dependency>
	</dependencies>

	<build>
		<finalName>Projeto002</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-pmd-plugin</artifactId>
				<version>2.5</version>
				<configuration>
					<targetJdk>1.6</targetJdk>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

Quando você colocar a configuração acima no pom.xml, automaticamente será feito o download de todo o conteúdo necessário e suas dependências para uma pasta chamada “.m2”, própria do Maven.

Geralmente ela fica dentro da raiz da pasta do usuário.

Podem ocorrer alguns problemas na hora de realizar o download dessas dependências, por falha no download, conexão com internet ou outro problema qualquer, para realizar o download após o erro basta forçar o “update” clicando com o botão direito do mouse no pom.xml e forçando a atualização das dependências.

CONCLUSÃO

Após iniciar o desenvolvendo de projetos com Maven, você notará rapidamente a facilidade em começar a trabalhar literalmente no projeto e não se preocupar com coisas que verdadeiramente não deveriam ser preocupação do Analista. O Maven aumenta e muito a produtividade diária de desenvolvimento, e com certeza já está difundido nas grandes fábricas de software.

Veja também