{"id":1590,"date":"2026-10-03T17:30:30","date_gmt":"2026-10-03T20:30:30","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=1590"},"modified":"2026-10-03T17:30:32","modified_gmt":"2026-10-03T20:30:32","slug":"maven-java-guia-pratico","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/","title":{"rendered":"Maven no Java: o que \u00e9, como funciona e como usar na pr\u00e1tica"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">O <strong>Maven no Java<\/strong> \u00e9 uma das ferramentas mais importantes para organizar, construir, testar e distribuir projetos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quem come\u00e7a a programar em Java geralmente consegue criar pequenos exemplos apenas com a IDE e o compilador. Quando o projeto cresce, por\u00e9m, surgem problemas que n\u00e3o aparecem nos primeiros exerc\u00edcios:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>onde colocar o c\u00f3digo-fonte;<\/li>\n\n\n\n<li>onde colocar os testes;<\/li>\n\n\n\n<li>como adicionar bibliotecas externas;<\/li>\n\n\n\n<li>como controlar vers\u00f5es dessas bibliotecas;<\/li>\n\n\n\n<li>como compilar o projeto sempre da mesma maneira;<\/li>\n\n\n\n<li>como gerar um arquivo JAR;<\/li>\n\n\n\n<li>como executar testes automaticamente;<\/li>\n\n\n\n<li>como compartilhar o projeto sem enviar dezenas de arquivos JAR;<\/li>\n\n\n\n<li>como reproduzir o mesmo build em outra m\u00e1quina ou em um servidor de integra\u00e7\u00e3o cont\u00ednua.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 nesse cen\u00e1rio que o Maven se torna \u00fatil.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ele oferece conven\u00e7\u00f5es para a estrutura do projeto, um modelo padronizado de build e um mecanismo para trabalhar com depend\u00eancias, plugins e reposit\u00f3rios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O ponto central de um projeto Maven \u00e9 o arquivo <code>pom.xml<\/code>, que descreve o projeto e informa ao Maven como ele deve ser constru\u00eddo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Neste guia, vamos estudar Maven de forma pr\u00e1tica. Al\u00e9m de entender sua origem e seus objetivos, criaremos um projeto, veremos o POM, o ciclo de vida, as depend\u00eancias, os reposit\u00f3rios, os plugins e os comandos mais usados no dia a dia.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">O objetivo n\u00e3o \u00e9 decorar comandos. \u00c9 entender o modelo que o Maven aplica aos projetos Java.<\/p>\n<\/blockquote>\n\n\n\n<div class=\"markdown-heading\"><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Maven_no_Java_1_O_que_e_Maven\" >Maven no Java: 1. O que \u00e9 Maven?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#2_Maven_nao_serve_apenas_para_baixar_bibliotecas\" >2. Maven n\u00e3o serve apenas para baixar bibliotecas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#3_O_que_significa_build\" >3. O que significa build?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#4_O_coracao_do_Maven_pomxml\" >4. O cora\u00e7\u00e3o do Maven: pom.xml<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#groupId\" >groupId<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#artifactId\" >artifactId<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#version\" >version<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#5_O_que_significa_SNAPSHOT\" >5. O que significa SNAPSHOT?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#6_Packaging_o_que_o_projeto_produz\" >6. Packaging: o que o projeto produz?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#JAR\" >JAR<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#WAR\" >WAR<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#POM\" >POM<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#7_Estrutura_padrao_de_um_projeto_Maven\" >7. Estrutura padr\u00e3o de um projeto Maven<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#srcmainjava\" >src\/main\/java<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#srcmainresources\" >src\/main\/resources<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#srctestjava\" >src\/test\/java<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#srctestresources\" >src\/test\/resources<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#8_Criando_o_primeiro_projeto_Maven_manualmente\" >8. Criando o primeiro projeto Maven manualmente<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#9_Verificando_o_ambiente\" >9. Verificando o ambiente<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#10_Qual_versao_do_Maven_utilizar\" >10. Qual vers\u00e3o do Maven utilizar?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#11_Compilando_o_projeto\" >11. Compilando o projeto<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#12_Gerando_um_arquivo_JAR\" >12. Gerando um arquivo JAR<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#13_O_ciclo_de_vida_do_Maven\" >13. O ciclo de vida do Maven<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#validate\" >validate<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#compile\" >compile<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#test\" >test<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#package\" >package<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#verify\" >verify<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#install\" >install<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#deploy\" >deploy<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#14_O_que_faz_mvn_clean\" >14. O que faz mvn clean?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#15_O_que_faz_mvn_install\" >15. O que faz mvn install?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#16_Repositorio_local\" >16. Reposit\u00f3rio local<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Windows\" >Windows<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Linux_e_macOS\" >Linux e macOS<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#17_Maven_Central_e_repositorios_remotos\" >17. Maven Central e reposit\u00f3rios remotos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#18_Como_declarar_uma_dependencia\" >18. Como declarar uma depend\u00eancia<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#19_Dependencias_transitivas\" >19. Depend\u00eancias transitivas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#20_Escopos_de_dependencia\" >20. Escopos de depend\u00eancia<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#compile-2\" >compile<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#provided\" >provided<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#runtime\" >runtime<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#test-2\" >test<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-44\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#21_Dependencia_plugin_fase_e_goal_sao_coisas_diferentes\" >21. Depend\u00eancia, plugin, fase e goal s\u00e3o coisas diferentes<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-45\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Dependencia\" >Depend\u00eancia<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-46\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Plugin\" >Plugin<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-47\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Fase\" >Fase<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-48\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Goal\" >Goal<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-49\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#22_Configurando_a_versao_do_Java\" >22. Configurando a vers\u00e3o do Java<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-50\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#23_O_que_e_o_POM_efetivo\" >23. O que \u00e9 o POM efetivo?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-51\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#24_Maven_Wrapper\" >24. Maven Wrapper<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-52\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Windows-2\" >Windows<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-53\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Linux_e_macOS-2\" >Linux e macOS<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-54\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#25_dependencyManagement\" >25. dependencyManagement<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-55\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#dependencies\" >dependencies<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-56\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#dependencyManagement\" >dependencyManagement<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-57\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#26_O_que_e_um_BOM\" >26. O que \u00e9 um BOM?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-58\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#27_Projetos_multi-modulo\" >27. Projetos multi-m\u00f3dulo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-59\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#28_Maven_e_Spring_Boot\" >28. Maven e Spring Boot<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-60\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#29_Maven_versus_Gradle\" >29. Maven versus Gradle<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-61\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Maven\" >Maven<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-62\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Gradle\" >Gradle<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-63\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#30_Maven_substitui_Git\" >30. Maven substitui Git?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-64\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Git\" >Git<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-65\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Maven-2\" >Maven<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-66\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#31_Maven_substitui_a_IDE\" >31. Maven substitui a IDE?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-67\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#32_E_uma_boa_ideia_colocar_JARs_dentro_do_Git\" >32. \u00c9 uma boa ideia colocar JARs dentro do Git?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-68\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#33_Comandos_Maven_essenciais\" >33. Comandos Maven essenciais<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-69\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#34_Um_fluxo_de_trabalho_real\" >34. Um fluxo de trabalho real<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-70\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#35_Como_investigar_um_build_Maven_quebrado\" >35. Como investigar um build Maven quebrado<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-71\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Passo_1_%E2%80%94_leia_o_primeiro_erro_relevante\" >Passo 1 \u2014 leia o primeiro erro relevante<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-72\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Passo_2_%E2%80%94_confira_o_ambiente\" >Passo 2 \u2014 confira o ambiente<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-73\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Passo_3_%E2%80%94_faca_um_build_limpo\" >Passo 3 \u2014 fa\u00e7a um build limpo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-74\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Passo_4_%E2%80%94_analise_dependencias\" >Passo 4 \u2014 analise depend\u00eancias<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-75\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Passo_5_%E2%80%94_veja_o_POM_efetivo\" >Passo 5 \u2014 veja o POM efetivo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-76\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Passo_6_%E2%80%94_aumente_o_nivel_de_detalhes_apenas_se_necessario\" >Passo 6 \u2014 aumente o n\u00edvel de detalhes apenas se necess\u00e1rio<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-77\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#36_Erros_comuns_de_quem_esta_comecando\" >36. Erros comuns de quem est\u00e1 come\u00e7ando<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-78\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Erro_1_%E2%80%94_editar_arquivos_dentro_de_target\" >Erro 1 \u2014 editar arquivos dentro de target<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-79\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Erro_2_%E2%80%94_nao_conferir_o_Java_usado_pelo_Maven\" >Erro 2 \u2014 n\u00e3o conferir o Java usado pelo Maven<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-80\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Erro_3_%E2%80%94_copiar_JAR_manualmente_sem_necessidade\" >Erro 3 \u2014 copiar JAR manualmente sem necessidade<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-81\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Erro_4_%E2%80%94_ignorar_dependency_tree\" >Erro 4 \u2014 ignorar dependency:tree<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-82\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Erro_5_%E2%80%94_confundir_install_com_instalacao_do_programa\" >Erro 5 \u2014 confundir install com instala\u00e7\u00e3o do programa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-83\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Erro_6_%E2%80%94_atualizar_tudo_cegamente\" >Erro 6 \u2014 atualizar tudo cegamente<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-84\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Erro_7_%E2%80%94_usar_somente_a_IDE\" >Erro 7 \u2014 usar somente a IDE<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-85\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Erro_8_%E2%80%94_nao_entender_heranca_de_POM\" >Erro 8 \u2014 n\u00e3o entender heran\u00e7a de POM<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-86\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#37_O_que_mudou_em_relacao_a_projetos_Java_antigos\" >37. O que mudou em rela\u00e7\u00e3o a projetos Java antigos?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-87\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#38_Quando_vale_a_pena_usar_Maven\" >38. Quando vale a pena usar Maven?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-88\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#39_Exercicio_pratico\" >39. Exerc\u00edcio pr\u00e1tico<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-89\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#40_Desafio_leia_um_POM_real\" >40. Desafio: leia um POM real<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-90\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#41_Perguntas_frequentes_sobre_Maven\" >41. Perguntas frequentes sobre Maven<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-91\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Maven_e_obrigatorio_para_programar_em_Java\" >Maven \u00e9 obrigat\u00f3rio para programar em Java?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-92\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Maven_e_uma_linguagem_de_programacao\" >Maven \u00e9 uma linguagem de programa\u00e7\u00e3o?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-93\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#O_que_e_pomxml\" >O que \u00e9 pom.xml?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-94\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#O_que_e_a_pasta_m2\" >O que \u00e9 a pasta .m2?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-95\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Posso_apagar_m2repository\" >Posso apagar .m2\/repository?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-96\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#O_que_e_Maven_Central\" >O que \u00e9 Maven Central?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-97\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#O_que_faz_mvn_clean_install\" >O que faz mvn clean install?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-98\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Devo_usar_package_verify_ou_install\" >Devo usar package, verify ou install?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-99\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Maven_funciona_apenas_com_Java\" >Maven funciona apenas com Java?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-100\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#42_Checklist_voce_entendeu_o_basico_de_Maven\" >42. Checklist: voc\u00ea entendeu o b\u00e1sico de Maven?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-101\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#43_Mapa_mental\" >43. Mapa mental<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-102\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Conclusao\" >Conclus\u00e3o<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-103\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Referencias_oficiais\" >Refer\u00eancias oficiais<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-104\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Proximos_estudos_recomendados\" >Pr\u00f3ximos estudos recomendados<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-105\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/maven-java-guia-pratico\/#Maven_The_Definitive_Guide_English_Edition\" >Maven: The Definitive Guide (English Edition)<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Maven_no_Java_1_O_que_e_Maven\"><\/span>Maven no Java: 1. O que \u00e9 Maven?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-1-o-que-\u00e9-maven\" class=\"anchor\" aria-label=\"Permalink: 1. O que \u00e9 Maven?\" href=\"#1-o-que-%C3%A9-maven\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Apache Maven \u00e9 uma ferramenta de <strong>gerenciamento e compreens\u00e3o de projetos<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No ecossistema Java, ele \u00e9 usado principalmente para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>organizar a estrutura do projeto;<\/li>\n\n\n\n<li>compilar c\u00f3digo;<\/li>\n\n\n\n<li>executar testes;<\/li>\n\n\n\n<li>empacotar aplica\u00e7\u00f5es e bibliotecas;<\/li>\n\n\n\n<li>gerenciar depend\u00eancias;<\/li>\n\n\n\n<li>executar plugins;<\/li>\n\n\n\n<li>gerar relat\u00f3rios;<\/li>\n\n\n\n<li>instalar artefatos em reposit\u00f3rios locais;<\/li>\n\n\n\n<li>publicar artefatos em reposit\u00f3rios remotos.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A hist\u00f3ria do Maven ajuda a entender por que ele existe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O projeto come\u00e7ou como uma tentativa de simplificar o processo de build do Jakarta Turbine. Havia v\u00e1rios projetos com arquivos Ant diferentes entre si, e arquivos JAR eram mantidos no controle de vers\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A equipe queria uma forma mais uniforme de construir os projetos, definir claramente o que fazia parte deles, publicar informa\u00e7\u00f5es e compartilhar bibliotecas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Essa necessidade levou \u00e0 cria\u00e7\u00e3o de um modelo de projeto padronizado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A documenta\u00e7\u00e3o oficial resume os objetivos do Maven em pontos como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tornar o processo de build mais simples;<\/li>\n\n\n\n<li>fornecer um sistema uniforme de build;<\/li>\n\n\n\n<li>disponibilizar informa\u00e7\u00f5es de qualidade sobre o projeto;<\/li>\n\n\n\n<li>incentivar boas pr\u00e1ticas de desenvolvimento.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">O Maven n\u00e3o elimina a necessidade de entender Java, compila\u00e7\u00e3o, testes ou depend\u00eancias. Ele organiza e automatiza grande parte desse trabalho.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"2_Maven_nao_serve_apenas_para_baixar_bibliotecas\"><\/span>2. Maven n\u00e3o serve apenas para baixar bibliotecas<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-2-maven-n\u00e3o-serve-apenas-para-baixar-bibliotecas\" class=\"anchor\" aria-label=\"Permalink: 2. Maven n\u00e3o serve apenas para baixar bibliotecas\" href=\"#2-maven-n%C3%A3o-serve-apenas-para-baixar-bibliotecas\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 muito comum ouvir:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Maven serve para baixar depend\u00eancias.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Isso \u00e9 apenas uma parte do que ele faz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine um projeto Java sem uma ferramenta de gerenciamento. Voc\u00ea poderia precisar:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>procurar uma biblioteca na internet;<\/li>\n\n\n\n<li>baixar o arquivo JAR;<\/li>\n\n\n\n<li>copiar esse arquivo para uma pasta do projeto;<\/li>\n\n\n\n<li>configurar o classpath;<\/li>\n\n\n\n<li>descobrir manualmente quais outras bibliotecas aquela biblioteca precisa;<\/li>\n\n\n\n<li>repetir tudo quando uma vers\u00e3o for atualizada;<\/li>\n\n\n\n<li>garantir que todos da equipe tenham exatamente as mesmas vers\u00f5es.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Com Maven, voc\u00ea normalmente declara a depend\u00eancia no POM:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">dependency<\/span>&gt;\n    &lt;<span class=\"pl-ent\">groupId<\/span>&gt;org.exemplo&lt;\/<span class=\"pl-ent\">groupId<\/span>&gt;\n    &lt;<span class=\"pl-ent\">artifactId<\/span>&gt;biblioteca&lt;\/<span class=\"pl-ent\">artifactId<\/span>&gt;\n    &lt;<span class=\"pl-ent\">version<\/span>&gt;1.2.0&lt;\/<span class=\"pl-ent\">version<\/span>&gt;\n&lt;\/<span class=\"pl-ent\">dependency<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O Maven pode resolver o artefato em um reposit\u00f3rio configurado e inclu\u00ed-lo no build.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas ele tamb\u00e9m cuida de outras partes do processo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>c\u00f3digo + pom.xml + depend\u00eancias\n              \u2193\n            Maven\n              \u2193\n   valida \u2192 compila \u2192 testa\n              \u2193\n           empacota\n              \u2193\n          JAR \/ WAR\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Por isso, pense no Maven como um <strong>orquestrador do build do projeto<\/strong>, e n\u00e3o apenas como um gerenciador de bibliotecas.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"3_O_que_significa_build\"><\/span>3. O que significa build?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-3-o-que-significa-build\" class=\"anchor\" aria-label=\"Permalink: 3. O que significa build?\" href=\"#3-o-que-significa-build\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A palavra build aparece constantemente em projetos Java.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Build \u00e9 o processo de transformar c\u00f3digo-fonte e recursos em um resultado utiliz\u00e1vel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um fluxo simplificado pode ser:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>c\u00f3digo-fonte\n    \u2193\ncompila\u00e7\u00e3o\n    \u2193\ntestes\n    \u2193\nrecursos\n    \u2193\nempacotamento\n    \u2193\narquivo JAR\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Em aplica\u00e7\u00f5es reais, o build pode incluir ainda:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>gera\u00e7\u00e3o de c\u00f3digo;<\/li>\n\n\n\n<li>an\u00e1lise est\u00e1tica;<\/li>\n\n\n\n<li>cobertura de testes;<\/li>\n\n\n\n<li>testes de integra\u00e7\u00e3o;<\/li>\n\n\n\n<li>empacotamento adicional;<\/li>\n\n\n\n<li>assinatura de artefatos;<\/li>\n\n\n\n<li>publica\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">O Maven organiza essas etapas usando <strong>ciclos de vida, fases e plugins<\/strong>.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"4_O_coracao_do_Maven_pomxml\"><\/span>4. O cora\u00e7\u00e3o do Maven: pom.xml<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-4-o-cora\u00e7\u00e3o-do-maven-pomxml\" class=\"anchor\" aria-label=\"Permalink: 4. O cora\u00e7\u00e3o do Maven: pom.xml\" href=\"#4-o-cora%C3%A7%C3%A3o-do-maven-pomxml\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">POM significa:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Project Object Model<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O arquivo <code>pom.xml<\/code> \u00e9 a unidade fundamental de um projeto Maven.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ele cont\u00e9m informa\u00e7\u00f5es sobre o projeto e configura\u00e7\u00f5es usadas no build.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um POM m\u00ednimo pode ser:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">project<\/span> <span class=\"pl-e\">xmlns<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>http:\/\/maven.apache.org\/POM\/4.0.0<span class=\"pl-pds\">\"<\/span><\/span>\n         <span class=\"pl-e\">xmlns<\/span><span class=\"pl-e\">:<\/span><span class=\"pl-e\">xsi<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>http:\/\/www.w3.org\/2001\/XMLSchema-instance<span class=\"pl-pds\">\"<\/span><\/span>\n         <span class=\"pl-e\">xsi<\/span><span class=\"pl-e\">:<\/span><span class=\"pl-e\">schemaLocation<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span><\/span>\n<span class=\"pl-s\">             http:\/\/maven.apache.org\/POM\/4.0.0<\/span>\n<span class=\"pl-s\">             https:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd<span class=\"pl-pds\">\"<\/span><\/span>&gt;\n\n    &lt;<span class=\"pl-ent\">modelVersion<\/span>&gt;4.0.0&lt;\/<span class=\"pl-ent\">modelVersion<\/span>&gt;\n\n    &lt;<span class=\"pl-ent\">groupId<\/span>&gt;com.michel&lt;\/<span class=\"pl-ent\">groupId<\/span>&gt;\n    &lt;<span class=\"pl-ent\">artifactId<\/span>&gt;exemplo-maven&lt;\/<span class=\"pl-ent\">artifactId<\/span>&gt;\n    &lt;<span class=\"pl-ent\">version<\/span>&gt;1.0.0-SNAPSHOT&lt;\/<span class=\"pl-ent\">version<\/span>&gt;\n\n&lt;\/<span class=\"pl-ent\">project<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">As tr\u00eas coordenadas mais conhecidas s\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><br><code>groupId<\/code>;<\/li>\n\n\n\n<li><br><code>artifactId<\/code>;<\/li>\n\n\n\n<li><br><code>version<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Elas ajudam a identificar um artefato.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"groupId\"><\/span>groupId<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-groupid\" class=\"anchor\" aria-label=\"Permalink: groupId\" href=\"#groupid\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Representa o grupo, organiza\u00e7\u00e3o ou dom\u00ednio l\u00f3gico respons\u00e1vel pelo projeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">groupId<\/span>&gt;com.michel&lt;\/<span class=\"pl-ent\">groupId<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 comum usar nomes baseados em dom\u00ednio invertido:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>br.com.empresa\ncom.exemplo\norg.projeto\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"artifactId\"><\/span>artifactId<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-artifactid\" class=\"anchor\" aria-label=\"Permalink: artifactId\" href=\"#artifactid\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 o identificador do projeto ou m\u00f3dulo.<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">artifactId<\/span>&gt;sistema-clientes&lt;\/<span class=\"pl-ent\">artifactId<\/span>&gt;<\/pre><\/div>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"version\"><\/span>version<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-version\" class=\"anchor\" aria-label=\"Permalink: version\" href=\"#version\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Representa a vers\u00e3o:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">version<\/span>&gt;1.0.0&lt;\/<span class=\"pl-ent\">version<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Durante o desenvolvimento, tamb\u00e9m \u00e9 comum encontrar:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">version<\/span>&gt;1.0.0-SNAPSHOT&lt;\/<span class=\"pl-ent\">version<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Uma forma simples de visualizar a identidade de um artefato \u00e9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>com.michel:exemplo-maven:1.0.0-SNAPSHOT\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"5_O_que_significa_SNAPSHOT\"><\/span>5. O que significa SNAPSHOT?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-5-o-que-significa-snapshot\" class=\"anchor\" aria-label=\"Permalink: 5. O que significa SNAPSHOT?\" href=\"#5-o-que-significa-snapshot\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O sufixo <code>SNAPSHOT<\/code> indica normalmente uma vers\u00e3o em desenvolvimento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1.0.0-SNAPSHOT\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ela n\u00e3o representa necessariamente um lan\u00e7amento final e imut\u00e1vel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando uma vers\u00e3o est\u00e1 pronta para lan\u00e7amento, um projeto pode usar algo como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1.0.0\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Essa distin\u00e7\u00e3o \u00e9 importante em ambientes de desenvolvimento e em reposit\u00f3rios de artefatos.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"6_Packaging_o_que_o_projeto_produz\"><\/span>6. Packaging: o que o projeto produz?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-6-packaging-o-que-o-projeto-produz\" class=\"anchor\" aria-label=\"Permalink: 6. Packaging: o que o projeto produz?\" href=\"#6-packaging-o-que-o-projeto-produz\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O POM pode informar o tipo de empacotamento:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">packaging<\/span>&gt;jar&lt;\/<span class=\"pl-ent\">packaging<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Alguns valores comuns s\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><br><code>jar<\/code>;<\/li>\n\n\n\n<li><br><code>war<\/code>;<\/li>\n\n\n\n<li><br><code>pom<\/code>.<\/li>\n<\/ul>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"JAR\"><\/span>JAR<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-jar\" class=\"anchor\" aria-label=\"Permalink: JAR\" href=\"#jar\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 muito usado para bibliotecas e aplica\u00e7\u00f5es Java.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"WAR\"><\/span>WAR<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-war\" class=\"anchor\" aria-label=\"Permalink: WAR\" href=\"#war\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 tradicionalmente usado para aplica\u00e7\u00f5es web implantadas em containers Servlet ou servidores compat\u00edveis.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"POM\"><\/span>POM<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-pom\" class=\"anchor\" aria-label=\"Permalink: POM\" href=\"#pom\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Aparece bastante em projetos pais, agregadores e estruturas multi-m\u00f3dulo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando o packaging n\u00e3o \u00e9 informado, o padr\u00e3o \u00e9 normalmente JAR.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"7_Estrutura_padrao_de_um_projeto_Maven\"><\/span>7. Estrutura padr\u00e3o de um projeto Maven<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-7-estrutura-padr\u00e3o-de-um-projeto-maven\" class=\"anchor\" aria-label=\"Permalink: 7. Estrutura padr\u00e3o de um projeto Maven\" href=\"#7-estrutura-padr%C3%A3o-de-um-projeto-maven\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Uma das grandes vantagens do Maven \u00e9 a conven\u00e7\u00e3o de diret\u00f3rios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma estrutura t\u00edpica \u00e9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>meu-projeto\/\n\u251c\u2500\u2500 pom.xml\n\u2514\u2500\u2500 src\/\n    \u251c\u2500\u2500 main\/\n    \u2502   \u251c\u2500\u2500 java\/\n    \u2502   \u2514\u2500\u2500 resources\/\n    \u2514\u2500\u2500 test\/\n        \u251c\u2500\u2500 java\/\n        \u2514\u2500\u2500 resources\/\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"srcmainjava\"><\/span>src\/main\/java<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-srcmainjava\" class=\"anchor\" aria-label=\"Permalink: src\/main\/java\" href=\"#srcmainjava\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Cont\u00e9m o c\u00f3digo Java principal.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"srcmainresources\"><\/span>src\/main\/resources<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-srcmainresources\" class=\"anchor\" aria-label=\"Permalink: src\/main\/resources\" href=\"#srcmainresources\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Cont\u00e9m recursos da aplica\u00e7\u00e3o, como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>arquivos de propriedades;<\/li>\n\n\n\n<li>XML;<\/li>\n\n\n\n<li>templates;<\/li>\n\n\n\n<li>configura\u00e7\u00f5es;<\/li>\n\n\n\n<li>outros arquivos carregados pela aplica\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"srctestjava\"><\/span>src\/test\/java<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-srctestjava\" class=\"anchor\" aria-label=\"Permalink: src\/test\/java\" href=\"#srctestjava\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Cont\u00e9m testes.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"srctestresources\"><\/span>src\/test\/resources<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-srctestresources\" class=\"anchor\" aria-label=\"Permalink: src\/test\/resources\" href=\"#srctestresources\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Cont\u00e9m recursos usados pelos testes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Essa padroniza\u00e7\u00e3o oferece uma vantagem pr\u00e1tica enorme: ao abrir um projeto Maven desconhecido, voc\u00ea j\u00e1 sabe onde procurar as principais partes.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"8_Criando_o_primeiro_projeto_Maven_manualmente\"><\/span>8. Criando o primeiro projeto Maven manualmente<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-8-criando-o-primeiro-projeto-maven-manualmente\" class=\"anchor\" aria-label=\"Permalink: 8. Criando o primeiro projeto Maven manualmente\" href=\"#8-criando-o-primeiro-projeto-maven-manualmente\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos criar um projeto simples para entender o que o Maven faz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Estrutura:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>exemplo-maven\/\n\u251c\u2500\u2500 pom.xml\n\u2514\u2500\u2500 src\/\n    \u2514\u2500\u2500 main\/\n        \u2514\u2500\u2500 java\/\n            \u2514\u2500\u2500 com\/\n                \u2514\u2500\u2500 michel\/\n                    \u2514\u2500\u2500 App.java\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use este POM:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">project<\/span> <span class=\"pl-e\">xmlns<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>http:\/\/maven.apache.org\/POM\/4.0.0<span class=\"pl-pds\">\"<\/span><\/span>\n         <span class=\"pl-e\">xmlns<\/span><span class=\"pl-e\">:<\/span><span class=\"pl-e\">xsi<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>http:\/\/www.w3.org\/2001\/XMLSchema-instance<span class=\"pl-pds\">\"<\/span><\/span>\n         <span class=\"pl-e\">xsi<\/span><span class=\"pl-e\">:<\/span><span class=\"pl-e\">schemaLocation<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span><\/span>\n<span class=\"pl-s\">             http:\/\/maven.apache.org\/POM\/4.0.0<\/span>\n<span class=\"pl-s\">             https:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd<span class=\"pl-pds\">\"<\/span><\/span>&gt;\n\n    &lt;<span class=\"pl-ent\">modelVersion<\/span>&gt;4.0.0&lt;\/<span class=\"pl-ent\">modelVersion<\/span>&gt;\n\n    &lt;<span class=\"pl-ent\">groupId<\/span>&gt;com.michel&lt;\/<span class=\"pl-ent\">groupId<\/span>&gt;\n    &lt;<span class=\"pl-ent\">artifactId<\/span>&gt;exemplo-maven&lt;\/<span class=\"pl-ent\">artifactId<\/span>&gt;\n    &lt;<span class=\"pl-ent\">version<\/span>&gt;1.0.0-SNAPSHOT&lt;\/<span class=\"pl-ent\">version<\/span>&gt;\n\n    &lt;<span class=\"pl-ent\">properties<\/span>&gt;\n        &lt;<span class=\"pl-ent\">maven<\/span>.compiler.release&gt;21&lt;\/<span class=\"pl-ent\">maven<\/span>.compiler.release&gt;\n        &lt;<span class=\"pl-ent\">project<\/span>.build.sourceEncoding&gt;UTF-8&lt;\/<span class=\"pl-ent\">project<\/span>.build.sourceEncoding&gt;\n    &lt;\/<span class=\"pl-ent\">properties<\/span>&gt;\n\n&lt;\/<span class=\"pl-ent\">project<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Agora crie <code>App.java<\/code>:<\/p>\n\n\n\n<div class=\"highlight highlight-source-java\"><pre><span class=\"pl-k\">package<\/span> <span class=\"pl-s1\">com<\/span>.<span class=\"pl-s1\">michel<\/span>;\n\n<span class=\"pl-k\">public<\/span> <span class=\"pl-k\">class<\/span> <span class=\"pl-smi\">App<\/span> {\n\n    <span class=\"pl-k\">public<\/span> <span class=\"pl-k\">static<\/span> <span class=\"pl-smi\">void<\/span> <span class=\"pl-en\">main<\/span>(<span class=\"pl-smi\">String<\/span>[] <span class=\"pl-s1\">args<\/span>) {\n        <span class=\"pl-smi\">System<\/span>.<span class=\"pl-s1\">out<\/span>.<span class=\"pl-en\">println<\/span>(<span class=\"pl-s\">\"Ol\u00e1, Maven!\"<\/span>);\n    }\n}<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Esse projeto ainda n\u00e3o possui nenhuma biblioteca externa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mesmo assim, Maven j\u00e1 pode aplicar sua estrutura e seu ciclo de build.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"9_Verificando_o_ambiente\"><\/span>9. Verificando o ambiente<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-9-verificando-o-ambiente\" class=\"anchor\" aria-label=\"Permalink: 9. Verificando o ambiente\" href=\"#9-verificando-o-ambiente\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Abra o terminal dentro da pasta do projeto e execute:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn --version<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">ou:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn -v<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O comando mostra informa\u00e7\u00f5es como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>vers\u00e3o do Maven;<\/li>\n\n\n\n<li>vers\u00e3o do Java usada pelo Maven;<\/li>\n\n\n\n<li>caminho da instala\u00e7\u00e3o;<\/li>\n\n\n\n<li>sistema operacional.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Essa verifica\u00e7\u00e3o \u00e9 muito importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sua IDE pode estar configurada com um JDK e o Maven no terminal pode estar usando outro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando um projeto funciona na IDE e falha no terminal, conferir <code>mvn --version<\/code> \u00e9 uma das primeiras coisas a fazer.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"10_Qual_versao_do_Maven_utilizar\"><\/span>10. Qual vers\u00e3o do Maven utilizar?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-10-qual-vers\u00e3o-do-maven-utilizar\" class=\"anchor\" aria-label=\"Permalink: 10. Qual vers\u00e3o do Maven utilizar?\" href=\"#10-qual-vers%C3%A3o-do-maven-utilizar\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Na revis\u00e3o deste artigo, em outubro de 2026, o projeto Apache lista o <strong>Maven 3.10.0<\/strong> como a vers\u00e3o GA mais recente da linha 3.10.x.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A documenta\u00e7\u00e3o tamb\u00e9m informa que Maven 3.10.0 e 3.9.16 s\u00e3o as duas s\u00e9ries GA mantidas naquele momento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O Maven 4 ainda aparece como <strong>n\u00e3o GA<\/strong>, com vers\u00f5es release candidate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esse detalhe \u00e9 importante porque artigos antigos podem recomendar vers\u00f5es que j\u00e1 chegaram ao fim do suporte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o trate o n\u00famero presente neste artigo como eterno. Antes de instalar Maven em uma m\u00e1quina nova, consulte o hist\u00f3rico oficial de releases.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"11_Compilando_o_projeto\"><\/span>11. Compilando o projeto<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-11-compilando-o-projeto\" class=\"anchor\" aria-label=\"Permalink: 11. Compilando o projeto\" href=\"#11-compilando-o-projeto\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Execute:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn compile<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O Maven localizar\u00e1 o POM, aplicar\u00e1 a configura\u00e7\u00e3o e compilar\u00e1 o c\u00f3digo principal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Depois disso, aparecer\u00e1 a pasta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>target\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Por exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>target\/\n\u2514\u2500\u2500 classes\/\n    \u2514\u2500\u2500 com\/\n        \u2514\u2500\u2500 michel\/\n            \u2514\u2500\u2500 App.class\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A pasta <code>target<\/code> cont\u00e9m resultados gerados pelo build.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o coloque c\u00f3digo-fonte importante dentro dela.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"12_Gerando_um_arquivo_JAR\"><\/span>12. Gerando um arquivo JAR<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-12-gerando-um-arquivo-jar\" class=\"anchor\" aria-label=\"Permalink: 12. Gerando um arquivo JAR\" href=\"#12-gerando-um-arquivo-jar\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Execute:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn package<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O Maven executar\u00e1 as fases necess\u00e1rias at\u00e9 chegar a <code>package<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O resultado pode ser:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>target\/exemplo-maven-1.0.0-SNAPSHOT.jar\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Observe que o nome do artefato vem das informa\u00e7\u00f5es do POM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esse comportamento mostra uma caracter\u00edstica essencial do ciclo de vida:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Ao solicitar uma fase, Maven executa as fases anteriores necess\u00e1rias.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea n\u00e3o precisa rodar manualmente cada etapa uma por uma.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"13_O_ciclo_de_vida_do_Maven\"><\/span>13. O ciclo de vida do Maven<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-13-o-ciclo-de-vida-do-maven\" class=\"anchor\" aria-label=\"Permalink: 13. O ciclo de vida do Maven\" href=\"#13-o-ciclo-de-vida-do-maven\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O Maven possui ciclos de vida definidos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Os mais conhecidos s\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><br><code>clean<\/code>;<\/li>\n\n\n\n<li><br><code>default<\/code>;<\/li>\n\n\n\n<li><br><code>site<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">No desenvolvimento cotidiano, o ciclo default \u00e9 o principal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Algumas de suas fases s\u00e3o:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>validate\n   \u2193\ncompile\n   \u2193\ntest\n   \u2193\npackage\n   \u2193\nverify\n   \u2193\ninstall\n   \u2193\ndeploy\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"validate\"><\/span>validate<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-validate\" class=\"anchor\" aria-label=\"Permalink: validate\" href=\"#validate\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Verifica se o projeto possui as informa\u00e7\u00f5es necess\u00e1rias para continuar.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"compile\"><\/span>compile<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-compile\" class=\"anchor\" aria-label=\"Permalink: compile\" href=\"#compile\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Compila o c\u00f3digo-fonte principal.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"test\"><\/span>test<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-test\" class=\"anchor\" aria-label=\"Permalink: test\" href=\"#test\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Executa os testes apropriados.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"package\"><\/span>package<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-package\" class=\"anchor\" aria-label=\"Permalink: package\" href=\"#package\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Empacota o projeto, por exemplo em JAR ou WAR.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"verify\"><\/span>verify<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-verify\" class=\"anchor\" aria-label=\"Permalink: verify\" href=\"#verify\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Executa verifica\u00e7\u00f5es necess\u00e1rias para validar o pacote.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"install\"><\/span>install<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-install\" class=\"anchor\" aria-label=\"Permalink: install\" href=\"#install\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Instala o artefato no reposit\u00f3rio local.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"deploy\"><\/span>deploy<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-deploy\" class=\"anchor\" aria-label=\"Permalink: deploy\" href=\"#deploy\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Publica o artefato em um reposit\u00f3rio remoto configurado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A documenta\u00e7\u00e3o oficial recomenda escolher a fase de acordo com o resultado desejado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quer gerar o pacote?<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn package<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Quer validar o build de maneira mais abrangente?<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn verify<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Precisa que outro projeto local consuma o artefato?<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn install<\/pre><\/div>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"14_O_que_faz_mvn_clean\"><\/span>14. O que faz mvn clean?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-14-o-que-faz-mvn-clean\" class=\"anchor\" aria-label=\"Permalink: 14. O que faz mvn clean?\" href=\"#14-o-que-faz-mvn-clean\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Durante o build, Maven produz arquivos dentro de <code>target<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para remover resultados do build anterior:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn clean<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 comum combinar ciclos:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn clean package<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">ou:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn clean verify<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O primeiro comando limpa o resultado anterior antes de gerar um novo pacote.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O segundo limpa e executa a valida\u00e7\u00e3o do build at\u00e9 a fase verify.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"15_O_que_faz_mvn_install\"><\/span>15. O que faz mvn install?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-15-o-que-faz-mvn-install\" class=\"anchor\" aria-label=\"Permalink: 15. O que faz mvn install?\" href=\"#15-o-que-faz-mvn-install\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O comando:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn install<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">executa as fases necess\u00e1rias do ciclo default at\u00e9 <code>install<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al\u00e9m de compilar, testar e empacotar, o artefato \u00e9 instalado no reposit\u00f3rio Maven local.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso n\u00e3o significa &#8220;instalar o programa no Windows&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Projeto A\n    \u2193\nmvn install\n    \u2193\nreposit\u00f3rio Maven local\n    \u2193\nProjeto B pode resolver A como depend\u00eancia local\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Essa diferen\u00e7a evita uma confus\u00e3o bastante comum entre iniciantes.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"16_Repositorio_local\"><\/span>16. Reposit\u00f3rio local<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-16-reposit\u00f3rio-local\" class=\"anchor\" aria-label=\"Permalink: 16. Reposit\u00f3rio local\" href=\"#16-reposit%C3%B3rio-local\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Maven mant\u00e9m um reposit\u00f3rio local na m\u00e1quina.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em uma configura\u00e7\u00e3o padr\u00e3o, ele costuma ficar em:<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Windows\"><\/span>Windows<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-windows\" class=\"anchor\" aria-label=\"Permalink: Windows\" href=\"#windows\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\Users\\SEU_USUARIO\\.m2\\repository\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Linux_e_macOS\"><\/span>Linux e macOS<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-linux-e-macos\" class=\"anchor\" aria-label=\"Permalink: Linux e macOS\" href=\"#linux-e-macos\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>~\/.m2\/repository\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ali podem ficar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>depend\u00eancias baixadas;<\/li>\n\n\n\n<li>plugins;<\/li>\n\n\n\n<li>metadados;<\/li>\n\n\n\n<li>artefatos instalados localmente.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Isso evita copiar a mesma biblioteca manualmente para cada projeto.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"17_Maven_Central_e_repositorios_remotos\"><\/span>17. Maven Central e reposit\u00f3rios remotos<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-17-maven-central-e-reposit\u00f3rios-remotos\" class=\"anchor\" aria-label=\"Permalink: 17. Maven Central e reposit\u00f3rios remotos\" href=\"#17-maven-central-e-reposit%C3%B3rios-remotos\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Quando Maven precisa de um artefato que ainda n\u00e3o est\u00e1 dispon\u00edvel localmente, ele pode consult\u00e1-lo em reposit\u00f3rios remotos configurados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O reposit\u00f3rio p\u00fablico mais conhecido \u00e9 o <strong>Maven Central<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fluxo simplificado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pom.xml declara uma depend\u00eancia\n             \u2193\nMaven procura localmente\n             \u2193\nn\u00e3o encontrou?\n             \u2193\nconsulta reposit\u00f3rio remoto\n             \u2193\nbaixa o artefato\n             \u2193\narmazena no reposit\u00f3rio local\n             \u2193\nusa no build\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Empresas tamb\u00e9m podem utilizar reposit\u00f3rios privados, por exemplo com gerenciadores como Nexus ou Artifactory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso permite controlar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>artefatos internos;<\/li>\n\n\n\n<li>acesso;<\/li>\n\n\n\n<li>seguran\u00e7a;<\/li>\n\n\n\n<li>auditoria;<\/li>\n\n\n\n<li>vers\u00f5es;<\/li>\n\n\n\n<li>disponibilidade.<\/li>\n<\/ul>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"18_Como_declarar_uma_dependencia\"><\/span>18. Como declarar uma depend\u00eancia<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-18-como-declarar-uma-depend\u00eancia\" class=\"anchor\" aria-label=\"Permalink: 18. Como declarar uma depend\u00eancia\" href=\"#18-como-declarar-uma-depend%C3%AAncia\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Depend\u00eancias normalmente ficam dentro de:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">dependencies<\/span>&gt;\n    ...\n&lt;\/<span class=\"pl-ent\">dependencies<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">dependencies<\/span>&gt;\n\n    &lt;<span class=\"pl-ent\">dependency<\/span>&gt;\n        &lt;<span class=\"pl-ent\">groupId<\/span>&gt;org.exemplo&lt;\/<span class=\"pl-ent\">groupId<\/span>&gt;\n        &lt;<span class=\"pl-ent\">artifactId<\/span>&gt;biblioteca-exemplo&lt;\/<span class=\"pl-ent\">artifactId<\/span>&gt;\n        &lt;<span class=\"pl-ent\">version<\/span>&gt;2.0.0&lt;\/<span class=\"pl-ent\">version<\/span>&gt;\n    &lt;\/<span class=\"pl-ent\">dependency<\/span>&gt;\n\n&lt;\/<span class=\"pl-ent\">dependencies<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">As coordenadas permitem identificar exatamente qual artefato o projeto precisa.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"19_Dependencias_transitivas\"><\/span>19. Depend\u00eancias transitivas<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-19-depend\u00eancias-transitivas\" class=\"anchor\" aria-label=\"Permalink: 19. Depend\u00eancias transitivas\" href=\"#19-depend%C3%AAncias-transitivas\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Um dos recursos mais importantes do Maven \u00e9 a resolu\u00e7\u00e3o de depend\u00eancias transitivas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>seu projeto\n     \u2193\nBiblioteca A\n     \u2193\nBiblioteca B\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Seu POM declara A.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se A depende de B, Maven pode resolver B automaticamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso reduz o trabalho manual, mas tamb\u00e9m pode criar conflitos entre vers\u00f5es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um comando essencial para investigar o que realmente entrou no projeto \u00e9:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn dependency:tree<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Sa\u00edda conceitual:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>meu-projeto\n+- biblioteca-a:1.0\n|  \\- biblioteca-c:2.0\n\\- biblioteca-b:3.0\n   \\- biblioteca-d:1.4\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Quando surgir a pergunta:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Quem trouxe esta biblioteca?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">A \u00e1rvore de depend\u00eancias \u00e9 um excelente ponto de partida.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"20_Escopos_de_dependencia\"><\/span>20. Escopos de depend\u00eancia<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-20-escopos-de-depend\u00eancia\" class=\"anchor\" aria-label=\"Permalink: 20. Escopos de depend\u00eancia\" href=\"#20-escopos-de-depend%C3%AAncia\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Maven permite definir em quais contextos uma depend\u00eancia \u00e9 necess\u00e1ria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Os scopes principais incluem:<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"compile-2\"><\/span>compile<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-compile-1\" class=\"anchor\" aria-label=\"Permalink: compile\" href=\"#compile-1\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 o padr\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A depend\u00eancia fica dispon\u00edvel conforme as regras normais de compila\u00e7\u00e3o e execu\u00e7\u00e3o.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"provided\"><\/span>provided<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-provided\" class=\"anchor\" aria-label=\"Permalink: provided\" href=\"#provided\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 necess\u00e1ria para compilar, mas espera-se que o ambiente de execu\u00e7\u00e3o a forne\u00e7a.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"runtime\"><\/span>runtime<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-runtime\" class=\"anchor\" aria-label=\"Permalink: runtime\" href=\"#runtime\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o \u00e9 necess\u00e1ria para compilar o c\u00f3digo principal, mas \u00e9 necess\u00e1ria durante a execu\u00e7\u00e3o.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"test-2\"><\/span>test<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-test-1\" class=\"anchor\" aria-label=\"Permalink: test\" href=\"#test-1\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 usada apenas para testes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">dependency<\/span>&gt;\n    &lt;<span class=\"pl-ent\">groupId<\/span>&gt;org.exemplo&lt;\/<span class=\"pl-ent\">groupId<\/span>&gt;\n    &lt;<span class=\"pl-ent\">artifactId<\/span>&gt;biblioteca-de-testes&lt;\/<span class=\"pl-ent\">artifactId<\/span>&gt;\n    &lt;<span class=\"pl-ent\">version<\/span>&gt;1.0.0&lt;\/<span class=\"pl-ent\">version<\/span>&gt;\n    &lt;<span class=\"pl-ent\">scope<\/span>&gt;test&lt;\/<span class=\"pl-ent\">scope<\/span>&gt;\n&lt;\/<span class=\"pl-ent\">dependency<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Existem ainda scopes como <code>system<\/code> e <code>import<\/code>, usados em situa\u00e7\u00f5es espec\u00edficas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A pr\u00f3pria documenta\u00e7\u00e3o do Maven desaconselha tratar <code>system<\/code> como solu\u00e7\u00e3o normal, pois ele prende a depend\u00eancia a um caminho f\u00edsico da m\u00e1quina.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"21_Dependencia_plugin_fase_e_goal_sao_coisas_diferentes\"><\/span>21. Depend\u00eancia, plugin, fase e goal s\u00e3o coisas diferentes<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-21-depend\u00eancia-plugin-fase-e-goal-s\u00e3o-coisas-diferentes\" class=\"anchor\" aria-label=\"Permalink: 21. Depend\u00eancia, plugin, fase e goal s\u00e3o coisas diferentes\" href=\"#21-depend%C3%AAncia-plugin-fase-e-goal-s%C3%A3o-coisas-diferentes\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Esses conceitos costumam ser misturados.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Dependencia\"><\/span>Depend\u00eancia<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-depend\u00eancia\" class=\"anchor\" aria-label=\"Permalink: Depend\u00eancia\" href=\"#depend%C3%AAncia\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 normalmente uma biblioteca utilizada pelo projeto.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Plugin\"><\/span>Plugin<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-plugin\" class=\"anchor\" aria-label=\"Permalink: Plugin\" href=\"#plugin\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 uma extens\u00e3o usada pelo Maven para executar tarefas de build.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Plugins podem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>compilar;<\/li>\n\n\n\n<li>executar testes;<\/li>\n\n\n\n<li>gerar JAR;<\/li>\n\n\n\n<li>gerar documenta\u00e7\u00e3o;<\/li>\n\n\n\n<li>analisar c\u00f3digo;<\/li>\n\n\n\n<li>publicar artefatos.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Uma forma simples de pensar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>depend\u00eancia = algo que seu projeto usa\n\nplugin = algo que Maven usa para executar o build\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Fase\"><\/span>Fase<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-fase\" class=\"anchor\" aria-label=\"Permalink: Fase\" href=\"#fase\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 um est\u00e1gio do ciclo de vida:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>compile\ntest\npackage\nverify\ninstall\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Goal\"><\/span>Goal<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-goal\" class=\"anchor\" aria-label=\"Permalink: Goal\" href=\"#goal\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 uma tarefa espec\u00edfica fornecida por um plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando voc\u00ea executa:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn package<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">est\u00e1 chamando uma fase.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando executa:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn dependency:tree<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">est\u00e1 chamando o goal <code>tree<\/code> de um plugin identificado pelo prefixo <code>dependency<\/code>.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"22_Configurando_a_versao_do_Java\"><\/span>22. Configurando a vers\u00e3o do Java<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-22-configurando-a-vers\u00e3o-do-java\" class=\"anchor\" aria-label=\"Permalink: 22. Configurando a vers\u00e3o do Java\" href=\"#22-configurando-a-vers%C3%A3o-do-java\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">No exemplo deste artigo usamos:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">properties<\/span>&gt;\n    &lt;<span class=\"pl-ent\">maven<\/span>.compiler.release&gt;21&lt;\/<span class=\"pl-ent\">maven<\/span>.compiler.release&gt;\n    &lt;<span class=\"pl-ent\">project<\/span>.build.sourceEncoding&gt;UTF-8&lt;\/<span class=\"pl-ent\">project<\/span>.build.sourceEncoding&gt;\n&lt;\/<span class=\"pl-ent\">properties<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Isso informa a release Java desejada para compila\u00e7\u00e3o conforme a configura\u00e7\u00e3o do plugin envolvido.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas existe um detalhe importante:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">O JDK realmente utilizado pelo Maven precisa ser compat\u00edvel com o projeto.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Por isso, verifique:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn --version<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o confie apenas no Java selecionado na IDE.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"23_O_que_e_o_POM_efetivo\"><\/span>23. O que \u00e9 o POM efetivo?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-23-o-que-\u00e9-o-pom-efetivo\" class=\"anchor\" aria-label=\"Permalink: 23. O que \u00e9 o POM efetivo?\" href=\"#23-o-que-%C3%A9-o-pom-efetivo\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Um POM pode herdar configura\u00e7\u00f5es de outros POMs e do pr\u00f3prio Super POM do Maven.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por isso, nem tudo que influencia o build aparece explicitamente no arquivo que voc\u00ea est\u00e1 olhando.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para visualizar o POM efetivo:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn help:effective-pom<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Esse comando \u00e9 muito \u00fatil quando:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>uma vers\u00e3o parece surgir sem estar declarada;<\/li>\n\n\n\n<li>um plugin foi herdado;<\/li>\n\n\n\n<li>existe um POM pai;<\/li>\n\n\n\n<li>voc\u00ea quer compreender propriedades efetivas;<\/li>\n\n\n\n<li>est\u00e1 investigando um comportamento inesperado.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 uma ferramenta de diagn\u00f3stico, n\u00e3o apenas uma curiosidade.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"24_Maven_Wrapper\"><\/span>24. Maven Wrapper<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-24-maven-wrapper\" class=\"anchor\" aria-label=\"Permalink: 24. Maven Wrapper\" href=\"#24-maven-wrapper\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Em equipes, pode acontecer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>desenvolvedor A \u2192 Maven vers\u00e3o X\ndesenvolvedor B \u2192 Maven vers\u00e3o Y\nservidor CI     \u2192 Maven vers\u00e3o Z\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">O <strong>Maven Wrapper<\/strong> ajuda a padronizar a execu\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Projetos configurados com Wrapper costumam possuir:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mvnw\nmvnw.cmd\n.mvn\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Em vez de depender exclusivamente de uma instala\u00e7\u00e3o Maven global, voc\u00ea pode executar:<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Windows-2\"><\/span>Windows<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-windows-1\" class=\"anchor\" aria-label=\"Permalink: Windows\" href=\"#windows-1\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>.\\<span class=\"pl-c1\">mvnw.cmd<\/span> verify<\/pre><\/div>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Linux_e_macOS-2\"><\/span>Linux e macOS<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-linux-e-macos-1\" class=\"anchor\" aria-label=\"Permalink: Linux e macOS\" href=\"#linux-e-macos-1\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>.\/mvnw verify<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Isso facilita a reprodu\u00e7\u00e3o do build por desenvolvedores e pipelines.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"25_dependencyManagement\"><\/span>25. dependencyManagement<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-25-dependencymanagement\" class=\"anchor\" aria-label=\"Permalink: 25. dependencyManagement\" href=\"#25-dependencymanagement\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Projetos maiores frequentemente utilizam <code>dependencyManagement<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ele n\u00e3o \u00e9 o mesmo que <code>dependencies<\/code>.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"dependencies\"><\/span>dependencies<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-dependencies\" class=\"anchor\" aria-label=\"Permalink: dependencies\" href=\"#dependencies\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Declara as bibliotecas que o m\u00f3dulo utiliza.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"dependencyManagement\"><\/span>dependencyManagement<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-dependencymanagement\" class=\"anchor\" aria-label=\"Permalink: dependencyManagement\" href=\"#dependencymanagement\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Centraliza regras e vers\u00f5es de depend\u00eancias.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">dependencyManagement<\/span>&gt;\n    &lt;<span class=\"pl-ent\">dependencies<\/span>&gt;\n        &lt;<span class=\"pl-ent\">dependency<\/span>&gt;\n            &lt;<span class=\"pl-ent\">groupId<\/span>&gt;org.exemplo&lt;\/<span class=\"pl-ent\">groupId<\/span>&gt;\n            &lt;<span class=\"pl-ent\">artifactId<\/span>&gt;biblioteca&lt;\/<span class=\"pl-ent\">artifactId<\/span>&gt;\n            &lt;<span class=\"pl-ent\">version<\/span>&gt;2.5.0&lt;\/<span class=\"pl-ent\">version<\/span>&gt;\n        &lt;\/<span class=\"pl-ent\">dependency<\/span>&gt;\n    &lt;\/<span class=\"pl-ent\">dependencies<\/span>&gt;\n&lt;\/<span class=\"pl-ent\">dependencyManagement<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Um m\u00f3dulo filho pode ent\u00e3o declarar:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">dependency<\/span>&gt;\n    &lt;<span class=\"pl-ent\">groupId<\/span>&gt;org.exemplo&lt;\/<span class=\"pl-ent\">groupId<\/span>&gt;\n    &lt;<span class=\"pl-ent\">artifactId<\/span>&gt;biblioteca&lt;\/<span class=\"pl-ent\">artifactId<\/span>&gt;\n&lt;\/<span class=\"pl-ent\">dependency<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">e receber a vers\u00e3o gerenciada, dependendo da hierarquia do projeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esse recurso aparece bastante em aplica\u00e7\u00f5es corporativas.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"26_O_que_e_um_BOM\"><\/span>26. O que \u00e9 um BOM?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-26-o-que-\u00e9-um-bom\" class=\"anchor\" aria-label=\"Permalink: 26. O que \u00e9 um BOM?\" href=\"#26-o-que-%C3%A9-um-bom\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">BOM significa:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Bill of Materials<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No Maven, um BOM permite trabalhar com um conjunto coordenado de vers\u00f5es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em vez de escolher manualmente a vers\u00e3o de cada biblioteca de um ecossistema, o projeto pode importar um BOM respons\u00e1vel por manter vers\u00f5es compat\u00edveis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esse conceito aparece bastante em frameworks modernos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O importante para o iniciante \u00e9 compreender:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">BOM n\u00e3o \u00e9 uma biblioteca comum; ele \u00e9 usado para gerenciamento consistente de vers\u00f5es.<\/p>\n<\/blockquote>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"27_Projetos_multi-modulo\"><\/span>27. Projetos multi-m\u00f3dulo<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-27-projetos-multi-m\u00f3dulo\" class=\"anchor\" aria-label=\"Permalink: 27. Projetos multi-m\u00f3dulo\" href=\"#27-projetos-multi-m%C3%B3dulo\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Maven tamb\u00e9m trabalha com projetos formados por v\u00e1rios m\u00f3dulos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sistema\/\n\u251c\u2500\u2500 pom.xml\n\u251c\u2500\u2500 dominio\/\n\u2502   \u2514\u2500\u2500 pom.xml\n\u251c\u2500\u2500 persistencia\/\n\u2502   \u2514\u2500\u2500 pom.xml\n\u2514\u2500\u2500 api\/\n    \u2514\u2500\u2500 pom.xml\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">O POM agregador pode declarar:<\/p>\n\n\n\n<div class=\"highlight highlight-text-xml\"><pre>&lt;<span class=\"pl-ent\">modules<\/span>&gt;\n    &lt;<span class=\"pl-ent\">module<\/span>&gt;dominio&lt;\/<span class=\"pl-ent\">module<\/span>&gt;\n    &lt;<span class=\"pl-ent\">module<\/span>&gt;persistencia&lt;\/<span class=\"pl-ent\">module<\/span>&gt;\n    &lt;<span class=\"pl-ent\">module<\/span>&gt;api&lt;\/<span class=\"pl-ent\">module<\/span>&gt;\n&lt;\/<span class=\"pl-ent\">modules<\/span>&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Isso permite construir v\u00e1rios m\u00f3dulos de forma coordenada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o \u00e9 necess\u00e1rio come\u00e7ar os estudos por multi-m\u00f3dulo, mas \u00e9 importante saber que Maven vai muito al\u00e9m de um \u00fanico JAR.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"28_Maven_e_Spring_Boot\"><\/span>28. Maven e Spring Boot<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-28-maven-e-spring-boot\" class=\"anchor\" aria-label=\"Permalink: 28. Maven e Spring Boot\" href=\"#28-maven-e-spring-boot\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Quem estuda Spring Boot encontra Maven rapidamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em um projeto Spring Boot, Maven pode cuidar de:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>starters;<\/li>\n\n\n\n<li>depend\u00eancias;<\/li>\n\n\n\n<li>compila\u00e7\u00e3o;<\/li>\n\n\n\n<li>testes;<\/li>\n\n\n\n<li>empacotamento;<\/li>\n\n\n\n<li>plugins;<\/li>\n\n\n\n<li>gera\u00e7\u00e3o de aplica\u00e7\u00e3o execut\u00e1vel.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Por isso, entender Maven torna mais f\u00e1cil compreender um projeto Spring.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando abrir um <code>pom.xml<\/code> de Spring Boot, procure identificar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>parent;<\/li>\n\n\n\n<li>properties;<\/li>\n\n\n\n<li>dependencies;<\/li>\n\n\n\n<li>dependencyManagement;<\/li>\n\n\n\n<li>build;<\/li>\n\n\n\n<li>plugins.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o trate o POM como um arquivo m\u00e1gico criado pela IDE.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Leia o arquivo e tente entender de onde v\u00eam as configura\u00e7\u00f5es.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"29_Maven_versus_Gradle\"><\/span>29. Maven versus Gradle<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-29-maven-versus-gradle\" class=\"anchor\" aria-label=\"Permalink: 29. Maven versus Gradle\" href=\"#29-maven-versus-gradle\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Maven n\u00e3o \u00e9 a \u00fanica ferramenta de build do ecossistema Java.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gradle \u00e9 outra op\u00e7\u00e3o bastante conhecida.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De forma simplificada:<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Maven\"><\/span>Maven<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-maven\" class=\"anchor\" aria-label=\"Permalink: Maven\" href=\"#maven\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>forte uso de conven\u00e7\u00f5es;<\/li>\n\n\n\n<li>configura\u00e7\u00e3o tradicional em XML;<\/li>\n\n\n\n<li>enorme presen\u00e7a em projetos Java;<\/li>\n\n\n\n<li>ecossistema maduro;<\/li>\n\n\n\n<li>modelo bastante previs\u00edvel.<\/li>\n<\/ul>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Gradle\"><\/span>Gradle<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-gradle\" class=\"anchor\" aria-label=\"Permalink: Gradle\" href=\"#gradle\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>scripts em Kotlin ou Groovy;<\/li>\n\n\n\n<li>alta flexibilidade;<\/li>\n\n\n\n<li>forte presen\u00e7a em projetos JVM e Android;<\/li>\n\n\n\n<li>modelo de build diferente.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o existe uma resposta universal para &#8220;qual \u00e9 melhor&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma pergunta mais \u00fatil \u00e9:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Qual ferramenta este projeto usa e eu consigo entender como o build funciona?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Para quem trabalha com Java profissionalmente, conhecer Maven continua sendo extremamente \u00fatil.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"30_Maven_substitui_Git\"><\/span>30. Maven substitui Git?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-30-maven-substitui-git\" class=\"anchor\" aria-label=\"Permalink: 30. Maven substitui Git?\" href=\"#30-maven-substitui-git\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00e3o ferramentas para problemas diferentes.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Git\"><\/span>Git<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-git\" class=\"anchor\" aria-label=\"Permalink: Git\" href=\"#git\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Controla vers\u00f5es do c\u00f3digo.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Maven-2\"><\/span>Maven<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-maven-1\" class=\"anchor\" aria-label=\"Permalink: Maven\" href=\"#maven-1\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Gerencia o build e diversos aspectos do projeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fluxo comum:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git\n \u2193\nc\u00f3digo + pom.xml\n \u2193\nMaven\n \u2193\ncompila + testa + empacota\n \u2193\nartefato\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 normal usar os dois juntos.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"31_Maven_substitui_a_IDE\"><\/span>31. Maven substitui a IDE?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-31-maven-substitui-a-ide\" class=\"anchor\" aria-label=\"Permalink: 31. Maven substitui a IDE?\" href=\"#31-maven-substitui-a-ide\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Tamb\u00e9m n\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea pode executar Maven:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pela linha de comando;<\/li>\n\n\n\n<li>pelo IntelliJ IDEA;<\/li>\n\n\n\n<li>pelo Eclipse;<\/li>\n\n\n\n<li>pelo VS Code;<\/li>\n\n\n\n<li>em um servidor CI.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Um projeto bem configurado n\u00e3o deve depender exclusivamente de uma sequ\u00eancia de cliques em uma IDE espec\u00edfica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ter um build reproduz\u00edvel pelo terminal \u00e9 uma vantagem importante.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"32_E_uma_boa_ideia_colocar_JARs_dentro_do_Git\"><\/span>32. \u00c9 uma boa ideia colocar JARs dentro do Git?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-32-\u00e9-uma-boa-ideia-colocar-jars-dentro-do-git\" class=\"anchor\" aria-label=\"Permalink: 32. \u00c9 uma boa ideia colocar JARs dentro do Git?\" href=\"#32-%C3%A9-uma-boa-ideia-colocar-jars-dentro-do-git\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Na maioria dos projetos Maven, n\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em vez de versionar arquivos bin\u00e1rios manualmente, o projeto normalmente registra as coordenadas das depend\u00eancias no POM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo conceitual:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>abordagem manual\n\nprojeto\/\n\u251c\u2500\u2500 lib\/\n\u2502   \u251c\u2500\u2500 biblioteca-a.jar\n\u2502   \u251c\u2500\u2500 biblioteca-b.jar\n\u2502   \u2514\u2500\u2500 biblioteca-c.jar\n\u2514\u2500\u2500 src\/\n\n\nabordagem Maven\n\nprojeto\/\n\u251c\u2500\u2500 pom.xml\n\u2514\u2500\u2500 src\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Existem exce\u00e7\u00f5es, mas copiar JARs manualmente n\u00e3o deve ser a solu\u00e7\u00e3o padr\u00e3o quando a biblioteca est\u00e1 dispon\u00edvel em um reposit\u00f3rio apropriado.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"33_Comandos_Maven_essenciais\"><\/span>33. Comandos Maven essenciais<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-33-comandos-maven-essenciais\" class=\"anchor\" aria-label=\"Permalink: 33. Comandos Maven essenciais\" href=\"#33-comandos-maven-essenciais\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Para que serve<\/th><\/tr><\/thead><tbody><tr><td><code>mvn --version<\/code><\/td><td>Mostra Maven, Java e ambiente<\/td><\/tr><tr><td><code>mvn clean<\/code><\/td><td>Remove resultados do build anterior<\/td><\/tr><tr><td><code>mvn compile<\/code><\/td><td>Compila o c\u00f3digo principal<\/td><\/tr><tr><td><code>mvn test<\/code><\/td><td>Executa testes<\/td><\/tr><tr><td><code>mvn package<\/code><\/td><td>Gera o pacote<\/td><\/tr><tr><td><code>mvn verify<\/code><\/td><td>Executa verifica\u00e7\u00f5es at\u00e9 a fase verify<\/td><\/tr><tr><td><code>mvn install<\/code><\/td><td>Instala o artefato no reposit\u00f3rio local<\/td><\/tr><tr><td><code>mvn deploy<\/code><\/td><td>Publica em reposit\u00f3rio remoto configurado<\/td><\/tr><tr><td><code>mvn dependency:tree<\/code><\/td><td>Exibe a \u00e1rvore de depend\u00eancias<\/td><\/tr><tr><td><code>mvn help:effective-pom<\/code><\/td><td>Mostra o POM efetivo<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea n\u00e3o precisa decorar todos no primeiro dia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma base \u00fatil \u00e9 conhecer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>clean\ntest\npackage\nverify\ninstall\ndependency:tree\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"34_Um_fluxo_de_trabalho_real\"><\/span>34. Um fluxo de trabalho real<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-34-um-fluxo-de-trabalho-real\" class=\"anchor\" aria-label=\"Permalink: 34. Um fluxo de trabalho real\" href=\"#34-um-fluxo-de-trabalho-real\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine que voc\u00ea clonou um projeto Maven.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primeiro, verifique o ambiente:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn --version<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Depois tente validar o build:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn clean verify<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Se houver problema de depend\u00eancia:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn dependency:tree<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Se n\u00e3o entender de onde veio uma configura\u00e7\u00e3o:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn help:effective-pom<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Se precisar gerar apenas o pacote:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn package<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Se outro projeto local precisar consumir aquele artefato:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn install<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Esse pequeno conjunto cobre grande parte das situa\u00e7\u00f5es comuns.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"35_Como_investigar_um_build_Maven_quebrado\"><\/span>35. Como investigar um build Maven quebrado<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-35-como-investigar-um-build-maven-quebrado\" class=\"anchor\" aria-label=\"Permalink: 35. Como investigar um build Maven quebrado\" href=\"#35-como-investigar-um-build-maven-quebrado\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Quando o build falhar, n\u00e3o adote a estrat\u00e9gia de apagar arquivos aleatoriamente at\u00e9 funcionar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use um processo.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Passo_1_%E2%80%94_leia_o_primeiro_erro_relevante\"><\/span>Passo 1 \u2014 leia o primeiro erro relevante<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-passo-1--leia-o-primeiro-erro-relevante\" class=\"anchor\" aria-label=\"Permalink: Passo 1 \u2014 leia o primeiro erro relevante\" href=\"#passo-1--leia-o-primeiro-erro-relevante\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Muitas mensagens posteriores s\u00e3o apenas consequ\u00eancia da primeira falha.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Passo_2_%E2%80%94_confira_o_ambiente\"><\/span>Passo 2 \u2014 confira o ambiente<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-passo-2--confira-o-ambiente\" class=\"anchor\" aria-label=\"Permalink: Passo 2 \u2014 confira o ambiente\" href=\"#passo-2--confira-o-ambiente\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn --version<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Confira Maven e Java.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Passo_3_%E2%80%94_faca_um_build_limpo\"><\/span>Passo 3 \u2014 fa\u00e7a um build limpo<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-passo-3--fa\u00e7a-um-build-limpo\" class=\"anchor\" aria-label=\"Permalink: Passo 3 \u2014 fa\u00e7a um build limpo\" href=\"#passo-3--fa%C3%A7a-um-build-limpo\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn clean verify<\/pre><\/div>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Passo_4_%E2%80%94_analise_dependencias\"><\/span>Passo 4 \u2014 analise depend\u00eancias<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-passo-4--analise-depend\u00eancias\" class=\"anchor\" aria-label=\"Permalink: Passo 4 \u2014 analise depend\u00eancias\" href=\"#passo-4--analise-depend%C3%AAncias\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn dependency:tree<\/pre><\/div>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Passo_5_%E2%80%94_veja_o_POM_efetivo\"><\/span>Passo 5 \u2014 veja o POM efetivo<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-passo-5--veja-o-pom-efetivo\" class=\"anchor\" aria-label=\"Permalink: Passo 5 \u2014 veja o POM efetivo\" href=\"#passo-5--veja-o-pom-efetivo\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn help:effective-pom<\/pre><\/div>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Passo_6_%E2%80%94_aumente_o_nivel_de_detalhes_apenas_se_necessario\"><\/span>Passo 6 \u2014 aumente o n\u00edvel de detalhes apenas se necess\u00e1rio<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-passo-6--aumente-o-n\u00edvel-de-detalhes-apenas-se-necess\u00e1rio\" class=\"anchor\" aria-label=\"Permalink: Passo 6 \u2014 aumente o n\u00edvel de detalhes apenas se necess\u00e1rio\" href=\"#passo-6--aumente-o-n%C3%ADvel-de-detalhes-apenas-se-necess%C3%A1rio\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Logs muito extensos podem dificultar a an\u00e1lise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primeiro entenda a mensagem principal e s\u00f3 ent\u00e3o aumente a verbosidade.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"36_Erros_comuns_de_quem_esta_comecando\"><\/span>36. Erros comuns de quem est\u00e1 come\u00e7ando<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-36-erros-comuns-de-quem-est\u00e1-come\u00e7ando\" class=\"anchor\" aria-label=\"Permalink: 36. Erros comuns de quem est\u00e1 come\u00e7ando\" href=\"#36-erros-comuns-de-quem-est%C3%A1-come%C3%A7ando\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Erro_1_%E2%80%94_editar_arquivos_dentro_de_target\"><\/span>Erro 1 \u2014 editar arquivos dentro de target<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-erro-1--editar-arquivos-dentro-de-target\" class=\"anchor\" aria-label=\"Permalink: Erro 1 \u2014 editar arquivos dentro de target\" href=\"#erro-1--editar-arquivos-dentro-de-target\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A pasta <code>target<\/code> cont\u00e9m resultados gerados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ela pode ser removida por:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn clean<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o coloque c\u00f3digo-fonte importante ali.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Erro_2_%E2%80%94_nao_conferir_o_Java_usado_pelo_Maven\"><\/span>Erro 2 \u2014 n\u00e3o conferir o Java usado pelo Maven<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-erro-2--n\u00e3o-conferir-o-java-usado-pelo-maven\" class=\"anchor\" aria-label=\"Permalink: Erro 2 \u2014 n\u00e3o conferir o Java usado pelo Maven\" href=\"#erro-2--n%C3%A3o-conferir-o-java-usado-pelo-maven\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Execute:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn --version<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A IDE e o terminal podem estar usando JDKs diferentes.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Erro_3_%E2%80%94_copiar_JAR_manualmente_sem_necessidade\"><\/span>Erro 3 \u2014 copiar JAR manualmente sem necessidade<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-erro-3--copiar-jar-manualmente-sem-necessidade\" class=\"anchor\" aria-label=\"Permalink: Erro 3 \u2014 copiar JAR manualmente sem necessidade\" href=\"#erro-3--copiar-jar-manualmente-sem-necessidade\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de criar uma pasta lib, verifique se a depend\u00eancia possui coordenadas em um reposit\u00f3rio confi\u00e1vel.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Erro_4_%E2%80%94_ignorar_dependency_tree\"><\/span>Erro 4 \u2014 ignorar dependency:tree<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-erro-4--ignorar-dependencytree\" class=\"anchor\" aria-label=\"Permalink: Erro 4 \u2014 ignorar dependency:tree\" href=\"#erro-4--ignorar-dependencytree\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Conflitos de vers\u00e3o e depend\u00eancias transitivas ficam mais claros com:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn dependency:tree<\/pre><\/div>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Erro_5_%E2%80%94_confundir_install_com_instalacao_do_programa\"><\/span>Erro 5 \u2014 confundir install com instala\u00e7\u00e3o do programa<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-erro-5--confundir-install-com-instala\u00e7\u00e3o-do-programa\" class=\"anchor\" aria-label=\"Permalink: Erro 5 \u2014 confundir install com instala\u00e7\u00e3o do programa\" href=\"#erro-5--confundir-install-com-instala%C3%A7%C3%A3o-do-programa\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>mvn install<\/code> instala o artefato no reposit\u00f3rio Maven local.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Erro_6_%E2%80%94_atualizar_tudo_cegamente\"><\/span>Erro 6 \u2014 atualizar tudo cegamente<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-erro-6--atualizar-tudo-cegamente\" class=\"anchor\" aria-label=\"Permalink: Erro 6 \u2014 atualizar tudo cegamente\" href=\"#erro-6--atualizar-tudo-cegamente\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Vers\u00e3o mais nova n\u00e3o significa atualiza\u00e7\u00e3o autom\u00e1tica sem an\u00e1lise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Leia notas de vers\u00e3o, valide compatibilidade e execute testes.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Erro_7_%E2%80%94_usar_somente_a_IDE\"><\/span>Erro 7 \u2014 usar somente a IDE<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-erro-7--usar-somente-a-ide\" class=\"anchor\" aria-label=\"Permalink: Erro 7 \u2014 usar somente a IDE\" href=\"#erro-7--usar-somente-a-ide\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Aprenda a validar o projeto pelo terminal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso ajuda a separar problemas da IDE de problemas reais do build.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Erro_8_%E2%80%94_nao_entender_heranca_de_POM\"><\/span>Erro 8 \u2014 n\u00e3o entender heran\u00e7a de POM<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-erro-8--n\u00e3o-entender-heran\u00e7a-de-pom\" class=\"anchor\" aria-label=\"Permalink: Erro 8 \u2014 n\u00e3o entender heran\u00e7a de POM\" href=\"#erro-8--n%C3%A3o-entender-heran%C3%A7a-de-pom\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Se uma vers\u00e3o n\u00e3o aparece no seu POM, ela pode ter vindo de parent, dependencyManagement, BOM ou Super POM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn help:effective-pom<\/pre><\/div>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"37_O_que_mudou_em_relacao_a_projetos_Java_antigos\"><\/span>37. O que mudou em rela\u00e7\u00e3o a projetos Java antigos?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-37-o-que-mudou-em-rela\u00e7\u00e3o-a-projetos-java-antigos\" class=\"anchor\" aria-label=\"Permalink: 37. O que mudou em rela\u00e7\u00e3o a projetos Java antigos?\" href=\"#37-o-que-mudou-em-rela%C3%A7%C3%A3o-a-projetos-java-antigos\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Em projetos antigos, era comum encontrar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>arquivos JAR versionados junto com o c\u00f3digo;<\/li>\n\n\n\n<li>scripts Ant espec\u00edficos para cada projeto;<\/li>\n\n\n\n<li>estruturas de diret\u00f3rios diferentes;<\/li>\n\n\n\n<li>configura\u00e7\u00f5es dependentes da m\u00e1quina;<\/li>\n\n\n\n<li>documenta\u00e7\u00e3o incompleta sobre como construir o sistema.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Maven ajudou a popularizar uma abordagem baseada em:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>conven\u00e7\u00f5es;<\/li>\n\n\n\n<li>metadados;<\/li>\n\n\n\n<li>coordenadas;<\/li>\n\n\n\n<li>reposit\u00f3rios;<\/li>\n\n\n\n<li>plugins reutiliz\u00e1veis;<\/li>\n\n\n\n<li>ciclo de vida padronizado.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Isso n\u00e3o significa que Maven seja perfeito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">POMs grandes podem ficar extensos e builds complexos exigem conhecimento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mesmo assim, a previsibilidade oferecida pelas conven\u00e7\u00f5es continua sendo uma das maiores vantagens.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"38_Quando_vale_a_pena_usar_Maven\"><\/span>38. Quando vale a pena usar Maven?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-38-quando-vale-a-pena-usar-maven\" class=\"anchor\" aria-label=\"Permalink: 38. Quando vale a pena usar Maven?\" href=\"#38-quando-vale-a-pena-usar-maven\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Maven \u00e9 especialmente \u00fatil quando voc\u00ea precisa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>gerenciar depend\u00eancias;<\/li>\n\n\n\n<li>automatizar build;<\/li>\n\n\n\n<li>padronizar diret\u00f3rios;<\/li>\n\n\n\n<li>executar testes;<\/li>\n\n\n\n<li>gerar JAR ou WAR;<\/li>\n\n\n\n<li>trabalhar em equipe;<\/li>\n\n\n\n<li>integrar com CI\/CD;<\/li>\n\n\n\n<li>publicar bibliotecas;<\/li>\n\n\n\n<li>usar frameworks com forte integra\u00e7\u00e3o Maven.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Para um \u00fanico arquivo Java de poucas linhas, Maven pode ser desnecess\u00e1rio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas quando aparecem testes, depend\u00eancias e empacotamento, seu valor fica evidente.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"39_Exercicio_pratico\"><\/span>39. Exerc\u00edcio pr\u00e1tico<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-39-exerc\u00edcio-pr\u00e1tico\" class=\"anchor\" aria-label=\"Permalink: 39. Exerc\u00edcio pr\u00e1tico\" href=\"#39-exerc%C3%ADcio-pr%C3%A1tico\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Crie um projeto chamado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>calculadora-maven\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>groupId: com.seunome\nartifactId: calculadora-maven\nversion: 1.0.0-SNAPSHOT\nJava: 21\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Crie:<\/p>\n\n\n\n<div class=\"highlight highlight-source-java\"><pre><span class=\"pl-k\">package<\/span> <span class=\"pl-s1\">com<\/span>.<span class=\"pl-s1\">seunome<\/span>;\n\n<span class=\"pl-k\">public<\/span> <span class=\"pl-k\">class<\/span> <span class=\"pl-smi\">Calculadora<\/span> {\n\n    <span class=\"pl-k\">public<\/span> <span class=\"pl-smi\">int<\/span> <span class=\"pl-en\">somar<\/span>(<span class=\"pl-smi\">int<\/span> <span class=\"pl-s1\">a<\/span>, <span class=\"pl-smi\">int<\/span> <span class=\"pl-s1\">b<\/span>) {\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">a<\/span> + <span class=\"pl-s1\">b<\/span>;\n    }\n\n    <span class=\"pl-k\">public<\/span> <span class=\"pl-smi\">int<\/span> <span class=\"pl-en\">subtrair<\/span>(<span class=\"pl-smi\">int<\/span> <span class=\"pl-s1\">a<\/span>, <span class=\"pl-smi\">int<\/span> <span class=\"pl-s1\">b<\/span>) {\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">a<\/span> - <span class=\"pl-s1\">b<\/span>;\n    }\n}<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Depois execute:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn clean compile<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Em seguida:<\/p>\n\n\n\n<div class=\"highlight highlight-source-shell\"><pre>mvn package<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Agora investigue a pasta <code>target<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Responda:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>onde ficou o arquivo <code>.class<\/code>?<\/li>\n\n\n\n<li>qual JAR foi gerado?<\/li>\n\n\n\n<li>de onde veio o nome do JAR?<\/li>\n\n\n\n<li>o que acontece depois de <code>mvn clean<\/code>?<\/li>\n\n\n\n<li>o que muda no nome do artefato se voc\u00ea alterar a vers\u00e3o no POM?<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Esse exerc\u00edcio ensina mais do que simplesmente decorar comandos.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"40_Desafio_leia_um_POM_real\"><\/span>40. Desafio: leia um POM real<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-40-desafio-leia-um-pom-real\" class=\"anchor\" aria-label=\"Permalink: 40. Desafio: leia um POM real\" href=\"#40-desafio-leia-um-pom-real\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Abra um projeto Java real que use Maven.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tente localizar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>groupId\nartifactId\nversion\npackaging\nproperties\ndependencies\ndependencyManagement\nbuild\nplugins\nparent\nmodules\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nem todo projeto ter\u00e1 todos esses elementos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O objetivo \u00e9 come\u00e7ar a enxergar o POM como uma descri\u00e7\u00e3o do projeto, e n\u00e3o como um grande bloco de XML misterioso.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"41_Perguntas_frequentes_sobre_Maven\"><\/span>41. Perguntas frequentes sobre Maven<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-41-perguntas-frequentes-sobre-maven\" class=\"anchor\" aria-label=\"Permalink: 41. Perguntas frequentes sobre Maven\" href=\"#41-perguntas-frequentes-sobre-maven\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Maven_e_obrigatorio_para_programar_em_Java\"><\/span>Maven \u00e9 obrigat\u00f3rio para programar em Java?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-maven-\u00e9-obrigat\u00f3rio-para-programar-em-java\" class=\"anchor\" aria-label=\"Permalink: Maven \u00e9 obrigat\u00f3rio para programar em Java?\" href=\"#maven-%C3%A9-obrigat%C3%B3rio-para-programar-em-java\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 poss\u00edvel compilar e executar Java sem Maven.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entretanto, Maven \u00e9 muito usado profissionalmente porque resolve problemas de build, depend\u00eancias e padroniza\u00e7\u00e3o.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Maven_e_uma_linguagem_de_programacao\"><\/span>Maven \u00e9 uma linguagem de programa\u00e7\u00e3o?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-maven-\u00e9-uma-linguagem-de-programa\u00e7\u00e3o\" class=\"anchor\" aria-label=\"Permalink: Maven \u00e9 uma linguagem de programa\u00e7\u00e3o?\" href=\"#maven-%C3%A9-uma-linguagem-de-programa%C3%A7%C3%A3o\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Maven \u00e9 uma ferramenta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O POM \u00e9 um documento XML declarativo.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"O_que_e_pomxml\"><\/span>O que \u00e9 pom.xml?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-o-que-\u00e9-pomxml\" class=\"anchor\" aria-label=\"Permalink: O que \u00e9 pom.xml?\" href=\"#o-que-%C3%A9-pomxml\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 o Project Object Model.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ele cont\u00e9m informa\u00e7\u00f5es do projeto e configura\u00e7\u00f5es usadas pelo Maven.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"O_que_e_a_pasta_m2\"><\/span>O que \u00e9 a pasta .m2?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-o-que-\u00e9-a-pasta-m2\" class=\"anchor\" aria-label=\"Permalink: O que \u00e9 a pasta .m2?\" href=\"#o-que-%C3%A9-a-pasta-m2\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ela \u00e9 usada para configura\u00e7\u00f5es do usu\u00e1rio Maven e, normalmente, para o reposit\u00f3rio local.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Posso_apagar_m2repository\"><\/span>Posso apagar .m2\/repository?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-posso-apagar-m2repository\" class=\"anchor\" aria-label=\"Permalink: Posso apagar .m2\/repository?\" href=\"#posso-apagar-m2repository\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Artefatos remotos podem ser baixados novamente quando necess\u00e1rios, mas apagar todo o reposit\u00f3rio local n\u00e3o deve ser a resposta autom\u00e1tica para qualquer erro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primeiro investigue a causa.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"O_que_e_Maven_Central\"><\/span>O que \u00e9 Maven Central?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-o-que-\u00e9-maven-central\" class=\"anchor\" aria-label=\"Permalink: O que \u00e9 Maven Central?\" href=\"#o-que-%C3%A9-maven-central\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 um dos principais reposit\u00f3rios p\u00fablicos de artefatos usados pelo ecossistema Maven.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"O_que_faz_mvn_clean_install\"><\/span>O que faz mvn clean install?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-o-que-faz-mvn-clean-install\" class=\"anchor\" aria-label=\"Permalink: O que faz mvn clean install?\" href=\"#o-que-faz-mvn-clean-install\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Executa o ciclo clean e depois as fases necess\u00e1rias at\u00e9 install, conforme o build configurado.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Devo_usar_package_verify_ou_install\"><\/span>Devo usar package, verify ou install?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-devo-usar-package-verify-ou-install\" class=\"anchor\" aria-label=\"Permalink: Devo usar package, verify ou install?\" href=\"#devo-usar-package-verify-ou-install\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Depende do objetivo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>quer gerar o pacote: <code>package<\/code>;<\/li>\n\n\n\n<li>quer validar o build at\u00e9 as verifica\u00e7\u00f5es configuradas: <code>verify<\/code>;<\/li>\n\n\n\n<li>precisa instalar o artefato no reposit\u00f3rio local: <code>install<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o use install apenas por h\u00e1bito quando verify j\u00e1 atende sua necessidade.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Maven_funciona_apenas_com_Java\"><\/span>Maven funciona apenas com Java?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-maven-funciona-apenas-com-java\" class=\"anchor\" aria-label=\"Permalink: Maven funciona apenas com Java?\" href=\"#maven-funciona-apenas-com-java\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Seu foco hist\u00f3rico \u00e9 o ecossistema Java\/JVM, mas o sistema de plugins permite integrar outras ferramentas e tarefas ao build.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"42_Checklist_voce_entendeu_o_basico_de_Maven\"><\/span>42. Checklist: voc\u00ea entendeu o b\u00e1sico de Maven?<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-42-checklist-voc\u00ea-entendeu-o-b\u00e1sico-de-maven\" class=\"anchor\" aria-label=\"Permalink: 42. Checklist: voc\u00ea entendeu o b\u00e1sico de Maven?\" href=\"#42-checklist-voc%C3%AA-entendeu-o-b%C3%A1sico-de-maven\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de considerar este assunto conclu\u00eddo, tente explicar sem consultar o artigo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>o que \u00e9 Maven;<\/li>\n\n\n\n<li>o que significa build;<\/li>\n\n\n\n<li>para que serve o POM;<\/li>\n\n\n\n<li>o que s\u00e3o groupId, artifactId e version;<\/li>\n\n\n\n<li>o que significa SNAPSHOT;<\/li>\n\n\n\n<li>onde fica o c\u00f3digo principal;<\/li>\n\n\n\n<li>onde ficam os testes;<\/li>\n\n\n\n<li>para que serve target;<\/li>\n\n\n\n<li>diferen\u00e7a entre clean, package, verify e install;<\/li>\n\n\n\n<li>o que \u00e9 reposit\u00f3rio local;<\/li>\n\n\n\n<li>o que \u00e9 reposit\u00f3rio remoto;<\/li>\n\n\n\n<li>o que \u00e9 Maven Central;<\/li>\n\n\n\n<li>o que \u00e9 depend\u00eancia transitiva;<\/li>\n\n\n\n<li>para que serve dependency:tree;<\/li>\n\n\n\n<li>diferen\u00e7a entre depend\u00eancia e plugin;<\/li>\n\n\n\n<li>diferen\u00e7a entre fase e goal;<\/li>\n\n\n\n<li>o que \u00e9 POM efetivo;<\/li>\n\n\n\n<li>por que Maven Wrapper \u00e9 \u00fatil;<\/li>\n\n\n\n<li>o que dependencyManagement faz;<\/li>\n\n\n\n<li>o que \u00e9 um BOM.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Se voc\u00ea consegue explicar esses pontos com suas pr\u00f3prias palavras, j\u00e1 possui uma base de Maven muito mais \u00fatil do que apenas saber executar <code>mvn install<\/code>.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"43_Mapa_mental\"><\/span>43. Mapa mental<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-43-mapa-mental\" class=\"anchor\" aria-label=\"Permalink: 43. Mapa mental\" href=\"#43-mapa-mental\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Guarde este fluxo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>            pom.xml\n               \u2502\n               \u251c\u2500\u2500 identidade\n               \u251c\u2500\u2500 propriedades\n               \u251c\u2500\u2500 depend\u00eancias\n               \u2514\u2500\u2500 plugins\n               \u2502\n               \u25bc\n             Maven\n               \u2502\n      \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n      \u25bc        \u25bc         \u25bc\n   compile    test     package\n      \u2502        \u2502         \u2502\n      \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n               \u2502\n               \u25bc\n            verify\n               \u2502\n               \u25bc\n            install\n               \u2502\n               \u25bc\n             deploy\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A ideia central \u00e9:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Maven fornece um modelo padronizado para descrever, construir, testar e distribuir projetos.<\/p>\n<\/blockquote>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Conclusao\"><\/span>Conclus\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-conclus\u00e3o\" class=\"anchor\" aria-label=\"Permalink: Conclus\u00e3o\" href=\"#conclus%C3%A3o\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O Maven nasceu para reduzir a desorganiza\u00e7\u00e3o do processo de build e criar uma maneira mais uniforme de trabalhar com projetos Java.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sua import\u00e2ncia n\u00e3o est\u00e1 apenas em baixar bibliotecas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ele conecta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>estrutura do projeto\n       +\n     pom.xml\n       +\n   depend\u00eancias\n       +\n     plugins\n       +\n ciclo de vida\n       \u2193\n build reproduz\u00edvel\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A melhor maneira de aprender Maven \u00e9 utiliz\u00e1-lo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crie um projeto pequeno, execute os comandos pelo terminal, examine a pasta <code>target<\/code>, veja a \u00e1rvore de depend\u00eancias e leia o POM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Depois fa\u00e7a o mesmo em um projeto Spring Boot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando voc\u00ea deixa de enxergar Maven como &#8220;aquele XML enorme&#8221; e passa a compreender seu modelo, o funcionamento de muitos projetos Java profissionais come\u00e7a a fazer sentido.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Referencias_oficiais\"><\/span>Refer\u00eancias oficiais<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-refer\u00eancias-oficiais\" class=\"anchor\" aria-label=\"Permalink: Refer\u00eancias oficiais\" href=\"#refer%C3%AAncias-oficiais\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apache Maven \u2014 Introduction: <a href=\"https:\/\/maven.apache.org\/what-is-maven\" target=\"_blank\" rel=\"noopener\">https:\/\/maven.apache.org\/what-is-maven<\/a><br><\/li>\n\n\n\n<li>Apache Maven \u2014 Getting Started Guide: <a href=\"https:\/\/maven.apache.org\/guides\/getting-started\/index.html\" target=\"_blank\" rel=\"noopener\">https:\/\/maven.apache.org\/guides\/getting-started\/index.html<\/a><br><\/li>\n\n\n\n<li>Apache Maven \u2014 Maven in 5 Minutes: <a href=\"https:\/\/maven.apache.org\/guides\/getting-started\/maven-in-five-minutes\" target=\"_blank\" rel=\"noopener\">https:\/\/maven.apache.org\/guides\/getting-started\/maven-in-five-minutes<\/a><br><\/li>\n\n\n\n<li>Apache Maven \u2014 Introduction to the POM: <a href=\"https:\/\/maven.apache.org\/guides\/introduction\/introduction-to-the-pom.html\" target=\"_blank\" rel=\"noopener\">https:\/\/maven.apache.org\/guides\/introduction\/introduction-to-the-pom.html<\/a><br><\/li>\n\n\n\n<li>Apache Maven \u2014 Build Lifecycle: <a href=\"https:\/\/maven.apache.org\/guides\/introduction\/introduction-to-the-lifecycle.html\" target=\"_blank\" rel=\"noopener\">https:\/\/maven.apache.org\/guides\/introduction\/introduction-to-the-lifecycle.html<\/a><br><\/li>\n\n\n\n<li>Apache Maven \u2014 Dependency Mechanism: <a href=\"https:\/\/maven.apache.org\/guides\/introduction\/introduction-to-dependency-mechanism.html\" target=\"_blank\" rel=\"noopener\">https:\/\/maven.apache.org\/guides\/introduction\/introduction-to-dependency-mechanism.html<\/a><br><\/li>\n\n\n\n<li>Apache Maven \u2014 Standard Directory Layout: <a href=\"https:\/\/maven.apache.org\/guides\/introduction\/introduction-to-the-standard-directory-layout.html\" target=\"_blank\" rel=\"noopener\">https:\/\/maven.apache.org\/guides\/introduction\/introduction-to-the-standard-directory-layout.html<\/a><br><\/li>\n\n\n\n<li>Apache Maven \u2014 Release History: <a href=\"https:\/\/maven.apache.org\/docs\/history.html\" target=\"_blank\" rel=\"noopener\">https:\/\/maven.apache.org\/docs\/history.html<\/a><br><\/li>\n<\/ul>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Proximos_estudos_recomendados\"><\/span>Pr\u00f3ximos estudos recomendados<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-pr\u00f3ximos-estudos-recomendados\" class=\"anchor\" aria-label=\"Permalink: Pr\u00f3ximos estudos recomendados\" href=\"#pr%C3%B3ximos-estudos-recomendados\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Depois deste conte\u00fado, avance para:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>criar um projeto Maven com testes JUnit;<\/li>\n\n\n\n<li>estudar Maven Surefire Plugin;<\/li>\n\n\n\n<li>aprofundar dependencyManagement e BOM;<\/li>\n\n\n\n<li>criar um projeto multi-m\u00f3dulo;<\/li>\n\n\n\n<li>utilizar Maven Wrapper;<\/li>\n\n\n\n<li>analisar o POM de um projeto Spring Boot;<\/li>\n\n\n\n<li>integrar Maven em pipelines de CI\/CD.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Ideia central:<\/strong> Maven vale mais quando voc\u00ea entende o modelo de projeto e o ciclo de build, em vez de apenas decorar uma lista de comandos.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Veja tamb\u00e9m: <a href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/category\/java\/\">mais conte\u00fados sobre Java<\/a>.<\/p>\n\n\n    <article class=\"aabp-card aabp-style-card\">\n                            <a href=\"https:\/\/link.amazon\/B0e5cwZRO\" target=\"_blank\" rel=\"nofollow sponsored noopener\" class=\"aabp-image\">\n                <img decoding=\"async\" src=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2026\/10\/91O1yb7YmL._SL1500_1.jpg\" alt=\"Maven: The Definitive Guide (English Edition)\" loading=\"lazy\">\n            <\/a>\n                <div class=\"aabp-content\">\n            <h3><span class=\"ez-toc-section\" id=\"Maven_The_Definitive_Guide_English_Edition\"><\/span>Maven: The Definitive Guide (English Edition)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n            <div class=\"aabp-rating\">\u2b50 4.2\/5<\/div>            <p>Maven: The Definitive Guide (English Edition). Produto recomendado para estudos, programa\u00e7\u00e3o e produtividade.<\/p>            <div class=\"aabp-price-row\">\n                <span class=\"aabp-old-price\">R$ 222,74<\/span>                <strong class=\"aabp-price\">R$ 178,19<\/strong>            <\/div>\n            <a class=\"aabp-button\" href=\"https:\/\/link.amazon\/B0e5cwZRO\" target=\"_blank\" rel=\"nofollow sponsored noopener\">Ver na Amazon<\/a>\n            <small class=\"aabp-disclaimer\">Como afiliado, posso receber comiss\u00e3o por compras qualificadas.<\/small>\n        <\/div>\n    <\/article>\n    \n","protected":false},"excerpt":{"rendered":"<p>Guia pr\u00e1tico de Maven no Java: entenda o POM, estrutura de projeto, ciclo de vida, depend\u00eancias, reposit\u00f3rios, plugins e comandos essenciais.<\/p>\n","protected":false},"author":1,"featured_media":1593,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[644,646,647,5,4,648,645],"class_list":["post-1590","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-maven","tag-build","tag-dependencias","tag-ferramentas-java","tag-java","tag-maven","tag-maven-central","tag-pom"],"_links":{"self":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1590"}],"version-history":[{"count":2,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1590\/revisions"}],"predecessor-version":[{"id":1596,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1590\/revisions\/1596"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/1593"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}