SlideShare uma empresa Scribd logo
Maven: Introdução
AVISO
“Este é uma apresentação pessoal. As
opiniões aqui expressadas são de única
responsabilidade minha, e nada referem-se
às da empresa para qual trabalho.”
● Programa há quase 10 anos
● Software Engineer @ Red Hat
● FATEC SJC - UFABC
● Dados Abertos (SJC Digital - sjcdigital.com)
● JUG Vale
Sobre William Antônio Siqueira
Objetivo
Hoje nós vamos:
- Entender a importância da ferramenta Maven e a motivação para sua
existência
- Passar pelos principais conceitos
- Mostrar aplicações com maven
- Uma super básica, o TUINTER
- Uma aplicação pequena: o SorteiaAPP
- Uma média, o Call4Papers
- Uma aplicação avançada: o jBPM
Maven
Ferramenta da Apache Foundation para gerenciamento de projetos
- Padroniza estrutura de projetos
- Controla ciclos de execução (rodar, construir, testar, etc)
- Facilita gerenciamento de bibliotecas usadas pelo projeto
- Pode fazer praticamente tudo através de plugin
Vamos por partes
Vamos fazer um projeto
Você tem uma grande ideia de um projeto que vai mudar o mundo
O projeto vai fazer um monte de coisa como salvar informações, acessar redes
sociais e minerar bitcoin… é um projeto grande
Ninguém desenvolve nada sozinho
Para realizar o seu projeto você pesquisa na internet bibliotecas e descobre
algumas que vão te ajudar: JSalvaCoisas, JRedesSociais e JBitcoin.
Rapidamente no seu computador você baixa cada uma delas e usa em seu
projeto. Por exemplo, um projeto do Eclipse.
Passado uns meses, um colega toma conhecimento, ele se dispõe a ajudar a
criar uma nova funcionalidade. Você manda pra ele o projeto do Eclipse
Tá tudo estranho
O que era pra ser uma ajuda vira uma dor de cabeça! AO importar o projeto um
monte de erro aparece, seu amigo não consegue ajudar. Após um tempo de
sofrimento você lembra que seu amigo também precisa das bibliotecas:
JSalvaCoisas, JRedesSociais e JBitcoin. Ele corre e baixa, muitos erros são
resolvidos, mas ainda sim seu amigo não consegue resolver nada!
As coisas mudam...
Muito tempo depois vocês descobrem que seu amigo baixou outra versão das
bibliotecas JSalvaCoisas, JRedesSociais e JBitcoin que já tinham sido
atualizadas e seu código na verdade usava uma versão antiga, você nem fazia
ideia!
Após descobrir a versão e achar ela na internet, seu amigo consegue finalmente
ajudar você, adiciona imagens legais ao projeto e ele manda pra você de novo o
projeto do Eclipse.
Organizando as coisas
Chega pra você o projeto, ele roda localmente. Você nota que seu amigo colocou
no meio do código imagens espalhadas, junto com arquivos Java, você então cria
um diretório só para imagens e coloca lá, então comunica seu amigo onde ficam
as imagens, na pasta “imagens” agora. Também faz uma estrutura para o projeto.
Você e seu colega se entendem e conseguem juntos rodar o projeto
Nem todo mundo usa o que você usa!
O projeto é um sucesso e com o crescimento novas pessoas começam a
trabalhar com vocês. Logo você descobre que nem todo mundo usa Eclipse e por
isso cria “scripts” que vão compilar os arquivos Java e executar o projeto sem
depender do Eclipse. Você usa Windows, no entanto, alguns usuários de Linux
querem ajudar no projeto, e você vai precisar de arquivos shell para executar no
linux, você está com energia, cria todos os arquivos para todo mundo. Sua equipe
de 5 pessoas consegue trabalhar juntos, sucesso!
Projetos crescem, a bagunça também
Agora você usa dezenas de bibliotecas de diversas versões. Para resolver isso
cria uma pasta compartilhada com todos os arquivos .jar que todo mundo pode
pegar em algum lugar nas nuvens.
Depois de um tempo você nota que alguns arquivos .jar estão duplicados, pois as
bibliotecas que você usa também podem ser usadas por outras pessoas. Alguns
inclusive são duplicados em outros sub-projetos!
O negócio fica pior quando há erros estranhos durante a execução do projeto
como: ClassNotFoundException, ClassCastException (problemas que acontecem
por causa de conflitos de classes carregadas)
Trocar pessoas em um projeto pode não ser fácil
Sua equipe cresceu, algumas pessoas saem do projeto, não querem mais, você
precisa de novos contribuidores e a cada novo contribuidor você precisa que ele
baixe aquele monte de jar repetido, arrume scripts para rodar no computador
dele, entenda a estrutura do projeto… Tempo perdido e desgastante.
O seu projeto vira um fardo
Depois de meses, cheio de JARs, scripts malucos e falta de padrão, hoje seu
projeto é um fardo, bagunçado, ninguém entende e você não sabe mais o que
fazer…
Vamos ver como muitos desses problemas (e muitos outros que não citamos
aqui) poderiam ter sido resolvidos com Maven!
Configuração e estrutura Padronizada com Maven
Quando um projeto é criado utilizando Maven a estrutura e a configuração é
padronizada. Toda configuração acontece em um arquivo chamado pom.xml
que fica na raiz do projeto. Só isso já resolve muito problema
Configuração e estrutura Padronizada com Maven
- Na raiz do projeto sempre terá um pom.xml
- Em src é onde colocamos o código da aplicação:
- src/main/java: Código Java
- src/main/resources: arquivos que podem ser lidos, mas não são .java
- src/test/java: Código de testes com Java
- src/test/resources: Arquivos que que podem ser lidos durante o teste
- Quando o projeto é construído os arquivos vão
para um diretório chamado target
Execução e construção do projeto com Maven
O comando para executar o maven é mvn. Você usa esse comando passando
para o maven o que você quer fazer, o ciclo, podendo chamar um após outro.
Alguns ciclos:
● compile: compila
● package: Empacota o projeto (cria um JAR, WAR, etc)
● install: compila, empacota e instala no repositório local
● clean: Limpa o projeto
● Muitos outros, inclusive de plugins...
Se você não gosta de linha de comando você pode usar IDEs - Todas IDEs
modernas suportam Maven.
Saída do maven
Maven coloca no console tudo o que está fazendo!
O que eu preciso ter dentro do pom.xml
O mais importante é a informação básica do projeto(ID do artefato, grupo e
versão). Mas também você pode adicionar:
● Dependências (bibliotecas que você pode usar)
○ Quando você declara uma dependência você precisa informar também o id, grupo e versão
dela
○ Cada dependência tem um escopo - já falamos disso
● Plugins
○ Os plugins trazem infinitas possibilidades, mas não falaremos deles aqui hoje
● Gerenciamento de dependências
● Criar perfis de execução
Exemplo de pom.xml
Dependências
Dependências são artefatos que você quer usar. Elas têm versão, grupo e ID e
cada dependência pode ter outras, que são também adicionados ao seu projeto,
mas são chamadas de transitivas (podemos excluir dependências transitivas).
● Uma dependência tem escopo, que é a parte do projeto que ela pode ser
adicionada:
○ test: Só quando rodamos o teste
○ compile: Só para compilação
○ provided: significa que ela já está disponível no lugar onde você vai instalar seu projeto (ex.
servidor de aplicação)
○ Outros: runtime, system e import
● Para listar dependência usamos: mvn dependency:tree
● Todas as dependências são também projetos maven que ficam em um
repositório
Que repositório é esse?
● Todo projeto maven depois de construído será salvo no repositório local ou
pode ser configurado para salvar em um servidor de artefatos maven (Como
o Nexus) - é onde ficam as dependências do projeto também;
● Quase toda biblioteca java está no repositório padrão, o maven central. Você
pode configurar qualquer repositório, por exemplo, colocar os projetos de sua
empresa em um Nexus compartilhado e mapear no arquivo settings.xml
○ settings.xml pode ficar na raiz do projeto (.m2/settings.xml) ou na instalação do Maven
● Quando você instala o maven ele baixa as dependência e salva localmente
(na pasta home do usuário no diretório .m2)
● Quando seu repositório está vazio o maven vai baixar coisa por coisa,
dizemos que ele baixa a internet nesse momento
Principal ferramenta para achar bibliotecas
Mais de 12 milhões de artefatos indexados! Procure no buscador nome da
biblioteca + maven e você vai cair em mvnrepository.com
Plugins
Plugins do Maven são poderosos, eles podem fazer coisas como:
● Subir um servidor no momento dos testes
● Chamar um compilador externo
● Verificar se o seu código segue padrões pré definidos
● Alguns Famosos:
○ maven-war-plugin: para gerar arquivos WAR e configurar a geração dos mesmos
○ assembly: permite configurar a criação do arquivo final
○ exec: para executar arquivos Java
○ …
Archetypes
● Archetypes permitem gerar um projeto básico do maven automaticamente
● Alguma API pode ter um archetype para gerar projetos com a estrutura e
alguns arquivos padrões, assim os usuários não precisam configurar
manualmente
Exemplo mais básico de archetype usando a linha de comando:
1. mvn archetype:generate
-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-quickstart
-DarchetypeVersion=1.3
Vantagens do Maven
● Padrão: se você contratar um desenvolvedor no Japão que sabe Maven ele
vai entender seu projeto
● Expansível: Grandes projetos podem usar Maven sem problemas. Exemplo:
os projetos do kiegroup tem mais de 100 mil classes Java e mais de 1500
projetos maven!
○ Embora não explorado na apresentação, o Maven é também ótimo para organizar projetos
hierárquicos com vários módulos
● Flexível: Há plugin para tudo
● Estável: Já é usado há mais de 10 anos
Exemplos
● Gerar projeto com archetype
● Mostrar dependências no repo local
● Mostrar projeto: Tuinter
● Mostrar projeto: SorteaProjeto
● Mostrar Projeto: C4P
● Mostrar projetos do KIE Group
○ Dezenas de desenvolvedores
○ Mais de 100 mil arquivos Java
○ Mais de 1500 projetos Maven.
Dúvidas?
OBRIGADO!

