Maven en Eclipse
Es muy fácil trabajar con Maven en Eclipse. Si no sabes lo que es Maven, o te suenan extrañas las palabras "arqueotipo", "artefacto", "ciclo de vida por defecto", "fases Maven", etc, así como si quieres profundizar un poco más en Maven; te recomiendo que leas este primer artículo donde lo explicamos en detalle. Vamos a hacer lo mismo que hicimos con la consola de comandos, en ese otro artículo que te comenté antes, con Eclipse.
Una pregunta muy común es si para Maven ¿Es mejor Eclipse o Consola de comandos? La respuesta es lo que más te guste. Hay quien prefiere la consola, si has leído el artículo anterior habrás comprobado que es muy sencillo. Mis argumentos para usar el plugin de Maven en Eclipse son la comodidad, rapidez y optimización que aporta al desarrollo, además de la posibilidad de autocompletar y ayudas para Maven.
Para realizar este proyecto vamos a utilizar Eclipse con las herramientas ya integradas (como el plugin de Maven). Lo podemos descargar el eclipse que se llama “Eclipse IDE for Java EE Developers” desde https://www.eclipse.org/downloads/
Decir que este Eclipse lleva un Maven embebido, lo que quiere decir que no hace falta que hayamos descargado Maven de la página de Maven, como hicimos en el anterior artículo. Sí que recomiendo descargar Maven como hicimos antes, para disponer de la última versión de Maven, ya que la embebida en Eclipse suele ir alguna versión retrasada.
Creamos un nuevo proyecto Maven. Como se hace habitualmente en Eclipse, pulsamos con el botón derecho del ratón en el área en blanco llamada “Project Explorer”. Seleccionamos en el desplegable en “New” y luego en “Other…”.
En la ventana que se abre buscamos la carpeta “Maven”, seleccionamos el tipo de proyecto “Maven Project” y pulsamos “Next”
En la siguiente parte del asistente podemos seleccionar la casilla “Create a simple Project (skip archetype selection)”, así nos creará un proyecto simple automáticamente, sin tener que seleccionar un arqueotipo. Si dejamos sin seleccionar la casilla, nos aparecerá un buscador para elegir el arqueotipo.
Para este ejemplo vamos a descargar un arqueotipo simple (el mismo que descargamos con la consola de comandos). Para ello dejamos la casilla desmarcada y pulsamos “Next”.
Podremos seleccionar un arqueotipo de los que ya están por defecto o desde alguna ubicación. Para este ejemplo seleccionaremos el que tiene de “Group Id” como “org.apache.maven.archetypes”, y de “Artifact Id” como “maven-archetype-quickstart”. Pulsamos “Next”.
Ya solo nos queda configurar nuestro proyecto –al igual que hicimos antes en la consola- poner el “Group Id” (yo he puesto de ejemplo “com.jarroba.ejemplo”) y el “Artifact Id” (he puesto de ejemplo “nombreDeMiProyecto”). Pulsamos sobre “Finish”.
Puede suscitar la duda de: ¿Si el arqueotipo tiene un “Group Id” y un “Artifact Id”, ¿Por qué tengo que escribir otros nuevos? Los que sirvieron para filtrar son los datos que pusieron los creadores de ese arqueotipo cuando hicieron el proyecto nuevo; como nosotros vamos a crear un nuevo proyecto, lo tenemos que poner con nuestros datos personales, no con los de otra persona (si nuestro proyecto se convirtiera algún día en arqueotipo de otros desarrolladores, otros desarrolladores lo buscarían con nuestros datos, y los sustituirían con los suyos).
Ya tendremos nuestro proyecto creado con los “Hello Word!”, igualito igualito a como hicimos en la consola 🙂
Programar con Maven en Eclipse
Primero vamos a ver una prueba de utilizar los comandos del ciclo de vida de un proyecto con Maven.
Pulsamos con el botón derecho sobre el proyecto para elegir “Run As”. En el desplegable podremos comprobar como hay ya varios comandos pre-configurados por el plugin de Maven en Eclipse; es decir, que pulsando un botón ejecutaremos estos comandos sin tener que escribir una palabra en la línea de comandos.
Si por ejemplo pulsamos sobre “Maven test”, en la “Console” de Eclipse nos mostrará la siguiente salida de Maven.
Te habrás fijado que nos aparece un Warning en el proyecto (triángulo amarillo con exclamación). Que si vamos a la pestaña inferior de Eclipse llamada “Markers” leeremos lo siguiente:
Java Build Path Problems
Build path specifies execution environment J2SE-1.5. There are no JREs installed in the workspace that are strictly compatible with this environment.
Nos está avisando que no encuentra el JRE de Java.
Para corregirlo vamos a añadir un plugin, para que Maven se encargue de gestionar por nosotros el JRE (podríamos hacerlo manual desde Eclipse, pero así ejemplifico como se usan los plugins, y es mucho más cómodo).
Para ello vayamos al bien amado POM. Al abrir el archivo en Eclipse tenemos que pulsar la pestaña “pom.xml”, el de resto de pestañas son asistentes para configurar el POM de una manera más sencilla, que aquí no entraremos pero échalas un vistazo que son útiles.
Y añadimos los tag de apertura y cierre para <build>. Dentro de estos añadimos el que se llama <pluginManagement> para que nos gestione los plugins. A su vez estará el de <plugins> en plural que contendrá <plugin>. Y utilizaremos el plugin llamado “maven-compiler-plugin”, al que le diremos que queremos tanto “source” como el “target” a la última versión del JRE que tengamos instalado (yo tengo instalado el “1.8”). Por lo que insertaremos el siguiente código dentro de las etiquetas <project>:
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </pluginManagement> </build>
Quedará como la siguiente imagen. Y hay que guardar el fichero del “pom.xml”.
Veremos que no solo no nos ha corregido el problema sino que nos ha puesto otro ¡y de los rojos! No hay problema, simplemente que falta una cosa.
Maven Problems
Project configuration is not up-to-date with pom.xml Run Maven->Update Project or use Quick Fix.
Lo que falta es actualizar el proyecto. Todo lo que insertemos entre las llaves <build> requiere de un tratamiento especial de actualización, muy sencillo.
Para ello con el botón derecho sobre el proyecto, pulsamos en “Maven” y luego en “Update Project…”
La ventana que se nos abre, seleccionaremos nuestro proyecto y le diremos que actualice la configuración desde el “pom.xml” marcando “Update Project configuration from pom.xml”. Por defecto estará todo ya seleccionado y listo, por lo que no tendremos que seleccionar nada más (te marco en rojo en la imagen los check para que veas que esté todo correcto) y pulsamos “OK”.
Tarda unos segundos en procesar. Para comprobar que nos han desaparecido todos los problemas 😀
Ya tenemos el proyecto limpio de problemas. Solo queda programar.
Aprovecho y te explico que hemos hecho. Hemos utilizado la siguiente etiqueta <build>.
Configuración de construcción <build>: se ocupa de declarar la estructura del proyecto, gestionar plugins, y configura los informes. <build> hace otras muchas cosas, aquí vamos a explicar dos etiquetas que puede contener directamente <pluginManagement> o <plugins>.
<pluginManagement>: Es casi lo mismo que no poner esta etiqueta. La única diferencia es que en lugar de la configuración la información del plugin para esta construcción del proyecto en particular, se pretende configurar la construcción del proyecto que hereda de este al usar esta etiqueta de gestión de plugins. Solo configura los plugins que son referenciados dentro de elementos de los plugins de los hijos. Los hijos tienen todo el derecho de sobrescribir lo que se ha definido en el <pluginManagement> Contiene <plugins>
<plugins>: los plugins nos aportan funcionalidades extra. En el ejemplo del código, el plugin nos configura automáticamente el proyecto para que sea compatible con el JRE de Java para la versión “1.8”. <plugins> puede estar tanto dentro como fuera de <pluginManagement>, dependiendo de lo que necesitemos. Cada plugin se define en singular <plugin>.
<plugin>: Un plugin tiene algunos de los siguiente elementos:
- <groupId>, <artifactId>, <version>: un plugin sigue siendo un proyecto Maven que ha hecho otro desarrollador o nosotros mismos.
- <extensions>: si “true” carga las extensiones de este plugin, “false” en caso contrario. Por defecto está a “false”.
- <inherited>: si “true” aplica la configuración del plugin a los POM que hereden de éste, “false” en caso contrario. Por defecto está a “false”.
- <configuration>: cada plugin tendrá unas configuraciones específicas. En el código de ejemplo pide dos valores de entrada <source> y <target>, pero variarán en cada plugin. Se puede decir que son los “setter” o los parámetros de construcción del plugin; es decir, los parámetros que quiera el que desarrolló el plugin.
- <dependencies>: puede tener también dependencias (bibliotecas) que sean necesarias para la ejecución del plugin.
- <executions>: Un plugin podría tener múltiples objetivos (goals). Cada objetivo podría tener una configuración separada, posiblemente incluso unida a un objetivo del plugin a otra fase diferente. Configura la ejecución de los objetivos de un plugin.
- <id>: Especifica el bloque de ejecución entre todos los demás.
- <goals>: Contiene una lista de elementos de objetivos <goal>.
- <phase>: Esta será la fase que la lista de objetivos ejecutará. Permite la unión de cualquier objetivo a una fase en el ciclo de vida de construcción, alterando al que está por defecto en Maven.
Un ejemplo rápido de programación con dependencias sería: Imaginemos que queremos utilizar objetos JSON serializados en objetos (un objeto simple POJO que se convierta en un JSON). Investigamos un poco y pensamos que una buena idea sería utilizar la biblioteca Gson que nos hace este trabajo. Gson es una biblioteca que ha desarrollado Google, por lo que tendríamos que ir a descargarla desde algún lado e importarla. Mucho más sencillo con Maven, vamos a la página de http://mvnrepository.com/ y buscamos la última versión de Gson .
Nos copiamos la dependencia de Maven al POM de nuestro proyecto dentro de <dependencies> (le podemos poner un <scope> si queremos):
Ahora guardamos el POM y construimos nuestro proyecto para que nos la traiga desde el repositorio http://mvnrepository.com/ a nuestro ordenador.
Cuando termine de trabajar Maven.
Ya podremos abrir nuestras clases Java y empezar a trabajar. Como en el siguiente ejemplo la biblioteca Gson:
Te he ayudado a pasar la puerta, el resto del programa ya es cosa tuya 😀
Saludos, agrege a mi pom.xml algunas dependecias referentes a http cliente/core etc cuando hago el install del maven y esta estan build success pero al quere subir jar de mi aplicacion estas me generan un error. esta dependecia apache las tengo localmente funciona bien si la llamo como Add External Jars pero si la agrego como dependencia a mi pom.xml hago el install y creo el jar esta no me funcionan. como podria funcionar mis proyecta sin tener que usarlas localmente.
Parece que no está configurado el pom de Maven para añadir las dependencias al proyecto actual antes de crear el JAR. Para ello puedes configurar Maven para copiar las dependencias al proyecto actual como sugieren en la siguiente web https://www.baeldung.com/executable-jar-with-maven
Saludos Ramon..
Buen articulo
Tengo una duda se puede añadir jpa usando los wizards de eclipse en un proyecto maven ya creado.
Buenas Jonathan.
Eclipse tenía un Wizard para gestionar las dependencias. Sino lo trae preinstalado, lo puedes instalar desde el instalador de paquetes integrado en Eclipse (desde su market place, su ficha y como se instala en https://marketplace.eclipse.org/content/maven-java-ee-integration-eclipse-wtp-lunamars#group-screenshots).
Luego solo te queda buscar las dependencias que te interesen. Para JPA las puedes ver en https://mvnrepository.com/tags/jpa
hola disculpa porque no me aparece el mave en mis opciones para crear un nuevo proyecto ? gracias
Buenas Christian. Lo que comentas podría ser por que el proyecto no sea un proyecto Maven (para convertir el proyecto selecciónalo con el botón derecho del ratón y en el menú contextua ve a: «Configure»/»Convert to Maven project»), también podría ser que no esté instalado el plugin de Maven en Eclipse (https://www.eclipse.org/m2e/), o que no esté instalado correctamente Maven en el ordenador (más información en https://jarroba.com/maven/)
Hola Ramón. ¿Por qué cuando le das nombre al group Id empieza por un «com.» ? He visto más tutoriales por ahí y también lo hacen, pero la verdad es que no entiendo el porqué.
Muchas gracias y un abrazo.
Es lo que se conoce como «espacios de nombres», para evitar que haya nombres coincidentes. Por ejemplo, imagina que tu creas un programa que tiene una clase llamada «mi_clase», lo más seguro es que haya miles en el mundo de personas que llamen a esa clase igual que tú; si existieran en tu ordenador varios programas con el mismo nombre de clase crearía un conflicto en donde se ejecutara, pues no sabría si apuntar a tu clase o a la de otro (esto es un resumen rápido, más información en https://es.wikipedia.org/wiki/Espacio_de_nombres).
Ahora bien, el «com» (o «es», «eu», etc.) es la extensión del dominio de la URL de la web del que va a programar la aplicación (esta página web se llama «jarroba.com», más información en https://jarroba.com/cliente-servidor-peticion-del-cliente/ ). Por convención se decidió invertir el orden del dominio de la web para que sirva de prefijo para los espacios de nombres (para «Jarroba.com» el prefijo de los espacios de nombres sería «com.jarroba») y luego el identificador de lo que sea (para el ejemplo de antes de las clases, sería «com.jarroba.mi_clase» que sería completamente distinguible de otro cualquiera con el mismo nombre de clase como «com.empresa.mi_clase»).
Este mensaje me sale cuando hago maven install
Plugin com.mysema.maven:apt-maven-plugin:1.1.3 or one of its dependencies could not be resolved: Failed to read artifact descriptor for com.mysema.maven:apt-maven-plugin:jar:1.1.3: Could not transfer artifact com.mysema.maven:apt-maven-plugin:pom:1.1.3 from/to central (http://repo.maven.apache.org/maven2): Connection refused: no further information to http://repo.maven.apache.org/maven2/com/mysema/maven/apt-maven-plugin/1.1.3/apt-maven-plugin-1.1.3.pom ->
Parece un problema de conexión. Probaría a ver si no estás detrás de un proxy, puedes configurar el proxy en el fichero settings.xml añadiendo el proxy (más información en https://maven.apache.org/guides/mini/guide-proxies.html)
También a limpiar todas las dependencias («.m2/repository», haz una copia de seguridad previa) y volverlas a descargar por si acaso.
Hola Ramon:
Tengo instalado Maven con Netbeans 8.2 y funciona correctamente.
Para trabajar con Maven desde eclipse puedo utilizar la instalación anterior
Si te refieres a la versión anterior de Maven, no deberías tener problemas, Maven es un programa independiente al IDE. Otra cosa es configurarlo para que el IDE te ayude con Maven, eso ya depende de las opciones y la configuración.
Muy buen tutorial aunque no me ha quedado claro como se instala la cobalta.
Estimado Ramón,
Soy nuevo en maven, necesito cambiar el group Id de mi proyecto que tiene varias dependencias, Lo cambio manualmente pero me da muchos errores, me puedes explicar cual es el procedimiento
¿Qué errores te salen?
Excelente explicación, muy claro y certero.
Tienes algún tutorial para instalar Appium en Eclipse ?
Saludos
De momento no.
Buena info, me gustaría que explciras como es el uso de los Properties dentro del POM.
Gracias.
Los explico con detalle en: https://jarroba.com/maven/
Excelente Tutorial!!!
Excelente tuto! Muchas Gracias! que buen aporte.
Muy buen trabajo, excelente tuturial!
Hola, excelente artículo, seguí todos los pasos y pude crear el proyecto en línea de comandos, sin embargo desde Eclipse, a pesar de que agregue mi instalacion desde el menu de Window.
Eclipse me muestra el error «Could not calculate build plan: Plugin org.apache.maven.plugins: maven-resources-plugin: 2.6 or one of its dependencies could not be resolvedÑ Failed to read artifact descriptor for org.apache.maven.plugins: maven-resources-plugin: 2.6»
Puedes ayudarme?
Asegurate que Eclipse esté apuntando correctamente al settings.xml del repositorio local (ve en Eclipse a «Window/Preferences», en el cuadro que se abre ve a «Maven/User Settings»). En Windows se crea por defecto en «C:\Users\\.m2\settings.xml» (En el cuadro de opciones que hemos dicho tiene que estar apuntar en «User Settings») y el repositorio local en «C:\Users\ \.m2\repository» (tiene que apuntar en «Local Repository»)
Gran tutorial te felicito! me ha aclarado muchisimo!
Hola la explicacion esta muy buena solo tengo una inquietud, a la hora de crear el proyecto no me sale el web Pages como en la mayoria de proyectos maven.uch
¿Como puedo generar esta carpeta? Para poder agregar los archivos html.
Muchas gracias
Muchas gracias, no hay explicación mas sencilla e ilustrativa que las tuyas amigo.
Muchas Gracias por la explicación !!
Saludos
Mil gracais, ya se que es Maven xD… no tenía ni idea ni como usarlo, una ayuda excelente!
Dioooos después de 4 horas buscando soluciones, Bendito seas,
Era por el maven/updateProyect(alt+F5).
Le ponia el plugin, y le daba a refresh, a build, a install a todo, le cambiaba el nombre, reiniciaba el eclipse, todo menos el update proyect.
Thanks.
Antes que nada, muchas gracias por toda la expliación bien detallada. Eres un genio.
Mencionaste que cuando descarguemos el IDE, recomiendas descargar maven desde la página oficial, porque la versión del IDE normalmente viene con una versión retrasada.
Pregunta:
¿Existe alguna configuración del IDE para que utilice la versión de descarga, en vez que la que tiene por defecto?, si es así ¿cómo o en dónde se configura?
De antemano muchas gracias!
Sí, existe la forma de decirle a Eclipse donde se encuentra nuestro Maven descargado (en algunos casos es necesario). Para ello:
Muchas gracias por tu respuesta, saludos
Good job man!
Muchas gracias eres el puto amo.
Desde la facultad de Málaga un saludo.
Hola tengo un detalle con maven resulta que cambie de maquina y ya termine de configurar, importe mi proyecto maven y resulta que no me actualiza ningun cambio ni modificacion que hago sobre el, bueno si lo ghace fisicamente pero al compilarlo pareciera que no llega a compilar las clases en mi nueva maquina y obvio al correrlo no se ven todos los cambios que realizo. Y si le aplico el clean no llego a ver que me cree la ultima carpeta de mi proyecto en el target y por lo tanto no encuentra no las classes para correr. A que se debera =(.
salu2.
Hola Faby. Si no has cambiado de repositorio, comprueba que se te esté generando bien la carpeta «.M2» en «C:\Users\\.m2″ (se te tienen que descargar las dependencias, sino dará errores por no encontrarlas). Prueba a hacer un “Update Project configuration from pom.xml” y un «Force Update of Snapshots/Releases». Si sigue con errores tendrás que comprobar también los ficheros Pom y de configuración si tuvieran rutas absolutas que apuntaran a carpetas que existían en el antiguo ordenador y no en el nuevo.
Hola,
Tengo una duda, actualmente tenemos que migrar un proyecto Maven a HTML5 con Javascript pero al momento de importarlo en Eclipse me tira error, si veo las clases y demás, pero cuando lo ejecuto en local me da error 404, estamos utilizando Eclipse Mars y Tomcat v8.0
¿Lo estoy importando de manera incorrecta?
Saludos.
Hola Ramon:
Tus blog son muy interesantes.
Como trabajo con properties y donde debere alojarlos?
Un saludo dede Bogota
Hola Eduardo. De properties para Maven tienes la explicación y ejemplo en http://jarroba.com/maven/ 🙂
Excelente articulo. Muchas gracias…
Hola benas,
El artículo está genial explicado, pero me surge una duda con los plugins
He buscado en el MVNRepository el plugin de EclipseLink para poder crear clases de tipo JPA.
Añado al POM
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>2.5.2</version>
</dependency>
La salida Maven install -> Build Sucess. Pero al ir a crear clases de tipo JPA Entity o EclipseLink Dynamic Entity no me encuentra el proyecto y me dice que tengo que crear uno concreto.
El caso es que me gustaría poder hacer uso de JPA en un proyecto creado con MAVEN y estoy seguro de que me dejo algo.
Un saludo.
No he trabajado con JPA, pero en vez de buscar versiones propias de Eclipse casi mejor buscar la biblioteca de JPA, o si lo que quieres es un plugin para Eclipse es buscar en la tienda JPA.
Primero que nada, excelente artículo, justo lo encontré ahora que estoy trabajando en un proyecto de la universidad, quería preguntarte si de casualidad conoces una manera de instalar BouncyCastle para usarlo con Maven y como usarlo en una aplicacion? de antemano gracias por la respuesta 🙂
Hola Gustavo. No te puedo ayudar mucho con la biblioteca pues no la he utilizado. Sólo te puedo indiar dónde está en el Maven Repository: http://mvnrepository.com/artifact/org.bouncycastle
Lo primero, gracias por el aporte. Uno más que sirve de gran ayuda.
Lo segundo es, llevo un par de días buscando en Internet el problema que tengo pero no consigo resolverlo. Ahí va:
Cuando termino con el asistente de creación del proyecto Maven en Eclipse Mars (en el que configuro igual que en este tutorial) me sale un error durante la construccion del espacio de trabajo,
'Building workspace' has encountered a problem
Errors ocurred during the build
Me descargué el plugin m2e para eclipse desde http://download.eclipse.org/technology/m2e/releases/ y mi version de Apache Tomcat es 7.0.63
Espero que alguien pueda ayudarme, estoy algo perdido. Gracias
En este artículo quise simplificar el proceso bastantes pasos. En caso de que te de problemas el Maven embebido en Eclipse, lo mejor es descargar Maven y vincularlo con Eclipse. Para ello:
1-Descarga Maven de https://maven.apache.org/download.cgi y descomprímelo por ejemplo en "archivos de programa"
2-Crea la variable de entorno de M2_HOME (apunta a la intalación de Maven), y en la variable de path añade la ruta hasta la carpeta "bin" de Maven incluida ésta (valdría con poner: %M2_HOME%\bin;). Ya con esto asegurate que esté bien puesto el JDK de Java en las variables de entorno, ya que es necesario (más información de la intalación de Maven en https://maven.apache.org/install.html)
3-En Eclipse ve a Window/Preference y ahí ve a Maven/Installations, añade y busca el nuevo Maven que has instalado. Asegurate de seleccionarlo
Muchas gracias de nuevo
Gran aporte, por lo sencillo, practico y útil. Éxitos
Muchísimas gracias. La explicación muy sencilla y práctica. Felicidades
Un saludos
Una explicación muy útil,muchas gracias y un saludo.