Os doy la bienvenida a otro tutorial de informática originario de mi antigua web, Dusk Chimera. En esta ocasión, vamos a aprender sobre Maven, una herramienta de software para la gestión y construcción de proyectos en Java.
Aprender sobre esto puede tener unas aplicaciones muy interesantes en nuestro caso, ya que nos permite sentar bases muy útiles para la creación de programas relacionados con el ROM Hacking, tales como editores y randomizadores dentro de una estructura organizada, así como para aquellas personas que quieran montar su propia web con un backend basado en Java.
¿Qué vamos a aprender en esta guía?
En primer lugar creamos un nuevo proyecto Maven, luego pinchamos en la primera casilla.
En la siguiente pantalla ponemos en Group id y en Artifact id el mismo nombre y en packaging ponemos "war".
Cómo importar catálogos externos desde internet.
Si queremos agregar catálogos nuevos desde internet, pulsamos en "Configure" > "Add remote catalog...". En el segundo campo, que corresponde al nombre o descripción, ponemos un título descriptivo para dicho catálogo.
Cómo crear un proyecto Maven personalizado de arquetipo webapp
Paso 1: Crear el proyecto
Creamos un nuevo proyecto Maven, pero esta vez no pulsamos en la primera casilla de la primera ventana. Después, en la siguiente ventana, buscamos la palabra "we" o "web" en el filtro. Debemos elegir exactamente el arquetipo que aparece en la siguiente captura:
En caso de que hayamos importado catálogos desde internet, nos dirigimos al campo "Catalog" y, en lugar de elegir "All Catalogs", seleccionamos "Internal":
En la siguiente ventana tenemos que ponerle el nombre al proyecto, pondremos el mismo nombre tanto en el primer campo como en el segundo, que se llaman "Group Id" y "Artifact Id".
Paso 2: Adaptar la versión de Java del proyecto
Hay un problema y es que, al intentar cambiar la versión de Java, vuelve otra vez a la versión 1.5. Para solucionarlo, buscamos "maven plugin java 8", pulsamos en el primer enlace: >>accede aquí<<
Dentro de ella, donde pone "plugins", copiamos estas etiquetas, que luego modificaremos y agregaremos al pom.xml:
Luego hacemos click derecho en el proyecto y pulsamos en "Properties", después en "Project Facets". Cambiamos la versión de Java a "1.8" y le damos a "Apply".
Hacemos click derecho al proyecto > Maven > "Update Maven Project".
Paso 3: Configurar Dynamic web module y crear el web.xml
Después será necesario cambiar el "Dynamic web module" a la versión 4.0. Para ello, primero lo deshabilitamos en "Project Facets", le damos a "Apply", luego cambiamos la versión y luego le damos a activar. Nos aparecerá un nuevo recuadro en negro más abajo, lo pulsamos y se nos abrirá una ventana emergente. Después pulsamos en la casillita que aparece en la ventana emergente y le damos a "ok", aplicamos los cambios y esperamos a que realice el proceso con paciencia.
Después, actualizamos el proyecto desde Maven > Update project.
Paso 4: Eliminar carpetas de src
Nos vamos al directorio "src" y borramos las dos carpetas que contiene. Después, hacemos click derecho > Maven > Update project.
Paso 5: Comprobar web.xml
Después de eso, debemos mirar el contenido de la carpeta WebContent. Si todo ha salido como estaba previsto, contiene dos carpetas, una de ellas se llama WEB-INF. La abrimos y nos aseguramos de que allí aparezca el archivo web.xml
Paso 6: Adaptar el archivo pom.xml
Luego nos vamos a pom.xml y abrimos el "Effective POM" (pestañita inferior). Copiamos lo que viene en pantalla (varía con cada proyecto que creamos) y lo metemos detrás de la etiqueta "build" y antes de la etiqueta "plugins" del pom.xml, retocando los directorios (le quitamos lo que venga detrás de "src"). Debemos copiar desde "sourceDirectory" hasta la etiqueta "directory" que está antes de la etiqueta "finalName":
Luego hacemos click derecho > Maven > Update project.
Paso 7: limpiar la carpeta src
Nos vamos a Java Resources > src y comprobaremos que tenemos un paquete vacío llamado main.webapp, lo borramos y ya tendremos la carpeta src vacía.
En el pom.xml, para mayor seguridad, borraremos también la etiqueta que contenga el directorio terminado en el subdirectorio "target".
Paso 8: configurar directorios de trabajo
Hacemos click derecho en el proyecto > Properties > Java Build Path, pestaña "Source", borramos la ruta del directorio que está perdido (el nombre nos lo indicará una señal de alerta con un símbolo de exclamación). Si no aparece ninguno, continuamos.
Vamos a "Deployment Assembly" y borramos las dos carpetas con error (usamos el botón "Remove"). Las carpetas que nos interesan son /src y /WebContent. Aplicamos los cambios y de nuevo, click derecho > Maven > Update project.
Paso 9: creando el index.html y probando la plantilla en el servidor
Ahora vamos a probar el proyecto Maven. Crearemos un archivo index.html dentro del directorio WebContent, pondremos un texto de prueba y lo cargaremos en nuestro servidor Glassfish (Run as > Run on server).
Paso 10: Creando el index.jsp y probando la plantilla otra vez
Creamos un nuevo archivo, de tipo .jsp, con el siguiente nombre: index.jsp. Nos aparecerán varias opciones posibles entre las que elegir, seleccionamos la opción que más nos interese (en este ejemplo, hemos elegido HTML5):

Paso 11: corregir el error con HttpServlet
Nos saldrá un error de tipo HttpServlet, para arreglarlo nos metemos en el repositorio de Maven y buscamos el Java Servlet API: >>accede aquí<<
Vamos a la 4.0.0 y copiamos el trocito de xml en el pom.xml, dentro de la etiqueta "dependencies".

Y luego, hemos descargado otra dependencia en maven repository, hemos buscado "javaserver page" y hemos seleccionado la versión 2.3.1. de JavaServer Pages(TM) API: >>accede aquí<<
Copiamos el pequeño xml que aparece ahí y los añadimos también dentro de la etiquta "dependencies" del archivo pom.xml:
Anexo A: localización de los archivos fuentes
Los archivos fuentes se encuentran en el src bajo "Java Resources":

Importar arquetipos personalizados
Como sé que este proceso es largo y tedioso, tenemos la opción de importar un arquetipo que ya hayamos hecho y utilizarlo directamente. De esta forma, sólo tendremos que pulsar algunos botones, ponerle el nombre al proyecto y podremos trabajar directamente.
Para ello, nos detendremos en la segunda pantalla que nos aparece cuando queremos crear un nuevo proyecto Maven y, allí, pulsaremos los siguientes botones, que aparecen rodeados con círculos:

Resolución de dudas
Al intentar abrir el proyecto con Glassfish, aparece un error de ejecución.
Si sale un error al ejecutar, miramos dentro del directorio WebContent, incluidos sus subdirectorios. Si encontramos un archivo llamado "face-facets.xml", lo borramos .
¿Dónde copio las etiquetas de plugin?
La posición exacta viene definida en la página web, aunque podemos orientarnos también por las capturas de pantalla de esta guía.
No tengo una dirección de internet con un catálogo, ¿puedo importar el catálogo desde el ordenador?
Sí, lo único que tienes que hacer es seleccionar la opción "Add Local Catalog...".
Aprender sobre esto puede tener unas aplicaciones muy interesantes en nuestro caso, ya que nos permite sentar bases muy útiles para la creación de programas relacionados con el ROM Hacking, tales como editores y randomizadores dentro de una estructura organizada, así como para aquellas personas que quieran montar su propia web con un backend basado en Java.
¿Qué vamos a aprender en esta guía?
- Cómo crear un proyecto Maven de arquetipo simple.
- Cómo importar catálogos externos desde internet.
- Cómo crear un proyecto Maven personalizado de arquetipo webapp, más simple y de mejor rendimiento.
- Cómo importar arquetipos personalizados.
- Eclipse (en su día utilicé la versión Photon, 4.8.0, pero no debe haber problemas con versiones más recientes).
- JDK 1.8.
- Haber instalado Glassfish 5 previamente, puedes aprender cómo hacerlo en la siguiente guía.
En primer lugar creamos un nuevo proyecto Maven, luego pinchamos en la primera casilla.
En la siguiente pantalla ponemos en Group id y en Artifact id el mismo nombre y en packaging ponemos "war".
Cómo importar catálogos externos desde internet.
Si queremos agregar catálogos nuevos desde internet, pulsamos en "Configure" > "Add remote catalog...". En el segundo campo, que corresponde al nombre o descripción, ponemos un título descriptivo para dicho catálogo.
Cómo crear un proyecto Maven personalizado de arquetipo webapp
Paso 1: Crear el proyecto
Creamos un nuevo proyecto Maven, pero esta vez no pulsamos en la primera casilla de la primera ventana. Después, en la siguiente ventana, buscamos la palabra "we" o "web" en el filtro. Debemos elegir exactamente el arquetipo que aparece en la siguiente captura:
En caso de que hayamos importado catálogos desde internet, nos dirigimos al campo "Catalog" y, en lugar de elegir "All Catalogs", seleccionamos "Internal":
En la siguiente ventana tenemos que ponerle el nombre al proyecto, pondremos el mismo nombre tanto en el primer campo como en el segundo, que se llaman "Group Id" y "Artifact Id".
Paso 2: Adaptar la versión de Java del proyecto
Hay un problema y es que, al intentar cambiar la versión de Java, vuelve otra vez a la versión 1.5. Para solucionarlo, buscamos "maven plugin java 8", pulsamos en el primer enlace: >>accede aquí<<
Dentro de ella, donde pone "plugins", copiamos estas etiquetas, que luego modificaremos y agregaremos al pom.xml:
Luego hacemos click derecho en el proyecto y pulsamos en "Properties", después en "Project Facets". Cambiamos la versión de Java a "1.8" y le damos a "Apply".
Hacemos click derecho al proyecto > Maven > "Update Maven Project".
Paso 3: Configurar Dynamic web module y crear el web.xml
Después será necesario cambiar el "Dynamic web module" a la versión 4.0. Para ello, primero lo deshabilitamos en "Project Facets", le damos a "Apply", luego cambiamos la versión y luego le damos a activar. Nos aparecerá un nuevo recuadro en negro más abajo, lo pulsamos y se nos abrirá una ventana emergente. Después pulsamos en la casillita que aparece en la ventana emergente y le damos a "ok", aplicamos los cambios y esperamos a que realice el proceso con paciencia.
Después, actualizamos el proyecto desde Maven > Update project.
Paso 4: Eliminar carpetas de src
Nos vamos al directorio "src" y borramos las dos carpetas que contiene. Después, hacemos click derecho > Maven > Update project.
Paso 5: Comprobar web.xml
Después de eso, debemos mirar el contenido de la carpeta WebContent. Si todo ha salido como estaba previsto, contiene dos carpetas, una de ellas se llama WEB-INF. La abrimos y nos aseguramos de que allí aparezca el archivo web.xml
Paso 6: Adaptar el archivo pom.xml
Luego nos vamos a pom.xml y abrimos el "Effective POM" (pestañita inferior). Copiamos lo que viene en pantalla (varía con cada proyecto que creamos) y lo metemos detrás de la etiqueta "build" y antes de la etiqueta "plugins" del pom.xml, retocando los directorios (le quitamos lo que venga detrás de "src"). Debemos copiar desde "sourceDirectory" hasta la etiqueta "directory" que está antes de la etiqueta "finalName":
Luego hacemos click derecho > Maven > Update project.
Paso 7: limpiar la carpeta src
Nos vamos a Java Resources > src y comprobaremos que tenemos un paquete vacío llamado main.webapp, lo borramos y ya tendremos la carpeta src vacía.
En el pom.xml, para mayor seguridad, borraremos también la etiqueta que contenga el directorio terminado en el subdirectorio "target".
Paso 8: configurar directorios de trabajo
Hacemos click derecho en el proyecto > Properties > Java Build Path, pestaña "Source", borramos la ruta del directorio que está perdido (el nombre nos lo indicará una señal de alerta con un símbolo de exclamación). Si no aparece ninguno, continuamos.
Vamos a "Deployment Assembly" y borramos las dos carpetas con error (usamos el botón "Remove"). Las carpetas que nos interesan son /src y /WebContent. Aplicamos los cambios y de nuevo, click derecho > Maven > Update project.
Paso 9: creando el index.html y probando la plantilla en el servidor
Ahora vamos a probar el proyecto Maven. Crearemos un archivo index.html dentro del directorio WebContent, pondremos un texto de prueba y lo cargaremos en nuestro servidor Glassfish (Run as > Run on server).
Paso 10: Creando el index.jsp y probando la plantilla otra vez
Creamos un nuevo archivo, de tipo .jsp, con el siguiente nombre: index.jsp. Nos aparecerán varias opciones posibles entre las que elegir, seleccionamos la opción que más nos interese (en este ejemplo, hemos elegido HTML5):

