Master J2EE de Oracle: Paso 2 de 12: Manejar Proyectos J2EE

Puede encontrar la versión original de este artículo en Inglés en:

http://www.oracle.com/technology/pub/articles/masterj2ee/index.html

Introducción

Como manager de proyecto, elegir entre las herramientas y prácticas de control de proyectos son las decisiones más importantes que tendrá que hacer.

Empezar un nuevo proyecto J2EE desde cero puede ser tan retador como excitante. Las decisiones que haga en los primeros estadios de un proyecto tendrán tremendas consecuencias a lo largo de su tiempo de vida. Por esa razón, las prácticas de manejo de proyectos pueden asegurar el éxito de un proyecto, o su fracaso, justo desde el principio.

Si está controlando un proyecto J2EE, hay al menos seis preguntas claves para las que necesitará respuestas firmes y sin ambiguedades:

  • "¿Qué herramienta de construcción debería utilizar?"
  • "¿Cómo hacer que un grupo de gente trabaje sobre un código-base compartido?
  • "¿cómo mantener a todo el equipo, incluyendome a mi, informado del estado del proyecto?
  • "¿Cómo puedo reducir el proceso de construcción a un sólo click?
  • "¿Cómo puedo simplificar el control de varios proyectos?
  • "¿Cómo manejo los archivos para el software J2EE?

En esta página, identificaremo algunas de las acciones que usted, como lider de un proyecto, pueda realizar (utilizando herramientas de control de proyectos soportadas por Oracle JDeveloper) para responder a estas preguntas y hacer que su proyecto tenga éxito. También le ofreceremos un breve tutorial sobre como empezar un proyecto y el control de código utilizando Maven para crear un proyecto 'listo para usar' basado en Struts.

Elegir

El proceso de construcción es un componente clave en cualquier proyecto J2EE, y hay varias herramientas de construcción entre las que elegir. Para este tutorial, la discusión se limitará a dos de las herramientas de construcción más populares: Maven y Ant.n>

Maven y Ant son proyectos open-source de la fundación Apache, y elegir entre ellas es la decisión más importante que debe tomar un lider de proyecto. El propósito de Maven es ayudar a los desarrolladores a construir, probar y documentar sus proyectos Java de una forma fácil y consistente. Es una herramienta poderosa, y pueder muy útil para manejar un proyecto durante su ciclo de vida.

Ant es la herramienta de construcción más popular en el mundo Java. Es una herramienta muy flexible; sin embargo, esta flexibilidad tiene un precio. Muchos proyectos empresariales sufren de obsesión con scripts de Ant, que son difíciles de mantener después de que su creador haya dejado el grupo.

Para ayudarle a elegir entre estas herramientas, aquí tiene una comparación de alto nivel:

 

AntMaven
InstalaciónMuy fácilMuy fácil (similar a Ant)
Tiempo para empezar un nuevo proyecto5 minutos15 minutos
Tiempo para añadir una nueva funcionalidad10 minutos para añadir un nuevo 'target'2 minutos para usar un nuevo 'goal'
Tiempo para que lo aprenda un nuevo desarrollador30 minutos. Muy fácil de entender, y muy buena herramienta de soporte.2 horas. Puede ser confuso al principio.
Distribución estándarNo (lo que es bueno; se puede hacer lo que se quiera).Si (lo que es bueno para que todos su proyectos sean iguales).
Sporte Multi-proyectoSi, pero tiene que hacerse su propio fichero de construcción maestro.Si, con el Maven Reactor
Genera Documentación.No hay una forma estándar de hacerlo, pero hay muchas herramientas disponibles.Si
Integración en IDEsSiMuy básica

Mi recomendación es elegir Ant si sabe lo que está haciendo y quiere un control absoluto sobre el mecanismo de construcción. Sin embargo, si no está seguro de la estructura de su proyectos y no tiene mucha experiencia en sistemas de construcción, elija Maven. Maven le proporcionará una buena distribución de proyecto y excelentes herramientas para ayudarle durante todo el ciclo de vida del proyecto.

Si sigue este artículo utilizando Maven, acabará con un conjunto de herramientas, buenos procesos de software y una correcta distribución de proyecto. Si, sin embargo, desea cambiar a Ant, será muy fácil reescribir los 'goals' de Maven como 'targets' de Ant. Para una construcción sencilla, cambiar de Maven a Ant es un trabajo de un par de horas, por eso no tema continuar con Maven durante todo la vida del proyecto.

