Un Arquetipo de Maven es un conjunto de herramientas de plantillas de proyectos de Maven que permite a los desarrolladores crear un proyecto web rápidamente y de forma consistente. Los arquetipos ayudan a estandarizar la creación de proyectos dentro de una organización.
Generar el proyecto usando un arquetipo
Para este ejemplo utilizaremos el arquetipo maven-archetype-webapp para lo cual ingresaremos lo siguiente en nuestra terminal o línea de comandos:
mvn archetype:generate
-DgroupId=com.jcodepoint
-DartifactId=java-web-project
-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-webapp
-DarchetypeVersion=1.4
-DinteractiveMode=false
Obtendremos el siguiente output donde se informa, entre otras cosas, el directorio de generación de los archivos y que el proceso ha finalizado de forma satisfactoria:
El proyecto generado tendrá la siguiente estructura que es la usada generalmente en aplicaciones web, y un archivo pom.xml en el directorio raíz:
El archivo pom.xml
El archivo pom.xml contiene toda la información relativa al proyecto en formato XML. Esta información incluye la estructura del proyecto, dependencias, plugins, etc.
El archivo pom.xml generado debería verse así:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jcodepoint</groupId>
<artifactId>my-web-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>my-web-app Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>my-web-app</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Elemento | Descripción |
---|---|
modelVersion | La única versión soportada para POM es la 4.0.0. |
groupId | Este valor suele ser el mismo dentro de un proyecto, o incluso dentro de una organización, aunque no necesariamente tiene que coincidir con la estructura de paquetes del proyecto. Pero este valor sí determina la estructura de directorios dentro del repositorio si el artefacto generado se instala en el mismo. |
artifactId | Por lo general corresponde al nombre asignado al proyecto. |
packaging | Define el tipo de empaquetado del artefacto (ear, jar, war, etc). El valor por defecto es jar. |
version | Especifica el número de versión para un groupId:artifactId. |
name | Nombre descriptivo o conversacional del proyecto, más allá del artifactId. |
url | Home page del proyecto. |
dependencies | Especifica la lista de dependencias para este proyecto. Al momento de la compilación Maven descarga y enlaza las librerías incluídas en esta lista. |
Para generar el archivo war para desplegar en el servidor ejecutamos el siguiente comando en la consola:
mvn package
Una vez realizado el build del proyecto se habrá creado una carpeta target dentro de la carpeta raíz, y que contiene el archivo war que desplegaremos en nuestro servidor de aplicaciones (para este ejemplo hemos utilizado el servidor WildFly).
Finalmente tendremos la aplicación accesible desde nuestro navegador:
El proyecto
Vamos a usar el proyecto web generado con Maven para crear a partir de él una aplicación JavaServer Faces básica.
Agregar dependencias
En el archivo pom.xml agregamos las dependencias Maven de JavaServer Faces:
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
Crear el Managed Bean
Un Managed Bean es un Java Bean convencional que está registrado en, y gestionado por el framework JavaServer Faces. Un Managed Bean puede contener variables (que pueden corresponder a un formulario web) con sus correspondientes getters y setters, y lógica de negocio.
El Managed Bean debe ser configurado en la aplicación para que sea reconocido por JSF, y esto puede hacerse vía XML (mecanismo de configuración heredado de antiguas versiones de JSF) o anotaciones.
import javax.faces.bean.ManagedBean;
@ManagedBean(name = "myBean", eager = true)
public class MyManagedBean {
public String getMessage() {
return "My JavaServer Faces Project!";
}
}
Crear la vista
JSF 2 soporta el formato XHTML para la creación de vistas. En este ejemplo se demuestra como acceder desde la vista a una variable en el Managed Bean utilizando EL (Expression Language).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Hello JSF 2!</title>
</head>
<body>
#{firstBean.message}
</body>
</html>
Configuración en web.xml
Finalmente, en el archivo web.xml se debe configurar el servlet en el que se ejecuta JSF.
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
Una vez generada la aplicación y desplegada en el servidor de aplicaciones podemos accederla desde nuestro navegador.
Conclusión
En este artículo hemos repasado la forma de crear un proyecto web con Maven haciendo uso de arquetipos, que como se ha visto representan un modo de hacerlo de forma rápida y consistente, con una estructura predefinida y en línea con las prácticas recomendadas. Además, utilizamos este proyecto como base para crear un proyecto JavaServer Faces.
Referencias
Te puede interesar
Agregar dependencias en Apache Maven
En este artículo veremos cómo agregar dependencias en Apache Maven en unos pocos pasos, buscando en el Repositorio Central de Maven.