Mais conteúdo relacionado

Mais procurados

Compartilhando experiências em software livre
Compartilhando experiências em software livreCompartilhando experiências em software livre
Compartilhando experiências em software livre
Marcelo Andrade
 
Java, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJava, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a Objetos
João Longo
 
Maven - Aula 01
Maven - Aula 01Maven - Aula 01
Maven - Aula 01
Édipo Daniel Aragão
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
Igor Sobreira
 
Maven - Aula 04
Maven  - Aula 04Maven  - Aula 04
Maven - Aula 04
Édipo Daniel Aragão
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
Maicon Carlos Pereira
 
Maven - Aula 05
Maven - Aula 05Maven - Aula 05
Maven - Aula 05
Édipo Daniel Aragão
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
Diogo Rafael da Silva
 
Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de django
rosenclever
 
Aula maven
Aula   mavenAula   maven
Curso de Grails
Curso de GrailsCurso de Grails
Curso de Grails
Bruno Nascimento
 
Maven - Aula 02
Maven - Aula 02Maven - Aula 02
Maven - Aula 02
Édipo Daniel Aragão
 
Maven - Aula 03
Maven - Aula 03Maven - Aula 03
Maven - Aula 03
Édipo Daniel Aragão
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend Framework
Flávio Lisboa
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
Eduardo Carvalho
 
