Cómo extender proyectos web Java con Maven

Muchas empresas crean un proyecto web base y lo van copiando y adaptando para cada encargo. Aunque funciona, es muy costoso hacer cambios como actualizar una librería ya que habría que cambiarlo en todos.

Vamos a ver cómo preparar un paquete que contenga tanto las clases Java como los archivos web (jsp, javascript…) y los de configuración (Spring, Hibernate…). Así podrá cargarse con sólo añadir unas líneas y tenerlo accesible en un repositorio privado de la empresa.

Creación del proyecto base

Sólo hay que indicar en Eclipse que se cree la estructura de un proyecto web con Maven. Para eso se pulsa en File → New → Maven Project, click en Next en la pantalla que aparece, y se selecciona maven-archetype-webapp. Tras eso se indica el nombre y el grupo que queramos, y después de pulsar en Finish aparecerá el proyecto creado con la estructura típica.

En el fichero pom.xml hay que indicar que se genere un war con los archivos web y un jar con las clases java compiladas. Para eso se usa el plugin maven-war-plugin:

<build>
  <plugins>
    ...
    <plugin>
      <artifactId>maven-war-plugin</artifactId>
      <version>2.1.1</version>
      <configuration>
        <attachClasses>true</attachClasses>
        <classesClassifier>classes</classesClassifier>
      </configuration>
    </plugin>
  </plugins>
</build>

Además es recomendable indicar la versión de Java con la que se va a ejecutar porque puede coger por defecto la versión 1.3 al ejecutarlo en consola y dar errores de compilación:

<properties>
  <jdk.version>1.6</jdk.version>
</properties>

<build>
  ...
  <plugins>
    ...
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.0</version>
      <configuration>
        <source>${jdk.version}</source>
        <target>${jdk.version}</target>
      </configuration>
    </plugin>
  </plugins>
</build>

Creación del proyecto hijo

Se crea un proyecto web como el anterior y en el pom.xml, en lugar de poner el código del maven-war-plugin, se añaden estas dependencias:

<dependencies>
  ...
  <dependency>
    <groupId>grupo</groupId>
    <artifactId>nombreProyectoBase</artifactId>
    <version>versionProyectoBase</version>
    <type>war</type>
    <scope>compile</scope>
  </dependency>

  <dependency>
    <groupId>grupo</groupId>
    <artifactId>nombreProyectoBase</artifactId>
    <version>versionProyectoBase</version>
    <classifier>classes</classifier>
  </dependency>
</dependencies>

Contenidos del proyecto base

Lo habitual es ponerlos en estas carpetas:

  • Código java: src/main/java
  • Código de los tests: src/main/test
  • Archivos de properties: src/main/resources
  • Archivos web (html, javascript, imágenes…): src/main/webapp
  • Archivos jsp y de configuración: src/main/webapp/WEB-INF

Añadir código al proyecto hijo

La estructura de archivos será la misma que en el padre. En los archivos web y de configuración se usarán los del padre salvo que se cree otro en el hijo en la misma carpeta y con el mismo nombre, ya que en ese caso el contenedor lo sobreescribirá.

Para los archivos java no se puede crear otra clase con el mismo nombre en el mismo paquete. Lo habitual será extender la clase que nos haga falta y, si es un bean que se inyecta en el arranque, sobreescribir el archivo de configuración que lo carga indicando la ruta de la nueva clase.

Empaquetar el proyecto base

Si se hace no será necesario tener el proyecto base abierto, y se podrán poner las versiones estables en un repositorio como Artifactory.

Para hacerlo sólo hay que abrir un terminal, acceder en él a la carpeta del proyecto y ejecutar el comando:   mvn clean install

Tras eso aparecerá una carpeta nueva en el directorio .m2\\repository del usuario que contendrá un archivo con las clases java compiladas y otro con los archivos web.

Si aparece un error indicando que no encuentra el comando mvn es porque hay que instalar Maven. En Linux se hace con el comando sudo apt-get install maven2. En Windows se descarga de aquí, se descomprime y se crea una variable de entorno que apunte a dónde se haya guardado.

Archivos de ejemplo

En este archivo tenéis un ejemplo simple que carga archivos java y jsp del proyecto base. Para probarlo sólo tenéis que descomprimirlo, importar los proyectos en Eclipse y desplegar el proyecto hijo en Tomcat con Run as…

Como siempre, podéis dejar vuestras dudas y comentarios, y suscribiros para obtener nuevos posts por email:[mc4wp_form]

Rafael Borrego

Ingeniero informático especializado en startups y en ayudarles a crecer

Facebook Twitter LinkedIn 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>