Colaboración del Equipo

El principal activo que entregamos a los clientes es un código de alta calidad. Para conseguir ese objetivo, es crítico que todo el equipo trabaje conjuntamente, y para esto existen herramientas Source Configuration Management (SCM) disponibles.

Por ejemplo, el sistema open-source Concurrent Version System (CVS) probablemenete sea el software SCM más popular. Se instala por defecto en muchos sistemas Unix/Linux y tiene una excelente versión para Windows llamada CVSNT.

Cuando empiece un proyecto debe asegurarse de que:

  • Su IDE funciona bien con su sitema SCM. Ir cambiando del IDE a la herramienta SCM es muy propenso a errores y consume mucho tiempo, especialmente cuando está manejado miles de ficheros de código. (Oracle JDeveloper soporta completamente CVS y proporciona una única ventana desde la que trabajar; por lo tanto, puede evitarse el tener que cambiar de herramienta).
  • Entiende los principios básicos del sofware SCM, como las etiquetas y corchetes.
  • Su repositorio de código fuente tiene back-up y es fácil de acceder. Si sincronizar el código es demasiado lento, los desarrolladores no lo utilizarán.
  • Ha explicado a sus desarrolladores cómo utilizar el sistema.
  • Ha instruido a sus desarrolladores para que sincronicen su código de forma frecuente.

El Respositorio de Proyecto de Maven

La filosofía de Maven es almacer sólo código fuente en el sistema SCM, y almacenar las librerías (como struts.jar, log4j.jar, etc.) en el repositorio de Maven, un directorio remoto en el que los ficheros se almacenan por proyectos y versiones. Esta tarea parece un como enrevesada al principio, pero manejar todas las depedencias de un proyecto es una tarea árdua que Maven soluciona de una manera muy elegante.

