Maven – Crear un proyecto web

Crear un proyecto web utilizando Arquetipos de Maven

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.

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:

Maven crear proyecto web

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:

Maven crear proyecto web estructura

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>
ElementoDescripción
modelVersionLa única versión soportada para POM es la 4.0.0.
groupIdEste 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.
artifactIdPor lo general corresponde al nombre asignado al proyecto.
packagingDefine el tipo de empaquetado del artefacto (ear, jar, war, etc).
El valor por defecto es jar.
versionEspecifica el número de versión para un groupId:artifactId.
nameNombre descriptivo o conversacional del proyecto, más allá del artifactId.
urlHome page del proyecto.
dependenciesEspecifica 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).

Maven crear proyecto web estructura 2

Finalmente tendremos la aplicación accesible desde nuestro navegador:

Maven crear proyecto web 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.

Maven crear proyecto web navegador 2

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

Maven – Crear un proyecto Java

En este artículo se explica el proceso completo para crear de un proyecto Java utilizando arquetipos de Maven.

Seguir leyendo →

Maven – Pruebas Unitarias

En este artículo explicamos cómo configurar y ejecutar pruebas unitarias con JUnit utilizando Maven.

Seguir leyendo →