<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fh="http://purl.org/syndication/history/1.0"><channel><title>SalvaAí | Artigos</title><description>Artigos, manuais e notícias comentadas por João Pedro Ramos Campêlo: Java, tecnologia e o que mais valer a pena salvar.</description><link>https://www.salvaai.com.br/</link><language>pt-BR</language><fh:complete/><atom:link rel="self" href="https://www.salvaai.com.br/artigos/rss.xml"/><item><title>Bem-vindo ao SalvaAí</title><link>https://www.salvaai.com.br/artigos/bem-vindo/</link><guid isPermaLink="true">https://www.salvaai.com.br/artigos/bem-vindo/</guid><description>O SalvaAí é o meu portal para artigos, manuais e comentários sobre tecnologia e o que mais valer a pena salvar.</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;O &lt;strong&gt;SalvaAí&lt;/strong&gt; é o meu portal para artigos, manuais e comentários sobre tecnologia e o que mais valer a pena salvar.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;o-que-você-vai-encontrar&quot;&gt;O que você vai encontrar&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.salvaai.com.br/artigos/&quot;&gt;Artigos&lt;/a&gt;&lt;/strong&gt;: textos sobre Java e tecnologia, comentários sobre notícias e opiniões.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manuais&lt;/strong&gt;: guias sobre temas específicos, organizados para consultar sempre que precisar.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;quem-sou-eu&quot;&gt;Quem sou eu?&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Sou João Pedro Ramos Campêlo, de Recife. Sou formado em Análise e Desenvolvimento de Sistemas e gosto do ponto em que tecnologia e finanças se encontram.&lt;/p&gt;
&lt;p&gt;Passei quatro anos na TOTVS, onde trabalhei com clientes de diversos setores. Foi ali que aprendi a traduzir regra de negócio em solução técnica e a conversar com quem não é da área de tecnologia, e foi ali também que comecei a desenvolver, por iniciativa própria, em ADVPL.&lt;/p&gt;
&lt;p&gt;Meu foco de estudo e de construção é backend em Java, com Spring Boot, APIs REST e banco de dados relacional. Fora do trabalho, desenvolvo dois projetos próprios. O Whallet (whallet.com.br) é uma plataforma de gestão financeira para MEIs e pequenas empresas, que já está no ar com usuários acessando. O WhalletRoute é uma plataforma de roteirização e gestão de cargas, ainda em construção.&lt;/p&gt;
&lt;p&gt;Também faço pós-graduação em Arquitetura de Sistemas na FIAP, e boa parte dos temas daqui vem dessa rotina.&lt;/p&gt;
&lt;p&gt;O SalvaAí nasceu disso. Escrevo para fixar o que estudo e deixo registrado o que pode ajudar quem está no mesmo caminho.&lt;/p&gt;
&lt;p&gt;Use a busca (tecla &lt;kbd&gt;/&lt;/kbd&gt;) ou navegue pelos temas para encontrar o que procura. Para acompanhar as novidades, assine o &lt;a href=&quot;https://www.salvaai.com.br/artigos/rss.xml&quot;&gt;RSS&lt;/a&gt;.&lt;/p&gt;
</content:encoded><category>SalvaAí</category></item><item><title>Maven, o nosso orquestrador</title><link>https://www.salvaai.com.br/artigos/java/maven/</link><guid isPermaLink="true">https://www.salvaai.com.br/artigos/java/maven/</guid><description>Se você já viu o pom.xml mas nunca entendeu o que significa, vem comigo!</description><pubDate>Sun, 21 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h1 id=&quot;maven-o-que-é-e-por-que-todo-desenvolvedor-java-deveria-conhecê-lo&quot;&gt;Maven: o que é e por que todo desenvolvedor Java deveria conhecê-lo&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Provavelmente já encontrou um arquivo chamado &lt;code dir=&quot;auto&quot;&gt;pom.xml&lt;/code&gt; em algum projeto.&lt;/p&gt;
&lt;p&gt;Talvez também tenha visto comandos como:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clean&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;ou:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spring-boot:run&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Mas afinal, &lt;strong&gt;o que é o Maven?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;De forma simples, o &lt;strong&gt;Apache Maven é uma ferramenta de automação de build e gerenciamento de projetos Java&lt;/strong&gt;. Ele ajuda a baixar bibliotecas, compilar o código, executar testes, empacotar a aplicação e até publicar artefatos.&lt;/p&gt;
&lt;p&gt;Mas essa definição ainda não explica por que ele é tão presente no ecossistema Java.&lt;/p&gt;
&lt;p&gt;Para entender isso, precisamos voltar um pouco.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;o-problema-que-o-maven-resolve&quot;&gt;O problema que o Maven resolve&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Imagine que você está criando uma API Java.&lt;/p&gt;
&lt;p&gt;Seu projeto precisa de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Spring Boot - Facilita a criação de aplicações independentes;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PostgreSQL - Gerenciamento de banco de dados relacional;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JUnit - Framework padrão para testes unitários em Java;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mockito - Biblioteca de simulação para Java;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jackson - Biblioteca Java para processamento de dados JSON;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hibernate - Framework de mapeamento (ORM) para Java.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Todas essas bibliotecas são arquivos &lt;code dir=&quot;auto&quot;&gt;.jar&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Sem uma ferramenta de gerenciamento de dependências, você teria que:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;procurar cada biblioteca;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;baixar os arquivos &lt;code dir=&quot;auto&quot;&gt;.jar&lt;/code&gt;;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;colocá-los no projeto;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;descobrir quais outras bibliotecas elas precisam;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;resolver conflitos entre versões;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;configurar o classpath;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;repetir tudo isso quando alguma biblioteca fosse atualizada.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;E aqui aparece um problema ainda maior.&lt;/p&gt;
&lt;p&gt;Imagine que o Spring Boot dependa de uma biblioteca A, que depende da biblioteca B, que depende da biblioteca C.&lt;/p&gt;
&lt;p&gt;Você realmente quer descobrir e baixar todas essas dependências manualmente?&lt;/p&gt;
&lt;p&gt;É justamente nesse tipo de situação que o Maven começa a fazer sentido.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;plus-o-que-é-uma-biblioteca-lib&quot;&gt;Plus: O que é uma biblioteca (Lib)?&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Uma biblioteca, no sentido geral, é uma coleção de classes que fornecem ferramentas para que você, como desenvolvedor, não precise escrever essas ferramentas.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;o-que-é-o-maven&quot;&gt;O que é o Maven?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;O &lt;strong&gt;Apache Maven&lt;/strong&gt; é uma ferramenta de build para projetos Java.&lt;/p&gt;
&lt;p&gt;Segundo a própria documentação do projeto, ele utiliza um &lt;strong&gt;Project Object Model (POM)&lt;/strong&gt; para gerenciar aspectos como compilação, testes e documentação do projeto.&lt;/p&gt;
&lt;p&gt;Na prática, o Maven ajuda a padronizar tarefas que aparecem constantemente no desenvolvimento Java:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Código-fonte&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Compilação&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Testes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Empacotamento&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Artefato&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Por exemplo, uma aplicação pode terminar como:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;meu-projeto.jar&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;O Maven consegue cuidar de grande parte desse processo.&lt;/p&gt;
&lt;p&gt;Mas talvez a funcionalidade mais conhecida seja outra:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Gerenciar as dependências do projeto.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;o-pomxml&quot;&gt;O &lt;code dir=&quot;auto&quot;&gt;pom.xml&lt;/code&gt;&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Quando você cria um projeto Maven, um dos arquivos mais importantes é:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pom.xml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;POM significa:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Project Object Model&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ele é o arquivo central de configuração do Maven.&lt;/p&gt;
&lt;p&gt;É nele que podemos definir informações como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;nome do projeto;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;versão;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Java utilizado;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;dependências;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;plugins;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;tipo de empacotamento;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;configurações de build;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;informações do projeto.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Um exemplo simples:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;modelVersion&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;4.0.0&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;modelVersion&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;br.com.exemplo&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;minha-api&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1.0.0&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Esse arquivo funciona como uma espécie de &lt;strong&gt;contrato do projeto com o Maven&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;O Maven lê o &lt;code dir=&quot;auto&quot;&gt;pom.xml&lt;/code&gt; e, a partir dessas informações, sabe como trabalhar com o projeto.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;entendendo-groupid-artifactid-e-version&quot;&gt;Entendendo &lt;code dir=&quot;auto&quot;&gt;groupId&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;artifactId&lt;/code&gt; e &lt;code dir=&quot;auto&quot;&gt;version&lt;/code&gt;&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Você provavelmente verá esses três elementos em praticamente todo projeto Maven.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;br.com.exemplo&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;minha-api&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1.0.0&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Eles identificam o projeto.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;groupid&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;groupId&lt;/code&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Normalmente representa a organização ou grupo responsável pelo projeto.&lt;/p&gt;
&lt;p&gt;Por exemplo:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;com.google.guava&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;ou:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;br.com.salvaai&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;artifactid&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;artifactId&lt;/code&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;É o nome do artefato/projeto.&lt;/p&gt;
&lt;p&gt;Por exemplo:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;minha-api&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;version&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;version&lt;/code&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Representa a versão:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1.0.0&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Juntos, esses valores formam as chamadas &lt;strong&gt;coordenadas Maven&lt;/strong&gt; de um artefato.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;e-as-dependências&quot;&gt;E as dependências?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Agora chegamos a uma das partes mais importantes.&lt;/p&gt;
&lt;p&gt;Suponha que nossa aplicação precise do Spring Web.&lt;/p&gt;
&lt;p&gt;Em vez de baixar manualmente um &lt;code dir=&quot;auto&quot;&gt;.jar&lt;/code&gt;, podemos declarar a dependência no &lt;code dir=&quot;auto&quot;&gt;pom.xml&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;dependencies&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;dependency&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;org.springframework.boot&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;spring-boot-starter-web&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;3.5.6&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;dependency&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;dependencies&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A partir disso, o Maven consegue resolver e baixar a dependência necessária.&lt;/p&gt;
&lt;p&gt;E existe uma característica extremamente importante:&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;dependências-transitivas&quot;&gt;Dependências transitivas&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Imagine:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Minha aplicação&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Biblioteca A&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Biblioteca B&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Biblioteca C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Se a Biblioteca A precisa da Biblioteca B, que por sua vez precisa da Biblioteca C, o Maven consegue resolver essas dependências transitivamente.&lt;/p&gt;
&lt;p&gt;Ou seja, você não precisa declarar manualmente cada biblioteca necessária por suas dependências.&lt;/p&gt;
&lt;p&gt;É uma das razões pelas quais gerenciar projetos Java grandes seria muito mais trabalhoso sem uma ferramenta como o Maven.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;de-onde-o-maven-baixa-as-bibliotecas&quot;&gt;De onde o Maven baixa as bibliotecas?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Você pode imaginar que existe uma enorme biblioteca online contendo milhares de artefatos Java.&lt;/p&gt;
&lt;p&gt;Esse papel é desempenhado principalmente pelo &lt;strong&gt;Maven Central Repository&lt;/strong&gt;, um dos principais repositórios públicos de dependências do ecossistema Java.&lt;/p&gt;
&lt;p&gt;Quando você adiciona uma dependência ao &lt;code dir=&quot;auto&quot;&gt;pom.xml&lt;/code&gt;, o Maven procura o artefato nos repositórios configurados e pode armazená-lo no seu repositório local.&lt;/p&gt;
&lt;p&gt;Por isso, depois de baixar uma dependência uma vez, ela normalmente não precisa ser baixada novamente para cada projeto.&lt;/p&gt;
&lt;p&gt;O fluxo pode ser entendido assim:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pom.xml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Maven&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Repositório remoto&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Dependência&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Repositório local&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Projeto&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;o-repositório-local&quot;&gt;O repositório local&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;O Maven mantém um repositório local na máquina do desenvolvedor.&lt;/p&gt;
&lt;p&gt;No Linux e macOS, normalmente ele fica em:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;~/.m2/repository&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;No Windows:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;C:\Users\SEU_USUARIO\.m2\repository&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Imagine que você utilize:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;junit-jupiter&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Depois que o Maven baixa essa dependência, ela fica disponível no repositório local.&lt;/p&gt;
&lt;p&gt;Isso também ajuda a evitar downloads desnecessários.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;o-ciclo-de-vida-do-maven&quot;&gt;O ciclo de vida do Maven&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Outra ideia fundamental do Maven é o &lt;strong&gt;Build Lifecycle&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Em vez de cada projeto inventar seus próprios comandos e etapas de build, o Maven possui ciclos de vida padronizados.&lt;/p&gt;
&lt;p&gt;O ciclo &lt;code dir=&quot;auto&quot;&gt;default&lt;/code&gt;, por exemplo, possui várias fases.&lt;/p&gt;
&lt;p&gt;Algumas das mais conhecidas são:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;validate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;verify&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Cada fase representa uma etapa do processo de construção do projeto.&lt;/p&gt;
&lt;p&gt;Vamos entender algumas delas.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;compile&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;compile&lt;/code&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Compila o código-fonte.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;test&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;test&lt;/code&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Executa os testes.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;package&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;package&lt;/code&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Empacota a aplicação.&lt;/p&gt;
&lt;p&gt;Por exemplo:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;target/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── minha-api-1.0.0.jar&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Com:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;install&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;install&lt;/code&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Além de construir o artefato, instala o resultado no repositório local.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;deploy&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;deploy&lt;/code&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Pode publicar o artefato em um repositório remoto configurado.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Essas fases são executadas em sequência.&lt;/p&gt;
&lt;p&gt;Por exemplo, quando você executa:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;o Maven não executa apenas &lt;code dir=&quot;auto&quot;&gt;package&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ele passa pelas fases anteriores necessárias:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;validate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Isso torna o processo de build previsível e padronizado.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;e-o-famoso-mvn-clean-install&quot;&gt;E o famoso &lt;code dir=&quot;auto&quot;&gt;mvn clean install&lt;/code&gt;?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Você provavelmente encontrará esse comando em praticamente qualquer projeto Java baseado em Maven:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clean&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Mas o que ele faz?&lt;/p&gt;
&lt;p&gt;Primeiro:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clean&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Remove os arquivos gerados pelo build anterior.&lt;/p&gt;
&lt;p&gt;Normalmente isso significa remover a pasta:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;target/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Depois:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Executa o ciclo necessário até instalar o artefato no repositório local.&lt;/p&gt;
&lt;p&gt;Simplificando:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;clean&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;remove build anterior&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;É uma maneira bastante comum de garantir que o projeto seja reconstruído do zero.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;o-que-é-a-pasta-target&quot;&gt;O que é a pasta &lt;code dir=&quot;auto&quot;&gt;target&lt;/code&gt;?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Se você executar:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;provavelmente verá uma pasta:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;target/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Ela contém arquivos gerados pelo Maven durante o processo de build.&lt;/p&gt;
&lt;p&gt;Por exemplo:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;target/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── classes/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── test-classes/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── surefire-reports/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── minha-api-1.0.0.jar&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Essa pasta normalmente &lt;strong&gt;não deve ser versionada no Git&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Por isso, projetos Java geralmente possuem no &lt;code dir=&quot;auto&quot;&gt;.gitignore&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;target/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;maven-e-plugins&quot;&gt;Maven e plugins&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;O Maven não faz tudo sozinho.&lt;/p&gt;
&lt;p&gt;Grande parte de sua funcionalidade é fornecida através de &lt;strong&gt;plugins&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Por exemplo, existem plugins responsáveis por tarefas como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;compilação;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;testes;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;empacotamento;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;documentação;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;análise de dependências;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;execução de aplicações.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Isso torna o Maven extensível.&lt;/p&gt;
&lt;p&gt;Por exemplo, o processo de compilação pode utilizar o Maven Compiler Plugin.&lt;/p&gt;
&lt;p&gt;Já os testes unitários podem ser executados pelo Maven Surefire Plugin.&lt;/p&gt;
&lt;p&gt;Na documentação oficial, as fases do lifecycle possuem bindings que associam determinadas fases a goals de plugins.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;maven-não-é-apenas-um-gerenciador-de-dependências&quot;&gt;Maven não é apenas um gerenciador de dependências&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;É comum alguém dizer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Maven é o gerenciador de dependências do Java.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Não está totalmente errado, mas é uma definição incompleta.&lt;/p&gt;
&lt;p&gt;O Maven também é responsável por automatizar o processo de build.&lt;/p&gt;
&lt;p&gt;Podemos pensar nele como:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Maven&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;┌──────────┼──────────┐&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓          ↓          ↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Dependências    Build      Testes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│          │          │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓          ↓          ↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Bibliotecas  JAR/WAR   JUnit etc.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Ele também possui mecanismos para documentação, publicação de artefatos, projetos multimódulo e gerenciamento de informações do projeto.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;maven-x-compilador-java&quot;&gt;Maven x compilador Java&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Uma dúvida comum é:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Mas o Java já não possui um compilador?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sim.&lt;/p&gt;
&lt;p&gt;O Java possui o &lt;code dir=&quot;auto&quot;&gt;javac&lt;/code&gt;, responsável por compilar código Java.&lt;/p&gt;
&lt;p&gt;Por exemplo:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;javac&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Main.java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;O problema é que um projeto real normalmente envolve muito mais coisas.&lt;/p&gt;
&lt;p&gt;Você precisa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;organizar o projeto;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;encontrar dependências;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;configurar o classpath;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;compilar dezenas ou centenas de arquivos;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;executar testes;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;empacotar o resultado;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;controlar versões;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;eventualmente publicar o artefato.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O Maven automatiza esse conjunto de tarefas.&lt;/p&gt;
&lt;p&gt;Em outras palavras:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;javac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compila Java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Enquanto:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Maven&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;organiza e automatiza o processo de build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;O Maven inclusive utiliza plugins para realizar determinadas etapas, como a compilação.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;a-estrutura-padrão-de-um-projeto-maven&quot;&gt;A estrutura padrão de um projeto Maven&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Outra vantagem do Maven é a padronização.&lt;/p&gt;
&lt;p&gt;Um projeto costuma seguir uma estrutura parecida com:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;meu-projeto/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── pom.xml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── src/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── main/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│   ├── java/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│   └── resources/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└── test/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── java/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└── resources/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Código da aplicação:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;src/main/java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Recursos:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;src/main/resources&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Testes:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;src/test/java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Testes e recursos possuem uma estrutura paralela à aplicação.&lt;/p&gt;
&lt;p&gt;Isso significa que, ao abrir um projeto Maven novo, você não precisa descobrir do zero onde cada coisa está.&lt;/p&gt;
&lt;p&gt;O próprio Maven estabelece convenções para essa estrutura.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;maven-e-spring-boot&quot;&gt;Maven e Spring Boot&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Se você está estudando Java para desenvolvimento backend, provavelmente encontrará Maven principalmente através do &lt;strong&gt;Spring Boot&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ao criar uma aplicação Spring Boot, é comum receber um &lt;code dir=&quot;auto&quot;&gt;pom.xml&lt;/code&gt; semelhante a:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;parent&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;org.springframework.boot&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;spring-boot-starter-parent&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;3.5.6&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;parent&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;dependencies&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;dependency&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;org.springframework.boot&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;spring-boot-starter-web&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;dependency&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;dependency&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;org.springframework.boot&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;groupId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;spring-boot-starter-test&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;artifactId&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;scope&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;scope&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;dependency&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;dependencies&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Perceba algo interessante.&lt;/p&gt;
&lt;p&gt;Em muitos casos, você nem precisa informar a versão individualmente de cada dependência.&lt;/p&gt;
&lt;p&gt;Isso acontece porque o projeto pode utilizar um &lt;strong&gt;parent POM&lt;/strong&gt; ou mecanismos como &lt;code dir=&quot;auto&quot;&gt;dependencyManagement&lt;/code&gt; para centralizar versões e configurações.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;alguns-comandos-que-você-deve-conhecer&quot;&gt;Alguns comandos que você deve conhecer&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Se você está começando com Maven, estes comandos já cobrem uma boa parte do seu dia a dia:&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;compilar&quot;&gt;Compilar&lt;/h3&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;executar-testes&quot;&gt;Executar testes&lt;/h3&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;gerar-o-artefato&quot;&gt;Gerar o artefato&lt;/h3&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;limpar-o-projeto&quot;&gt;Limpar o projeto&lt;/h3&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clean&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;limpar-e-gerar-novamente&quot;&gt;Limpar e gerar novamente&lt;/h3&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clean&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;limpar-testar-empacotar-e-instalar-localmente&quot;&gt;Limpar, testar, empacotar e instalar localmente&lt;/h3&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clean&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;visualizar-a-árvore-de-dependências&quot;&gt;Visualizar a árvore de dependências&lt;/h3&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dependency:tree&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Esse último é especialmente útil quando você começa a enfrentar conflitos de versões entre bibliotecas.&lt;/p&gt;
&lt;p&gt;O próprio Maven disponibiliza o &lt;code dir=&quot;auto&quot;&gt;dependency:tree&lt;/code&gt; para visualizar a árvore de dependências resolvida.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;então-preciso-decorar-todos-esses-comandos&quot;&gt;Então, preciso decorar todos esses comandos?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Não.&lt;/p&gt;
&lt;p&gt;Mais importante do que decorar comandos é entender &lt;strong&gt;o modelo mental do Maven&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Quando você vê:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clean&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;deve conseguir interpretar:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Quero limpar os arquivos gerados anteriormente e executar o processo de build até gerar o pacote.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Quando vê:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mvn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dependency:tree&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;deve pensar:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Quero descobrir quais dependências meu projeto está utilizando e de onde elas vieram.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;E quando abre:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pom.xml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;deve pensar:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Aqui está a definição e boa parte da configuração do meu projeto Maven.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;maven-em-uma-analogia&quot;&gt;Maven em uma analogia&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Imagine que você abriu um restaurante.&lt;/p&gt;
&lt;p&gt;Você poderia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;comprar todos os ingredientes manualmente;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;procurar fornecedores;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;controlar estoque;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;calcular o que precisa ser comprado;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;preparar os ingredientes;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;organizar a cozinha;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;preparar os pratos;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;limpar tudo no final.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ou poderia utilizar um sistema que organiza boa parte desse processo.&lt;/p&gt;
&lt;p&gt;O Maven é parecido com esse sistema para um projeto Java.&lt;/p&gt;
&lt;p&gt;Você declara:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Meu projeto precisa dessas ferramentas e bibliotecas.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;E o Maven cuida de grande parte da infraestrutura necessária para transformar:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Código-fonte&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;em:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Aplicação pronta para ser executada/distribuída&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;maven-é-obrigatório-para-java&quot;&gt;Maven é obrigatório para Java?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Não.&lt;/p&gt;
&lt;p&gt;Java não depende do Maven para funcionar.&lt;/p&gt;
&lt;p&gt;Existem outras alternativas, como o &lt;strong&gt;Gradle&lt;/strong&gt;, além de ferramentas e abordagens diferentes.&lt;/p&gt;
&lt;p&gt;O Maven, porém, tornou-se uma ferramenta extremamente difundida no ecossistema Java e aparece em uma enorme quantidade de projetos.&lt;/p&gt;
&lt;p&gt;Por isso, para quem está entrando no desenvolvimento Java profissional, entender Maven é muito mais importante do que simplesmente saber executar &lt;code dir=&quot;auto&quot;&gt;mvn clean install&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;O objetivo é entender &lt;strong&gt;o que está acontecendo por trás do comando&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;o-que-você-realmente-precisa-aprender&quot;&gt;O que você realmente precisa aprender?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Se você está começando agora, não precisa estudar toda a documentação do Maven.&lt;/p&gt;
&lt;p&gt;Comece entendendo estes conceitos:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;1. O que é o Maven&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;2. O que é o pom.xml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;3. Dependências&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;4. Dependências transitivas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;5. Repositório local&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;6. Maven Central&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;7. Build Lifecycle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;8. Plugins&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;9. Packaging&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;10. dependencyManagement&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Depois disso, ferramentas como Spring Boot, Docker e pipelines de CI/CD começam a fazer muito mais sentido, porque você entende onde o Maven se encaixa dentro do processo de desenvolvimento.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h1 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;O Maven nasceu de uma necessidade bastante prática: &lt;strong&gt;padronizar e simplificar o processo de construção de projetos Java&lt;/strong&gt;. Desde então, tornou-se uma das ferramentas fundamentais do ecossistema.&lt;/p&gt;
&lt;p&gt;Ele não serve apenas para baixar bibliotecas.&lt;/p&gt;
&lt;p&gt;Ele ajuda a:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;gerenciar dependências;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;compilar código;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;executar testes;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;empacotar aplicações;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;padronizar a estrutura dos projetos;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gerenciar plugins;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;trabalhar com projetos multimódulo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;publicar artefatos.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E talvez a melhor forma de resumir o Maven seja:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Você descreve como seu projeto é organizado e quais são suas necessidades; o Maven automatiza boa parte do trabalho necessário para construir esse projeto.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Se você está seguindo uma trilha de estudos de Java, entender Maven é um daqueles assuntos que parecem simples no começo, mas que vão economizar bastante tempo conforme seus projetos ficam maiores.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;referências&quot;&gt;Referências&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://maven.apache.org/what-is-maven&quot;&gt;Apache Maven — Introduction&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://maven.apache.org/pom.html&quot;&gt;Apache Maven — POM Reference&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html&quot;&gt;Apache Maven — Build Lifecycle&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html&quot;&gt;Apache Maven — Dependency Mechanism&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://maven.apache.org/guides/getting-started/&quot;&gt;Apache Maven — Getting Started Guide&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>java</category><category>fundamentos</category></item><item><title>Desmistificando o JVM, JRE e JDK</title><link>https://www.salvaai.com.br/artigos/java/jvm-jre-jdk/</link><guid isPermaLink="true">https://www.salvaai.com.br/artigos/java/jvm-jre-jdk/</guid><description>JVM, JRE e JDK aparecem juntos o tempo todo, mas cada um tem um papel. Veja de forma prática o que cada sigla faz e qual você precisa instalar. 🍳</description><pubDate>Mon, 15 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;jvm-jre-e-jdk-afinal-qual-é-a-diferença&quot;&gt;JVM, JRE e JDK: afinal, qual é a diferença?&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Se você está começando a estudar Java, provavelmente já encontrou três siglas que aparecem o tempo todo:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JVM, JRE e JDK.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;À primeira vista, elas parecem representar praticamente a mesma coisa. E, para piorar, muitos materiais explicam esses conceitos usando definições bastante técnicas antes mesmo de explicar &lt;strong&gt;como eles se relacionam&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Uma forma simples de entender isso é imaginar que estamos falando de uma cozinha.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-imagine-que-java-é-uma-cozinha&quot;&gt;🍳 Imagine que Java é uma cozinha&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Vamos começar pelo conceito mais importante.&lt;/p&gt;
&lt;p&gt;Quando escrevemos um programa Java, o código que criamos não é executado diretamente pelo sistema operacional.&lt;/p&gt;
&lt;p&gt;Por exemplo, podemos escrever:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Main&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;[] &lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;out&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Hello, World!&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Esse código é transformado pelo compilador em &lt;strong&gt;bytecode&lt;/strong&gt;, normalmente armazenado em um arquivo &lt;code dir=&quot;auto&quot;&gt;.class&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;É aí que entram JVM, JRE e JDK.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;jvm--o-cozinheiro&quot;&gt;JVM — o cozinheiro&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A &lt;strong&gt;JVM (Java Virtual Machine)&lt;/strong&gt; pode ser comparada ao &lt;strong&gt;cozinheiro&lt;/strong&gt; da nossa cozinha.&lt;/p&gt;
&lt;p&gt;É ela quem pega o bytecode Java e efetivamente executa o programa.&lt;/p&gt;
&lt;p&gt;Quando você executa:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;java&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;a JVM entra em ação.&lt;/p&gt;
&lt;p&gt;Ela interpreta ou compila o bytecode para instruções que o computador consegue executar, utilizando técnicas como &lt;strong&gt;JIT (Just-In-Time compilation)&lt;/strong&gt; durante a execução.&lt;/p&gt;
&lt;p&gt;E aqui está uma das grandes ideias por trás do Java:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;O mesmo bytecode pode ser executado em diferentes sistemas operacionais, desde que exista uma JVM adequada para aquele sistema.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Por isso, podemos ter:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Main.class&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                 &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;┌────────┼────────┐&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓        ↓        ↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;JVM      JVM      JVM&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Windows    Linux    macOS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│        │        │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓        ↓        ↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;CPU      CPU      CPU&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;O bytecode continua sendo o mesmo.&lt;/p&gt;
&lt;p&gt;O que muda é a implementação da JVM responsável por conversar com o sistema operacional e o hardware.&lt;/p&gt;
&lt;p&gt;É daí que vem a famosa ideia:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Write once, run anywhere.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Escreva uma vez, execute em qualquer lugar.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;jre--a-cozinha&quot;&gt;JRE — a cozinha&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Agora imagine que o cozinheiro sozinho não consegue fazer muita coisa.&lt;/p&gt;
&lt;p&gt;Ele precisa de uma cozinha, utensílios, ingredientes e toda a estrutura necessária para preparar o prato.&lt;/p&gt;
&lt;p&gt;Essa é uma boa forma de imaginar o &lt;strong&gt;JRE (Java Runtime Environment)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Conceitualmente, o JRE representa o ambiente necessário para &lt;strong&gt;executar aplicações Java&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Podemos simplificar assim:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;JRE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── JVM&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── Bibliotecas necessárias para execução&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Ou, usando nossa analogia:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;JRE = Cozinha + Cozinheiro + Recursos necessários&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Se você simplesmente quer executar uma aplicação Java, você não precisa necessariamente de todas as ferramentas utilizadas pelo desenvolvedor para construir aquela aplicação.&lt;/p&gt;
&lt;p&gt;É a diferença entre:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Quero preparar esta receita.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;e:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Quero criar novas receitas.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;No primeiro caso, precisamos da estrutura necessária para cozinhar.&lt;/p&gt;
&lt;p&gt;No segundo, precisamos de ferramentas adicionais.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;jdk--a-cozinha-completa-para-o-desenvolvedor&quot;&gt;JDK — a cozinha completa para o desenvolvedor&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;É aí que entra o &lt;strong&gt;JDK (Java Development Kit)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Se o JRE representa o ambiente necessário para executar aplicações Java, o JDK representa o conjunto de ferramentas necessário para &lt;strong&gt;desenvolver&lt;/strong&gt; essas aplicações.&lt;/p&gt;
&lt;p&gt;Podemos imaginar:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;JDK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── JRE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   └── JVM&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── Ferramentas de desenvolvimento&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Entre essas ferramentas está o famoso:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;javac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;O &lt;code dir=&quot;auto&quot;&gt;javac&lt;/code&gt; é o compilador Java.&lt;/p&gt;
&lt;p&gt;Quando fazemos:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;javac&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Main.java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;o compilador transforma nosso código-fonte:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Main.java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;em bytecode:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Main.class&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Depois, podemos executar esse bytecode utilizando a JVM:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;java&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Portanto, o fluxo simplificado seria:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Desenvolvedor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Main.java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│ javac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Main.class&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│ JVM&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Programa rodando&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;então-qual-é-a-diferença&quot;&gt;Então qual é a diferença?&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Podemos resumir tudo em uma frase:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;JDK desenvolve, JRE fornece o ambiente de execução e JVM executa o bytecode.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ou, usando nossa analogia:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Conceito&lt;/th&gt;
&lt;th&gt;Analogia&lt;/th&gt;
&lt;th&gt;Responsabilidade&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JVM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;👨‍🍳 Cozinheiro&lt;/td&gt;
&lt;td&gt;Executa o bytecode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JRE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🍳 Cozinha&lt;/td&gt;
&lt;td&gt;Fornece o ambiente necessário para executar Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JDK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🧰 Cozinha completa&lt;/td&gt;
&lt;td&gt;Fornece ferramentas para desenvolver aplicações Java&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A relação pode ser visualizada desta maneira:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;┌─────────────────────────────────┐&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│              JDK                │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│                                 │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   ┌─────────────────────────┐   │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   │          JRE            │   │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   │                         │   │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   │      ┌───────────┐      │   │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   │      │    JVM    │      │   │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   │      └───────────┘      │   │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   │                         │   │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   └─────────────────────────┘   │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│                                 │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│  + ferramentas de desenvolvimento│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└─────────────────────────────────┘&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;mas-existe-um-detalhe-importante&quot;&gt;Mas existe um detalhe importante&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Essa representação é muito útil para entender os conceitos, mas existe uma ressalva importante.&lt;/p&gt;
&lt;p&gt;Atualmente, especialmente a partir do &lt;strong&gt;Java 11&lt;/strong&gt;, a ideia de instalar um “JRE separado” não funciona mais da mesma forma que funcionava em versões antigas do Java.&lt;/p&gt;
&lt;p&gt;Distribuições modernas do OpenJDK normalmente são distribuídas como &lt;strong&gt;JDKs&lt;/strong&gt;, e ferramentas como &lt;code dir=&quot;auto&quot;&gt;jlink&lt;/code&gt; podem ser utilizadas para criar runtimes personalizados.&lt;/p&gt;
&lt;p&gt;Por isso, hoje é comum um desenvolvedor simplesmente instalar um JDK, como:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;OpenJDK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Temurin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Oracle JDK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon Corretto&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;e utilizar esse ambiente tanto para desenvolver quanto para executar suas aplicações.&lt;/p&gt;
&lt;p&gt;Isso não torna o conceito de JRE inútil.&lt;/p&gt;
&lt;p&gt;Pelo contrário.&lt;/p&gt;
&lt;p&gt;A distinção continua sendo bastante útil para entender &lt;strong&gt;o que uma aplicação Java precisa para ser executada&lt;/strong&gt; e &lt;strong&gt;quais componentes fazem parte do ecossistema Java&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;e-onde-entra-o-java&quot;&gt;E onde entra o Java?&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Aqui existe outra confusão bastante comum.&lt;/p&gt;
&lt;p&gt;Quando falamos “Java”, podemos estar falando de coisas diferentes:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── Linguagem Java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── Plataforma Java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── JVM&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── Bibliotecas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── Ferramentas do JDK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A linguagem é aquilo que escrevemos:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;out&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Hello World&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;O compilador transforma esse código em bytecode.&lt;/p&gt;
&lt;p&gt;A JVM executa esse bytecode.&lt;/p&gt;
&lt;p&gt;E o JDK fornece as ferramentas necessárias para construir todo esse processo.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;uma-analogia-completa&quot;&gt;Uma analogia completa&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Voltando para nossa cozinha, podemos pensar em todo o processo assim:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Você é o desenvolvedor.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Você escreve uma receita:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Main.java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;O &lt;strong&gt;JDK&lt;/strong&gt; fornece as ferramentas necessárias para transformar essa receita em algo que possa ser executado.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;JRE&lt;/strong&gt; representa a estrutura necessária para executar aquilo.&lt;/p&gt;
&lt;p&gt;E a &lt;strong&gt;JVM&lt;/strong&gt; é quem efetivamente prepara a receita.&lt;/p&gt;
&lt;p&gt;No final:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Você&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│ escreve&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Java (.java)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│ JDK / javac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Bytecode (.class)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│ JVM&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Aplicação executando&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Essa separação é uma das características que tornam o ecossistema Java tão interessante.&lt;/p&gt;
&lt;p&gt;O programa não precisa ser compilado diretamente para cada sistema operacional.&lt;/p&gt;
&lt;p&gt;Ele é compilado para &lt;strong&gt;bytecode&lt;/strong&gt;, e a JVM de cada plataforma fica responsável por executar esse bytecode.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;para-guardar&quot;&gt;Para guardar&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Se você está começando no Java, não precisa decorar dezenas de definições.&lt;/p&gt;
&lt;p&gt;Lembre apenas:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;JDK → ferramentas para desenvolver&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JRE → ambiente para executar&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JVM → máquina virtual que executa o bytecode&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ou, na nossa cozinha:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;👨‍💻 &lt;strong&gt;JDK é o kit do desenvolvedor.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;🍳 &lt;strong&gt;JRE é o ambiente de execução.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;👨‍🍳 &lt;strong&gt;JVM é quem executa o programa.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Entendendo essa relação, fica muito mais fácil compreender o restante do ecossistema Java.&lt;/p&gt;
</content:encoded><category>java</category><category>fundamentos</category></item></channel></rss>