Introdução ao maven
Introdução ao mavenIntrodução ao maven
Introdução ao maven
Anderson Araújo
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Renato Groff
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
Rafael Carneiro
 
01 java fundamentos
01 java fundamentos01 java fundamentos
01 java fundamentos
Paulo Alves Dos Santos
 
Maven e Nexus. O que são essas ferramentas?
Maven e Nexus. O que são essas ferramentas?Maven e Nexus. O que são essas ferramentas?
Maven e Nexus. O que são essas ferramentas?
Jocsa Rosendo
 

Mais procurados (20)

Compartilhando experiências em software livre
Compartilhando experiências em software livreCompartilhando experiências em software livre
Compartilhando experiências em software livre
 
Java, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJava, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a Objetos
 
Maven - Aula 01
Maven - Aula 01Maven - Aula 01
Maven - Aula 01
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Maven - Aula 04
Maven  - Aula 04Maven  - Aula 04
Maven - Aula 04
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Maven - Aula 05
Maven - Aula 05Maven - Aula 05
Maven - Aula 05
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de django
 
Aula maven
Aula   mavenAula   maven
Aula maven
 
Curso de Grails
Curso de GrailsCurso de Grails
Curso de Grails
 
Maven - Aula 02
Maven - Aula 02Maven - Aula 02
Maven - Aula 02
 
Maven - Aula 03
Maven - Aula 03Maven - Aula 03
Maven - Aula 03
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend Framework
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
 
Introdução ao maven
Introdução ao mavenIntrodução ao maven
Introdução ao maven
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
 
01 java fundamentos
01 java fundamentos01 java fundamentos
01 java fundamentos
 
Maven e Nexus. O que são essas ferramentas?
Maven e Nexus. O que são essas ferramentas?Maven e Nexus. O que são essas ferramentas?
Maven e Nexus. O que são essas ferramentas?
 

