Começou no projeto Jakarta Alexandria em 2001
Primeira versão lançada em 2004
Maven 2.0 saiu em 2005
Versão 3.0 publicada em 2010
1 milhão de projetos Maven em 2012, 2 milhões em 2014
Em 2017 esse número passou de 10 milhões
Atualmente esse número está em 14 milhões
As configurações são armazenadas no arquivo settings.xml que se encontra na pasta .m2 do diretório home ou de instalação do Maven:
<settings>
<mirrors/>
<servers/>
<proxies/>
<profiles/>
<activeProfiles/>
<localRepository/>
<interactiveMode/>
<offline/>
<pluginGroups/>
</settings>

3 Ciclos de vida distintos:
Clean
Default
Site
|
|
Project Object Model armazenado no pom.xml.
Têm pelo menos as seguintes propriedades (Coordenadas):
GroupId
ArtifactId
Version
Representado por: GroupId:ArtifactId:Version
Principais seções do POM:
Package
Properties
Build/Plugins
Dependencies
Profiles
Modules
O elemento package determina o tipo de pacote do projeto.
Alguns tipos de pacotes válidos são: jar, war, ear e pom
Outros podem ser adicionados com plugins, por exemplo jpi para Plugins Jenkins
properties são variáveis que podem ser utilizadas no pom com a sintaxe: ${propriedade}
properties
Algumas propriedades padrão do Maven:
project.build.sourceEncoding
maven.compiler.source
maven.compiler.target

Limitam a transitividade das dependências
compile | Escopo padrão, disponível nos Classpaths do projeto |
provided | Parecido com compile, mas não copiado no artefato final |
runtime | Disponível no classpath de testes e execução mas não de compilação |
test | Não requerida para usa normal da aplicação, somente para testes |
system | Parecido com provided mas deve fornecer o Jar |
import | Utilizado somente com artefatos de tipo pom |
Existe a tag optional declarada na tag dependency:
<optional>true</optional>
Para remover dependências existe a tag exclusions:
<exclusions>
<exclusion>
<groupId>sample.ProjectB</groupId>
<artifactId>Project-B</artifactId>
</exclusion>
</exclusions>
Lista de dependências: list e tree
$ mvn dependency:list
$ mvn dependency:tree
Análise de dependências
$ mvn dependency:list
$ mvn dependency:tree[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< br.com.basis.treinamento:parent >-------------------
[INFO] Building parent 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ parent ---
[INFO] br.com.basis.treinamento:parent:jar:1.0.0
[INFO] +- commons-beanutils:commons-beanutils:jar:1.9.3:compile
[INFO] | +- commons-logging:commons-logging:jar:1.2:compile
[INFO] | \- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] \- io.jsonwebtoken:jjwt-impl:jar:0.10.5:compile
[INFO] \- io.jsonwebtoken:jjwt-api:jar:0.10.5:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.810 s
[INFO] Finished at: 2019-05-06T17:24:20-03:00
[INFO] ------------------------------------------------------------------------Estendem o Ciclo de Vida Maven
Operações comuns são implementadas com Plugins
Tem configurações próprias
Tem objetivos (goals)
Objetivos vinculados a etapas do Ciclo de Vida
Configurações globais ou por execução
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<!-- Configurações específicas -->
</configuration>
</execution>
</executions>$ mvn help:describe \
-Dplugin=org.apache.maven.plugins:maven-compiler-plugin:3.8.1
$ mvn help:describe -Ddetail -Dgoal=compile \
-Dplugin=org.apache.maven.plugins:maven-compiler-plugin:3.8.1Perfis (profiles) permitem parametrização condicional
Deixa as builds portáveis
Podem ser definidos:
localmente no projeto
globalmente por usuário
globalmente por instalação de Maven
Os profiles podem ser ativados por:
Explicitamente (paramêtro -P)
No settings.xml com a tag activeProfiles
Baseado em variáveis de ambiente
Sistema Operacional
Presença ou ausência de arquivos
Os seguintes elementos podem ser configurados:
|
|
Os projetos multi-módulos Maven são gerenciados pelo Reactor que:
Junta os módulos a construir
Ordena os módulos
Executa a construção dos módulos na ordem
A ordem de construção é resolvida assim:
Um módulo dependendo de outro no mesmo projeto
Um plugin utilizado como declaração por um outro módulo
Um plugin utilizado como dependencia de outro módulo
Uma extensão utilizada por um módulo do projeto
A ordem de declaração no elemento <modules>
pluginManagement e dependencyManagement servem a centralizar informações sobre dependências
Os plugins e dependências declaradas nessas tags servem a definir uma configuração padrão.
Os módulos herdam das propriedades do parent.
Elementos herdados do Parent:
Dependências
Listas de Plugins
Execução de Plugins com os ids
Configuração de Plugin
Resources
Developers and contributors
Os comandos maven executados na raiz do projeto são executados em todos os módulos
A opção -pl permite construir módulos específicos:
$ mvn clean install -pl modulo-a -am
Gera o pom.xml final, efetivamente executado, resolvendo propriedades herdadas e mescladas
$ mvn help:effective-pom