Como este artículo se enfoca en proyectos empresariales, recomendamos el uso de Maven Proxy, que conectará, a través del firewall corporativo con los repositorios globales de Maven en Interner. Cuando haya creado su propio repositorio corporativo, podrá almacenar fácilmente en él sus propios fichero JAR. (La distribución de directorios es obvía, sólo copie la estructura creada por Maven Proxy.

Maven también ofrece un plug-in llamado StatCVS, que produce un informe completo de un respositorio CVS de un proyecto, incluyendo muchos gráficos que muestran la actividad de los desarrolladores.

El Modelo de Objeto de Proyecto (POM) de Maven

Maven utiliza un Project Object Model (POM) para la información de un proyecto. Esta información incluye el nombre del proyecto, la descripción, los desarrolladores, el sistema SCM, etc. El POM es un sencillo fichero XML, que está completamente descrito en http://maven.apache.org/reference/project-descriptor.html.

Como el POM es un fichero XML, puede editarlo con Oracle JDeveloper. Sin embargo, el plug-in de Maven para JDeveloper que usaremos más adelante eliminará el fichero project.xml del proyecto actual, pero no supondrá ningún problema, ya que se puede reimportar rápidamente.

Obtener Feedback del Proyecto

Otra consideración importante cuando maneje proyectos J2EE es que querrá estár informado del estado del proyecto. Sin embargo, usted no tendrá tiempo de verificar cada uno de los ficheros desarrollados o chequeados por su equipo.

La solución es comunicarse con el equipo y utilizar las herramientas de informe adecuadas.

Por supuesto, lo primero es mantener reuniones regulares con los desarrolladores. Sin embargo, el feedback no siempre tiene que ser cara-a-cara. Existe una gran cantidad de herramientas de informes automáticos, como CruiseControl, JUnit, Checkstyle o StatCVS para mantenerle informado del estado actual de su proyecto. En este contexto, merece la pena discutir el valor de la integración contínua de CruiseControl.

Utilizar CruiseControl con Maven

La Integración Contínua es una excelente práctica diseñada por Martin Fowler, que hemos sumarizado como "Es una buena idea construir y probar automáticamente un proyecto, a intervalos de tiempo regulares". Este concepto ha sido adoptado por un gran número de compañias en todo el mundo.

La Integración Contínua es partícularmente útil cuando hay mucha gente trabajando en el mismo proyecto, ya que se les informará regularmente del estado del proyecto y recibirán correos de CruiseControl notificándoles sus errores.

CruiseControl es la herramienta de Integración Contínua más popular, y la recomiendo encarecidamente. CruiseControl es capaz de tratar con los proyectos manejados por Maven. Maven también proporciona un plug-in para configurar CruiseControl. Este plug-in puede crear fácilmente un fichero de configuración para CruiseControl y se puede hacer cargo de ejecutar CruiseControl.

Otro plug-in útil de Maven, Checkstyle, le ayudará a que su proyecto se adhiera al estilo de codificación estándar. Los informes de Checkstyle pueden incluirse dentro de CruiseControl para que si alguien envía código no-estándar se pare la construcción. Para añadir estos informes a su documentación del proyecto, simplemente póngalos en su fichero project.xml en la sección <reports/>.

Manejar el Ciclo Construir/Desplegar con un sólo Click

Construir y desplegar la aplicación puede tardar horas, y podría requerir muchos pasos manuales. Los desarrolladores están cansados de los largos ciclos de construción y la necesidad de intervención manual. Se emplean varias horas al día esperando a que la aplicación se construya y se despliegue. No hay palabras para describir la frustación de esas demoras.

La cura es configurar un proceso de "ciclo de construcción y despliegue con un clik". Cuando se usan correctamente, las herramientas de construcción como Maven o Ant transforman el proceso de construcción en un sólo click en el IDE del desarrollador. Estas herramientas también puden desplegar automáticamente un proyecto en el servidor que usted elija.

Esta solución tiene un beneficio añadido: no sólo facilita la tarea del desarrollador, sino que además gracias a que se ha definido un proceso para empaquetar la aplicación, el software entregado al cliente será de una mayor calidad (no más ficheros olvidados o páginas JSP no compiladas).

En este contexto, podría ser útil para usted que ese mismo proceso 'de un sólo click' genere también la documentación apropiada para el proyecto. Una de las mejores cosas de Maven es la documentación de proyecto que genera. Sólo utilice el goal maven site:generate para generar la documentación del proyecto actual. El web site generado debería ser parecido al mostrado en la siguiente imagen:

Desarrollar Varios Proyectos

Según vaya aumentando la complejidad de sus proyectos, es muy probable que puedieran dividirse en proyectos más pequeños. El resultado: el tiempo de control del proyecto se ha multiplicado Cada pequeño proyecto necesita algo de control.

La solución es utilizar un mecanismo de construcción consistente entre los diferentes proyectos y crear un "proyecto maestro" que contendrá todos los pequeños proyectos. Aunque esto es fácil de hacer con Maven, (ya que le obliga a adoptar su distribución de proyecto), requiere algo de disciplina en los desarrolladores de Ant. Para el lado Ant de la casa hay dos recomendaciones:

  • Use convenciones de nombres ("compile" para compilar el proyecto, "dist" para crear una distribución)
  • Use la nueva tarea <import/> de Ant 1.6 para crear un script cómun que será importado en cada subproyecto. (Esto se parece al patrón de diseño "template method" de GoF.)

Otro problema más complejo es que esos proyectos necesitan ser construidos en un orden adecuado, y que un fallo en uno de ellos lanzará un fallo en los proyectos que dependen de él. Veamos un ejemplo:

  • Una librería de clases de utilidad llamada myutility.jar
  • Varios EJBs, empaquetados en un jar llamado myejbs.jar, y que usan las clases de myutility.jar
  • Un archivo web, llamado myweb.war, que usa myejb.jar y myutility.jar
  • Un fichero EAR llamado myear.ear que empaqueta las 3 librerías mencionadas.

En este caso, un fallo en el proceso de construcción de myutility.jar lanzará un fallo en todos los proyectos. Pero un fallo en myweb.war sólo lanzará el fallo en el myear.ear final.

Dichas dependencias de proyectos se puede manejar manualmente (si hay sólo unos pocos proyectos) o automáticamente (con Maven Reactor).

Empaquetar un Proyecto J2EE

En muchos proyectos J2EE hay la necesidad de crear un fichero (del tipo WAR, JAR, o EAR) para entregarlo al cliente.

Si ha seguido las soluciones a los problemas anteriores, tendrá dos retos muy diferentes:

  • Crear un EAR es complicado, especialmente cuando están implicados múltiples proyectos. Un EAR es sólo un fichero que contiene varios WARs y JARs.
  • Crear los ficheros WAR y JAR es fácil con Maven o Ant, ¿Pero cómo manejar los diferenes descriptores de despliegue?

Aquí es donde son de utilidad los IDEs como Oracle JDeveloper. Sin embargo, si no desea depender de un IDE XDoclet, una herramienta de generación de código, puede ejecutarse desde dentro de Ant o Maven, para generar esos descriptores de despliegue.

Ahora le dejaré con un breve tutorial para que empiece con Maven y Oracle JDeveloper.

Tutorial de Manejo de Código

Ahora, empecemos con Maven y creemos un proyecto basado en Struts listo para usar.

Iniciar el Proyecto

Maven se puede descargar desde http://maven.apache.org/. La instalación es bastante sencilla y está completamente documentada en http://maven.apache.org/start/install.html.

Maven viene con una extensa lista de plug-ins que puede instalarse automátiamente desde internet.

El Plug-in genapp de Maven

El plug-in genapp de Maven le ayudará a iniciar rápidamente una aplicación basada en Struts. Ejecute maven genapp y utilice la plantilla de proyecto "struts", como en la siguiente imagen:

Ahora ya tiene un aplicación basada en Struts que funciona. Para crear el fichero WAR de su proyecto, sólo teclee maven war. Este proyecto tiene un sencillo fichero POM (project.xml) que puede editar de acuerdo a sus necesidades.

El Plug-in JDeveloper de Maven

Use el plug-in JDeveloper de Maven para importar el proyecto a Oracle JDeveloper. Como se explica en la documentación del plug-in, necesita configurar algunas propiedades:

  • Cree un fichero build.properties en su directorio home.
  • Configure las propiedades requeridas por la documentación

Como ejemplo, aquí tiene una imagen de mi propio fichero build.properties:

Puede ejecutar el goal maven jdeveloper tantas veces como quiera; actualizará su configuración de Oracle JDeveloper desde el fichero project.xml de Maven.

Por ejemplo, configurará automáticamente las librerías de JDeveloper:

Ejecutar Maven desde dentro de JDeveloper

Puede ser útil ejecutar Maven desde dentro de Oracle JDeveloper para no tener que lanzar una nueva ventana de consola. Los siguientes pasos le enseñarán a asignar el goal maven dist de Maven a un nuevo botón en Oracle JDeveloper. Debería empezar el proceso eligiendo External Tools en el menú de herramientas y luego seleccionando Add:

  1. Paso 1 de 4: seleccionar el ejecutable de Maven (se ha elegido el goal dist:

  2. Paso 2 de 4: Seleccionar como se mostrarár el acceso directo a Maven

  3. Pas 3 de 4: Especificar dónde aparecerá el botón:

  4. Paso 4 de 4: Elegir cuando estará disponible el botón:

Ahora puede ejecutar Maven desde dentro de Oracle JDeveloper, como muestra la siguiente imagen:

La Consola Maven

Si prefiere utilizar una consola además de Oracle JDeveloper, es altamente recomendable utilizar el plug-in Maven console. Arrancará Maven una vez y esperará instrucciones. Como resultado, ejecutar un goal es mucho más rápido (comparado con Ant):

Sumario

Crear un nuevo proyecto J2EE es una experiencia muy enriquecedora. Se necesita masterizar todo el ciclo de construcción, desde el manejo de los ficheros fuente hasta el despliegue de la aplicación empaquetada. Afortunadamente, hay un rico conjunto de herramients disponibles para conseguir el éxito del proyecto.

Maven es una poderosa herramienta de construcción que se integra bien con Oracle JDeveloper. Es bastante fácil de configurar, y gracias a sus plug-ins preconfigurados, Maven proporcionará una enorme ganancia de tiempo en comparación con otras selecciones (como Ant). Para desarrolladores y líderes de equipos menos experimentados, Maven tiene el beneficio añadido de enseñarles varias de las mejores prácticas de programación. Por último pero no menos importante, utilizar Maven garantiza la constante disponibilidad de una documentación de proyecto comprehensiva, de la que muchos proyectos empresariales carecen.

Próximos Pasos

  1. Descargue el software:
  2. Lea la nota técnica: Desarrollar un Proyecto con Oracle JDeveloper 10g y el plug-in de Maven. En ella el autor crea un proyecto de aplicación Jaba con el plug-in de Maven para JDeveloper y luego importa el proyecto en el IDE Jdeveloper.
  3. Aprenda las mejores prácticas para automátizar sus construcciones con Ant. Manejar la Factoría Ant
  4. ¿Que hay de nuevo en Oracle JDeveloper 10.1.3 para el desarrollo basado en equipos.

Información adicional sobre la construcción de proyectos de software:

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP