{"id":688,"date":"2025-07-02T09:03:39","date_gmt":"2025-07-02T09:03:39","guid":{"rendered":"https:\/\/blogs.ua.es\/jpm33\/?p=688"},"modified":"2025-07-04T08:49:39","modified_gmt":"2025-07-04T08:49:39","slug":"apache-maven-comandos-utiles","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/jpm33\/2025\/07\/02\/apache-maven-comandos-utiles\/","title":{"rendered":"Apache Maven: Comandos utiles"},"content":{"rendered":"\n<p>Apache Maven es una <strong>herramienta de gesti\u00f3n de proyectos<\/strong> que automatiza la <strong>construcci\u00f3n, informe y documentaci\u00f3n de software<\/strong>. Usa un archivo <strong>POM (Project Object Model)<\/strong> basado en XML para definir c\u00f3mo se construye un proyecto, sus dependencias y c\u00f3mo se empaqueta. Esto estandariza el proceso, permitiendo que cualquier desarrollador compile, pruebe y empaquete un proyecto de forma consistente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blogs.ua.es\/jpm33\/files\/2025\/07\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"489\" height=\"51\" src=\"https:\/\/blogs.ua.es\/jpm33\/files\/2025\/07\/image-1.png\" alt=\"\" class=\"wp-image-698\" \/><\/a><\/figure>\n\n\n\n<p>Conocer los <strong>comandos de Maven<\/strong> es clave porque te da control total sobre el ciclo de vida de tu proyecto. Te permite <strong>automatizar tareas<\/strong>, <strong>gestionar dependencias<\/strong>, <strong>depurar problemas de construcci\u00f3n<\/strong> y <strong>personalizar el proceso<\/strong>. Dominar estos comandos te har\u00e1 m\u00e1s <strong>productivo y aut\u00f3nomo<\/strong> al manejar proyectos de software.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><strong>Comandos b\u00e1sicos y del ciclo de vida<\/strong><\/p>\n\n\n\n<p>El ciclo de vida de Maven es un concepto fundamental que define una secuencia estandarizada de etapas, o &#8220;fases&#8221;, por las que pasa un proyecto durante su construcci\u00f3n y gesti\u00f3n. En lugar de ejecutar tareas individuales de forma desordenada, Maven agrupa las operaciones comunes (como compilar, probar, empaquetar e instalar) en estas fases predefinidas. Existen tres ciclos de vida principales: <code>clean<\/code> (para limpiar el proyecto), <code>default<\/code> o <code>build<\/code> (el principal, que gestiona la construcci\u00f3n y despliegue), y <code>site<\/code> (para generar la documentaci\u00f3n del proyecto). Cuando ejecutas un comando de Maven especificando una fase (por ejemplo, <code>mvn package<\/code>), Maven autom\u00e1ticamente ejecuta todas las fases anteriores en ese ciclo de vida en el orden correcto, asegurando una construcci\u00f3n consistente y repetible. Cada fase, a su vez, est\u00e1 compuesta por &#8220;goals&#8221; (objetivos) que son acciones concretas realizadas por plugins de Maven. <\/p>\n\n\n\n<p>La siguiente imagern representa este ciclo de vida:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blogs.ua.es\/jpm33\/files\/2025\/07\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/blogs.ua.es\/jpm33\/files\/2025\/07\/image.png\" alt=\"\" class=\"wp-image-697\" \/><\/a><\/figure>\n\n\n\n<p>Es posible ejecutar las diferentes fases con los comandos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>mvn clean<\/code><\/strong>: Limpia el directorio del proyecto, eliminando los archivos generados por compilaciones anteriores (como el directorio <code>target\/<\/code>).<\/li>\n\n\n\n<li><strong><code>mvn validate<\/code><\/strong>: Valida que el proyecto sea correcto y que toda la informaci\u00f3n necesaria est\u00e9 disponible.<\/li>\n\n\n\n<li><strong><code>mvn compile<\/code><\/strong>: Compila el c\u00f3digo fuente del proyecto.<\/li>\n\n\n\n<li><strong><code>mvn test<\/code><\/strong>: Ejecuta las pruebas unitarias del proyecto.<\/li>\n\n\n\n<li><strong><code>mvn package<\/code><\/strong>: Compila el c\u00f3digo, ejecuta las pruebas y empaqueta el c\u00f3digo compilado en un formato distribuible (por ejemplo, un JAR o WAR).<\/li>\n\n\n\n<li><strong><code>mvn verify<\/code><\/strong>: Ejecuta las verificaciones sobre el paquete resultante para asegurar la calidad. Esto suele incluir la ejecuci\u00f3n de pruebas de integraci\u00f3n.<\/li>\n\n\n\n<li><strong><code>mvn install<\/code><\/strong>: Instala el paquete en el repositorio local de Maven, haci\u00e9ndolo disponible para otros proyectos locales.<\/li>\n\n\n\n<li><strong><code>mvn deploy<\/code><\/strong>: Copia el paquete final al repositorio remoto para compartirlo con otros desarrolladores y proyectos.<\/li>\n<\/ul>\n\n\n\n<p><strong>Comandos \u00fatiles para el desarrollo y la depuraci\u00f3n<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>mvn clean install<\/code>: Una combinaci\u00f3n muy com\u00fan que limpia y luego instala el proyecto en el repositorio local.<\/li>\n\n\n\n<li><code>mvn clean package -DskipTests<\/code>: Limpia y empaqueta el proyecto, pero omite la ejecuci\u00f3n de las pruebas. \u00datil cuando solo quieres construir r\u00e1pidamente y sabes que las pruebas ya pasan o no son relevantes en ese momento.<\/li>\n\n\n\n<li><code>mvn test -Dtest=NombreDeTuClaseDeTest<\/code>: Ejecuta solo una clase de prueba espec\u00edfica.<\/li>\n\n\n\n<li><code>mvn jetty:run<\/code> (o <code>tomcat7:run<\/code>, <code>spring-boot:run<\/code> dependiendo del plugin): Inicia un servidor web embebido para ejecutar tu aplicaci\u00f3n (com\u00fan en proyectos web).<\/li>\n\n\n\n<li><code>mvn dependency:tree<\/code>: Muestra el \u00e1rbol de dependencias del proyecto, lo que es muy \u00fatil para depurar conflictos de dependencias.<\/li>\n\n\n\n<li><code>mvn help:effective-pom<\/code>: Muestra el POM efectivo del proyecto, incluyendo las configuraciones heredadas de los POMs parentales y de los perfiles. Esto es invaluable para entender c\u00f3mo Maven est\u00e1 resolviendo la configuraci\u00f3n de tu proyecto.<\/li>\n\n\n\n<li><code>mvn help:active-profiles<\/code>: Lista los perfiles de Maven que est\u00e1n activos para la construcci\u00f3n actual.<\/li>\n\n\n\n<li><code>mvn help:describe -Dplugin=compiler<\/code>: Muestra informaci\u00f3n sobre un plugin espec\u00edfico de Maven (en este caso, el plugin de compilaci\u00f3n).<\/li>\n\n\n\n<li><code>mvn -X<\/code> o <code>mvn --debug<\/code>: Ejecuta Maven en modo depuraci\u00f3n, mostrando informaci\u00f3n mucho m\u00e1s detallada sobre lo que est\u00e1 haciendo. \u00datil para diagnosticar problemas complejos.<\/li>\n\n\n\n<li><code>mvn -B<\/code> o <code>mvn --batch-mode<\/code>: Ejecuta Maven en modo &#8220;batch&#8221;, lo que suprime las interacciones de usuario y reduce la verbosidad de la salida. Ideal para scripts de CI\/CD.<\/li>\n<\/ul>\n\n\n\n<p><strong>Comandos para la gesti\u00f3n de dependencias<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>mvn dependency:analyze<\/code>: Analiza las dependencias del proyecto para encontrar dependencias no utilizadas o declaradas pero no usadas.<\/li>\n\n\n\n<li><code>mvn dependency:resolve<\/code>: Resuelve y muestra todas las dependencias del proyecto.<\/li>\n\n\n\n<li><code>mvn dependency:get<\/code>: Descarga una dependencia de un proyecto desde el repositorio.<\/li>\n<\/ul>\n\n\n\n<p><strong>Comandos para generar proyectos<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>mvn archetype:generate<\/code>: Genera un nuevo proyecto Maven basado en un arquetipo. Es la forma m\u00e1s com\u00fan de iniciar un nuevo proyecto. Por ejemplo ( para generar un proyecto r\u00e1pido):<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart<\/code><\/pre>\n\n\n\n<p><strong>Comandos de gesti\u00f3n de versiones<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>mvn versions:display-dependency-updates<\/code>: Muestra las actualizaciones disponibles para las dependencias de tu proyecto.<\/li>\n\n\n\n<li><code>mvn versions:display-plugin-updates<\/code>: Muestra las actualizaciones disponibles para los plugins de tu proyecto.<\/li>\n\n\n\n<li><code>mvn versions:set -DnewVersion=1.0.1-SNAPSHOT<\/code>: Cambia la versi\u00f3n del proyecto (\u00fatil en flujos de trabajo de lanzamiento).<\/li>\n<\/ul>\n\n\n\n<p><strong>Consideraciones adicionales<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Perfiles de Maven<\/strong>: Puedes activar perfiles espec\u00edficos usando <code>-Pnombre-del-perfil<\/code>. Por ejemplo: <code>mvn clean install -Pproduccion<\/code>.<\/li>\n\n\n\n<li><strong>Propiedades del sistema<\/strong>: Puedes pasar propiedades del sistema a Maven usando <code>-Dnombre=valor<\/code>. Esto es muy com\u00fan para configurar cosas como la omisi\u00f3n de pruebas (<code>-DskipTests<\/code>) o la configuraci\u00f3n del entorno.<\/li>\n\n\n\n<li><strong>pom.xml<\/strong>: La configuraci\u00f3n de todos estos comandos y del proyecto en s\u00ed se encuentra en el archivo <code>pom.xml<\/code>.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apache Maven es una herramienta de gesti\u00f3n de proyectos que automatiza la construcci\u00f3n, informe y documentaci\u00f3n de software. Usa un archivo POM (Project Object Model) basado en XML para definir c\u00f3mo se construye un proyecto, sus dependencias y c\u00f3mo se &hellip; <a href=\"https:\/\/blogs.ua.es\/jpm33\/2025\/07\/02\/apache-maven-comandos-utiles\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3080,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[374],"tags":[408,236750,236718],"class_list":["post-688","post","type-post","status-publish","format-standard","hentry","category-programacion","tag-java","tag-maven","tag-programacion-2"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/688","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/users\/3080"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/comments?post=688"}],"version-history":[{"count":6,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/688\/revisions"}],"predecessor-version":[{"id":704,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/688\/revisions\/704"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/media?parent=688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/categories?post=688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/tags?post=688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}