Olá Pessoal, tudo bom?
O post de hoje é relacionado a criação de um projeto básico em Java utilizando o controlador de dependências de bibliotecas Maven. Assim, esse será um post básico pois a partir dele podemos explorar a criação de outros tipos de projetos a partir desse controlador. Iremos falar um pouco sobre o que é o Maven e qual é a sua utilidade. Veja na continuação desse post…
Maven – definição
Em todo projeto de desenvolvimento de software nós encontramos um problema básico que é o de configuração de um ambiente para os desenvolvedores. Assim o primeiro ponto de prover as bibliotecas necessárias e suas dependências sempre foi uma atividade complexa.
O gerenciador Maven, foi criado pela Apache Foundation, e sua palavra, no idioma Judeu, significa acumulador de conhecimento. O objetivo básico do Maven é permitir aos desenvolvedores um conjunto completo de desenvolvimento com um esforço pequeno e em um período de tempo muito curto. Além disso o Maven pode ajudar a gerenciar os seguintes pontos de um projeto:
- Fazer o processo de build mais simples e fácil
- Prover um sistema uniforme de geração de builds
- Prover as informações do projeto com qualidade
- Fornecer padrões para as melhores práticas de desenvolvimento
- Permitir uma transparência na migração de novas funcionalidades
O Maven em seu objetivo básico permite que possamos adicionar novas bibliotecas, o qual o Maven dá o nome de Dependências, ao um projeto Java Maven previamente criado. Assim vamos agora ver como criar um projeto básico dentro da IDE Eclipse. A partir deste, podemos, em próximos artigos, explorar a adição de novas dependências a este projeto básico.
Criação de um Projeto Básico no Eclipse.
O projeto que iremos criar a seguir não possui bibliotecas além da biblioteca de testes JUnit. Esse projeto foi criado no Eclipse Neon 2, mas a forma de criação é padrão para outras versões do Eclipse. A primeira coisa é abrir o Eclipse em um workspace escolhido, normalmente quando inicio um projeto do zero crio um workspace novo a fim de diminuir a chance de problemas entre projetos. Com o Eclipse carregado, vá a view Package Explorer clicar com o botão direito e escolher a opção New > Project…, como mostra a Figura 02.
O Eclipse irá abrir uma popup de título New Project. Existe uma input text nessa popup, comece a digitar a palavra Maven, irão restar apenas as 3 opções conforme mostra a Figura 03.
Escolha a opção Maven Project e clique no botão Next >, o Eclipse irá abrir uma popup com o título New Maven Project, conforme mostra a Figura 04, a opção Use default Workspace location já vem pré selecionada e iremos deixar assim, pois queremos que o projeto seja criado dentro do workspace que nós acabamos de criar.
Clique no botão Next > e o Eclipse irá para a segunda parte dessa popup, conforme mostra a Figura 05. Nessa parte é possível escolher um Archetype para criar o projeto Maven. Um Archetype é uma pré configuração básica de um projeto, existem archetypes para projetos web, java swing, portlets e outros mais. Iremos escolher o archetype maven-archetype-quickstart, o qual configura o projeto para ser um projeto Maven, mas não insere várias dependências que seriam inúteis para nós.
Após selecionar o archetype, clique no botão Next > e o Eclipse irá apresentar a ultima parte dessa popup, conforme mostra a Figura 06. Essa parte possui algumas input text a serem preenchidas. O Item Group Id deve ser preenchido com o package default de seus projetos, como por exemplo a url invertida do site da sua empresa. A seguir no item Artifact Id, deve ser inserido o nome do seu projeto, por exemplo, seminariosCientificos. No campo Version deve ser escolhida a versão que o projeto se encontra. Caso existam outras propriedades a serem adicionadas ao projeto, pode-se utilizar o botão Add…
Clique no botão Finish para que o Eclipse crie seu projeto. O resultado final é visualizado na Figura 07.
Apresentando o Projeto Criado
É possível visualizar que o Eclipse criou toda a estrutura básica para o Projeto. Já criou uma pasta para armazenamento dos códigos do projeto (src/main/java) com o pacote mencionado anteriormente. Uma pasta para armazenamento dos testes unitários (src/test/java). Criou um arquivo pom.xml (Project Object Model) que contém todas as características básicas do Projeto Maven.
Pasta src/main/java
Dentro dessa pasta foi criado um package br.com.mauda.seminariosCientificos e dentro deste uma classe java chamada App.java. Essa classe possui um hello world apenas para indicar que a criação deu certo, conforme mostra o código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package br.com.mauda.seminariosCientificos; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } } |
Pasta src/test/java
Dentro dessa pasta foi criado um package br.com.mauda.seminariosCientificos e dentro deste uma classe java chamada AppTest.java. Essa classe possui três métodos de teste unitários, muito simples, apenas para indicar novamente que a configuração deu certo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package br.com.mauda.seminariosCientificos; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** * Unit test for simple App. */ public class AppTest extends TestCase { /** * Create the test case * * @param testName name of the test case */ public AppTest( String testName ) { super( testName ); } /** * @return the suite of tests being tested */ public static Test suite() { return new TestSuite( AppTest.class ); } /** * Rigourous Test :-) */ public void testApp() { assertTrue( true ); } } |
Arquivo pom.xml
Por fim o arquivo mais importante de um projeto Maven, o arquivo pom.xml (Project Object Model). No nosso caso o pom armazena as informações de groupId, artifactId, version, packaging, name, url.
Seu sourceEncoding é UTF-8 e possui a dependência do JUnit 3.8.1. Dentro da tag dependencies poderão ser armazenadas novas dependências de bibliotecas, o que veremos no futuro. Abaixo o código completo do arquivo pom.xml.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>br.com.mauda</groupId> <artifactId>seminariosCientificos</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>seminariosCientificos</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> |
Alterando o arquivo pom.xml para padronizar
Existem algumas alterações básicas no arquivo pom que serão estendidas a qualquer dependência nova que possamos vir a adicionar no futuro. Assim o arquivo pom.xml será alterado para contemplar a versão Java 8, adicionando ao arquivo uma tag chamada build para o plugin de compilação do Maven, fazendo com que o byte code gerado esteja na versão 8 do Java, conforme as linhas destacadas abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>br.com.mauda</groupId> <artifactId>seminariosCientificos</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>seminariosCientificos</name> <url>http://maven.apache.org</url> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> |
Além desse aspecto de compilação do Java, vamos mudar a versão da biblioteca JUnit para a versão 4.12, pois utilizaremos testes unitários com annotations mais recentes do JUnit 4. O código destacado mostra essa modificação:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>br.com.mauda</groupId> <artifactId>seminariosCientificos</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>seminariosCientificos</name> <url>http://maven.apache.org</url> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project> |
finally{
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Rildson Mendes says
Parabéns Everson! Eu sou novo nessa área e tive que começar a programar na empresa onde trabalho sem conhecer “o que é o MAVEN?”, mas só com essa pequena introdução já posso ter ideia de como o projeto começou e desenvolveu-se.
Mauda says
Olá Rildson, tudo bom?
Que bom que te ajudou a esclareceu algumas coisas.
Existe várias continuações desse artigo para inserir outras dependências confira lá.
Falta ainda fazer um artigo explicando um pouco melhor sobre maven. Está na minha lista. 😉
Qualquer coisa estamos aqui!
Obrigado.
CEZAR GOMES says
Hoje, este artigo vai me ajudar novamente!! Parabéns Mauda!
Mauda says
Olá Cezar, tudo bom?
Massa! Boa sorte ai!
Obrigado!
Yara says
Realmente.. este artigo é muito didático. Adorei a explicação!
Mauda says
Olá Yara, tudo bom?
Obrigado pelo feedback!
Qualquer duvida estamos aqui!
Obrigado.
CEZAR SILVA GOMES says
Tava procurando isso. Valeu Mauda!
Mauda says
Olá Cezar, tudo bom?
Legal! Precisando estamos aqui!
Abs!
Luiz Lima says
Mauda, li o artigo pelo celular e ficou muito claro.
Parabéns,
Luiz Lima
Mauda says
Olá Luiz, tudo bom?
Obrigado pelo feedback!
Precisando estamos aqui!
Abraços!
Thiago says
Olá ! Um dos melhores blogs sobre o tema. Parabéns. Tenho várias dúvidas. A primeira é em relação as versões, posso pegar a versão mais atualizada de todas as ferramentas ? Última versão do eclipse, java, jboss, jsf, … . Ou cada versão é compatível com outra específica ? Para as configurações dos arquivos web.xml, faces-config e pom.xml, aonde eu consigo documentação mais atualizada ? Em todas as ide’s o processo é o mesmo ? Pq parece que em cada uma o resultado muda, mas uma hora o erro aparece igual. Como saber as dependências corretas ?
Mauda says
Olá Thiago, tudo bem?
Obrigado pelo elogio.
Sobre as dúvidas. Sim é possível pegar versões mais atualizadas. O problema só seria a compatibilidade entre elas.
Eclipse pode ser pego a ultima versão sem problemas.
Java, JBoss, Jsf e outras dependencias devem ser avaliadas de acordo com o seu projeto, evitando incompatibilidades.
Para os arquivos xml citados depende do que você deseja fazer em seu projeto, por exemplo, quer atuar com JSF, vai precisar ver o web.xml, faces e talvez as dependencias que estão no pom relacionadas ao JSF. Tudo isso você poderá, por exemplo, olhar as especificações da Enterprise editon (https://javaee.github.io/javaserverfaces-spec/)
Cada IDE possui processos diferentes, mas certas ferramentas são iguais, por exemplo, a configuração de dependências realizada via Maven é única para qualquer IDE.
No mais, acredito que você está com várias dúvidas que não são tão relacionadas entre si. Se você estiver iniciando no mundo da programação vá aprendendo as coisas devagar, tentando entender as informações que você está recebendo.
Precisando estamos por aqui.
Obrigado.