Paso 11: corregir el error con HttpServlet
Nos saldrá un error de tipo HttpServlet, para arreglarlo nos metemos en el repositorio de Maven y buscamos el Java Servlet API: >>accede aquí<<
Vamos a la 4.0.0 y copiamos el trocito de xml en el pom.xml, dentro de la etiqueta "dependencies".
Luego abrimos el archivo web.xml y situamos la línea, que contiene "index.jsp" la primera de la lista.<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>

Y luego, hemos descargado otra dependencia en maven repository, hemos buscado "javaserver page" y hemos seleccionado la versión 2.3.1. de JavaServer Pages(TM) API: >>accede aquí<<
Copiamos el pequeño xml que aparece ahí y los añadimos también dentro de la etiquta "dependencies" del archivo pom.xml:
Finalmente, volvemos a actualizar el proyecto Maven y probamos el index.jsp, asegurándonos previamente de que tenga algún tipo de contenido, como un mensaje, para saber que funciona correctamente.<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
Anexo A: localización de los archivos fuentes
Los archivos fuentes se encuentran en el src bajo "Java Resources":

Importar arquetipos personalizados
Como sé que este proceso es largo y tedioso, tenemos la opción de importar un arquetipo que ya hayamos hecho y utilizarlo directamente. De esta forma, sólo tendremos que pulsar algunos botones, ponerle el nombre al proyecto y podremos trabajar directamente.
Para ello, nos detendremos en la segunda pantalla que nos aparece cuando queremos crear un nuevo proyecto Maven y, allí, pulsaremos los siguientes botones, que aparecen rodeados con círculos:

Resolución de dudas
Al intentar abrir el proyecto con Glassfish, aparece un error de ejecución.
Si sale un error al ejecutar, miramos dentro del directorio WebContent, incluidos sus subdirectorios. Si encontramos un archivo llamado "face-facets.xml", lo borramos .
¿Dónde copio las etiquetas de plugin?
La posición exacta viene definida en la página web, aunque podemos orientarnos también por las capturas de pantalla de esta guía.
No tengo una dirección de internet con un catálogo, ¿puedo importar el catálogo desde el ordenador?
Sí, lo único que tienes que hacer es seleccionar la opción "Add Local Catalog...".