Semelhante a Maven: Introdução

Apache maven
Apache mavenApache maven
Apache maven
Rafael Tavares
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátil
Wanderlei Silva do Carmo
 
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO ILIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
Os Fantasmas !
 
Fundamentos Java - 01
Fundamentos Java - 01Fundamentos Java - 01
Fundamentos Java - 01
Daniel Gustavo Bernardo
 
Aula 1a.ppt
Aula 1a.pptAula 1a.ppt
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Vinicius Reis
 
Web Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelWeb Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to Laravel
MozDevz
 
Mastering Laravel
Mastering LaravelMastering Laravel
Mastering Laravel
Abneusa Manuel
 
Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com Maven
Edgar Dantas
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Thiago Sinésio
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
Wilson Lima
 
Plugin Maven no Eclipse
Plugin Maven no EclipsePlugin Maven no Eclipse
Plugin Maven no Eclipse
elievanFPaulino
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
Just Digital
 
Vagrant sti
Vagrant stiVagrant sti
Vagrant sti
Hugo Henley
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
André Luiz Forchesatto
 
Docker
DockerDocker
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engine
Hudson Brendon
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
Francisco Santos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetos
Fer Nando
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
Elisabete Pantoja
 

Semelhante a Maven: Introdução (20)

Apache maven
Apache mavenApache maven
Apache maven
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátil
 
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO ILIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
 
Fundamentos Java - 01
Fundamentos Java - 01Fundamentos Java - 01
Fundamentos Java - 01
 
Aula 1a.ppt
Aula 1a.pptAula 1a.ppt
Aula 1a.ppt
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
 
Web Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelWeb Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to Laravel
 
Mastering Laravel
Mastering LaravelMastering Laravel
Mastering Laravel
 
Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com Maven
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Plugin Maven no Eclipse
Plugin Maven no EclipsePlugin Maven no Eclipse
Plugin Maven no Eclipse
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
Vagrant sti
Vagrant stiVagrant sti
Vagrant sti
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Docker
DockerDocker
Docker
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engine
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetos
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 

Mais de JugVale

Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
JugVale
 
Webdev
WebdevWebdev
Webdev
JugVale
 
Rest
RestRest
Rest
JugVale
 
Introdução ao JEE
Introdução ao JEEIntrodução ao JEE
Introdução ao JEE
JugVale
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)
JugVale
 
Abertura TI No Vale
Abertura TI No ValeAbertura TI No Vale
Abertura TI No Vale
JugVale
 
2º encontro do jug vale
2º encontro do jug vale2º encontro do jug vale
2º encontro do jug vale
JugVale
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
JugVale
 
NoSQL com Cassandra
NoSQL com CassandraNoSQL com Cassandra
NoSQL com Cassandra
JugVale
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
JugVale
 

Mais de JugVale (10)

Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 
Webdev
WebdevWebdev
Webdev
 
Rest
RestRest
Rest
 
Introdução ao JEE
Introdução ao JEEIntrodução ao JEE
Introdução ao JEE
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)
 
Abertura TI No Vale
Abertura TI No ValeAbertura TI No Vale
Abertura TI No Vale
 
2º encontro do jug vale
2º encontro do jug vale2º encontro do jug vale
2º encontro do jug vale
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
NoSQL com Cassandra
NoSQL com CassandraNoSQL com Cassandra
NoSQL com Cassandra
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
 

Maven: Introdução

  • 2. AVISO “Este é uma apresentação pessoal. As opiniões aqui expressadas são de única responsabilidade minha, e nada referem-se às da empresa para qual trabalho.”
  • 3. ● Programa há quase 10 anos ● Software Engineer @ Red Hat ● FATEC SJC - UFABC ● Dados Abertos (SJC Digital - sjcdigital.com) ● JUG Vale Sobre William Antônio Siqueira
  • 4. Objetivo Hoje nós vamos: - Entender a importância da ferramenta Maven e a motivação para sua existência - Passar pelos principais conceitos - Mostrar aplicações com maven - Uma super básica, o TUINTER - Uma aplicação pequena: o SorteiaAPP - Uma média, o Call4Papers - Uma aplicação avançada: o jBPM
  • 5. Maven Ferramenta da Apache Foundation para gerenciamento de projetos - Padroniza estrutura de projetos - Controla ciclos de execução (rodar, construir, testar, etc) - Facilita gerenciamento de bibliotecas usadas pelo projeto - Pode fazer praticamente tudo através de plugin
  • 7. Vamos fazer um projeto Você tem uma grande ideia de um projeto que vai mudar o mundo O projeto vai fazer um monte de coisa como salvar informações, acessar redes sociais e minerar bitcoin… é um projeto grande
  • 8. Ninguém desenvolve nada sozinho Para realizar o seu projeto você pesquisa na internet bibliotecas e descobre algumas que vão te ajudar: JSalvaCoisas, JRedesSociais e JBitcoin. Rapidamente no seu computador você baixa cada uma delas e usa em seu projeto. Por exemplo, um projeto do Eclipse. Passado uns meses, um colega toma conhecimento, ele se dispõe a ajudar a criar uma nova funcionalidade. Você manda pra ele o projeto do Eclipse
  • 9. Tá tudo estranho O que era pra ser uma ajuda vira uma dor de cabeça! AO importar o projeto um monte de erro aparece, seu amigo não consegue ajudar. Após um tempo de sofrimento você lembra que seu amigo também precisa das bibliotecas: JSalvaCoisas, JRedesSociais e JBitcoin. Ele corre e baixa, muitos erros são resolvidos, mas ainda sim seu amigo não consegue resolver nada!
  • 10. As coisas mudam... Muito tempo depois vocês descobrem que seu amigo baixou outra versão das bibliotecas JSalvaCoisas, JRedesSociais e JBitcoin que já tinham sido atualizadas e seu código na verdade usava uma versão antiga, você nem fazia ideia! Após descobrir a versão e achar ela na internet, seu amigo consegue finalmente ajudar você, adiciona imagens legais ao projeto e ele manda pra você de novo o projeto do Eclipse.
  • 11. Organizando as coisas Chega pra você o projeto, ele roda localmente. Você nota que seu amigo colocou no meio do código imagens espalhadas, junto com arquivos Java, você então cria um diretório só para imagens e coloca lá, então comunica seu amigo onde ficam as imagens, na pasta “imagens” agora. Também faz uma estrutura para o projeto. Você e seu colega se entendem e conseguem juntos rodar o projeto
  • 12. Nem todo mundo usa o que você usa! O projeto é um sucesso e com o crescimento novas pessoas começam a trabalhar com vocês. Logo você descobre que nem todo mundo usa Eclipse e por isso cria “scripts” que vão compilar os arquivos Java e executar o projeto sem depender do Eclipse. Você usa Windows, no entanto, alguns usuários de Linux querem ajudar no projeto, e você vai precisar de arquivos shell para executar no linux, você está com energia, cria todos os arquivos para todo mundo. Sua equipe de 5 pessoas consegue trabalhar juntos, sucesso!
  • 13. Projetos crescem, a bagunça também Agora você usa dezenas de bibliotecas de diversas versões. Para resolver isso cria uma pasta compartilhada com todos os arquivos .jar que todo mundo pode pegar em algum lugar nas nuvens. Depois de um tempo você nota que alguns arquivos .jar estão duplicados, pois as bibliotecas que você usa também podem ser usadas por outras pessoas. Alguns inclusive são duplicados em outros sub-projetos! O negócio fica pior quando há erros estranhos durante a execução do projeto como: ClassNotFoundException, ClassCastException (problemas que acontecem por causa de conflitos de classes carregadas)
  • 14. Trocar pessoas em um projeto pode não ser fácil Sua equipe cresceu, algumas pessoas saem do projeto, não querem mais, você precisa de novos contribuidores e a cada novo contribuidor você precisa que ele baixe aquele monte de jar repetido, arrume scripts para rodar no computador dele, entenda a estrutura do projeto… Tempo perdido e desgastante.
  • 15. O seu projeto vira um fardo Depois de meses, cheio de JARs, scripts malucos e falta de padrão, hoje seu projeto é um fardo, bagunçado, ninguém entende e você não sabe mais o que fazer… Vamos ver como muitos desses problemas (e muitos outros que não citamos aqui) poderiam ter sido resolvidos com Maven!
  • 16. Configuração e estrutura Padronizada com Maven Quando um projeto é criado utilizando Maven a estrutura e a configuração é padronizada. Toda configuração acontece em um arquivo chamado pom.xml que fica na raiz do projeto. Só isso já resolve muito problema
  • 17. Configuração e estrutura Padronizada com Maven - Na raiz do projeto sempre terá um pom.xml - Em src é onde colocamos o código da aplicação: - src/main/java: Código Java - src/main/resources: arquivos que podem ser lidos, mas não são .java - src/test/java: Código de testes com Java - src/test/resources: Arquivos que que podem ser lidos durante o teste - Quando o projeto é construído os arquivos vão para um diretório chamado target
  • 18. Execução e construção do projeto com Maven O comando para executar o maven é mvn. Você usa esse comando passando para o maven o que você quer fazer, o ciclo, podendo chamar um após outro. Alguns ciclos: ● compile: compila ● package: Empacota o projeto (cria um JAR, WAR, etc) ● install: compila, empacota e instala no repositório local ● clean: Limpa o projeto ● Muitos outros, inclusive de plugins... Se você não gosta de linha de comando você pode usar IDEs - Todas IDEs modernas suportam Maven.
  • 19. Saída do maven Maven coloca no console tudo o que está fazendo!
  • 20. O que eu preciso ter dentro do pom.xml O mais importante é a informação básica do projeto(ID do artefato, grupo e versão). Mas também você pode adicionar: ● Dependências (bibliotecas que você pode usar) ○ Quando você declara uma dependência você precisa informar também o id, grupo e versão dela ○ Cada dependência tem um escopo - já falamos disso ● Plugins ○ Os plugins trazem infinitas possibilidades, mas não falaremos deles aqui hoje ● Gerenciamento de dependências ● Criar perfis de execução
  • 22. Dependências Dependências são artefatos que você quer usar. Elas têm versão, grupo e ID e cada dependência pode ter outras, que são também adicionados ao seu projeto, mas são chamadas de transitivas (podemos excluir dependências transitivas). ● Uma dependência tem escopo, que é a parte do projeto que ela pode ser adicionada: ○ test: Só quando rodamos o teste ○ compile: Só para compilação ○ provided: significa que ela já está disponível no lugar onde você vai instalar seu projeto (ex. servidor de aplicação) ○ Outros: runtime, system e import ● Para listar dependência usamos: mvn dependency:tree ● Todas as dependências são também projetos maven que ficam em um repositório
  • 23. Que repositório é esse? ● Todo projeto maven depois de construído será salvo no repositório local ou pode ser configurado para salvar em um servidor de artefatos maven (Como o Nexus) - é onde ficam as dependências do projeto também; ● Quase toda biblioteca java está no repositório padrão, o maven central. Você pode configurar qualquer repositório, por exemplo, colocar os projetos de sua empresa em um Nexus compartilhado e mapear no arquivo settings.xml ○ settings.xml pode ficar na raiz do projeto (.m2/settings.xml) ou na instalação do Maven ● Quando você instala o maven ele baixa as dependência e salva localmente (na pasta home do usuário no diretório .m2) ● Quando seu repositório está vazio o maven vai baixar coisa por coisa, dizemos que ele baixa a internet nesse momento
  • 24. Principal ferramenta para achar bibliotecas Mais de 12 milhões de artefatos indexados! Procure no buscador nome da biblioteca + maven e você vai cair em mvnrepository.com
  • 25. Plugins Plugins do Maven são poderosos, eles podem fazer coisas como: ● Subir um servidor no momento dos testes ● Chamar um compilador externo ● Verificar se o seu código segue padrões pré definidos ● Alguns Famosos: ○ maven-war-plugin: para gerar arquivos WAR e configurar a geração dos mesmos ○ assembly: permite configurar a criação do arquivo final ○ exec: para executar arquivos Java ○ …
  • 26. Archetypes ● Archetypes permitem gerar um projeto básico do maven automaticamente ● Alguma API pode ter um archetype para gerar projetos com a estrutura e alguns arquivos padrões, assim os usuários não precisam configurar manualmente Exemplo mais básico de archetype usando a linha de comando: 1. mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.3
  • 27. Vantagens do Maven ● Padrão: se você contratar um desenvolvedor no Japão que sabe Maven ele vai entender seu projeto ● Expansível: Grandes projetos podem usar Maven sem problemas. Exemplo: os projetos do kiegroup tem mais de 100 mil classes Java e mais de 1500 projetos maven! ○ Embora não explorado na apresentação, o Maven é também ótimo para organizar projetos hierárquicos com vários módulos ● Flexível: Há plugin para tudo ● Estável: Já é usado há mais de 10 anos
  • 28. Exemplos ● Gerar projeto com archetype ● Mostrar dependências no repo local ● Mostrar projeto: Tuinter ● Mostrar projeto: SorteaProjeto ● Mostrar Projeto: C4P ● Mostrar projetos do KIE Group ○ Dezenas de desenvolvedores ○ Mais de 100 mil arquivos Java ○ Mais de 1500 projetos Maven.