Mavenizar un proyecto Web existente usando project-mavenizer

martes, 29 de julio de 2014

Aunque personalmente no me gusta el anglicismo Mavenizar, es el tema que abordaré para esta guía.

Explicaré cómo mavenizar un proyecto Web que no cumple con la estructura de directorios estándar de Maven. Estos proyectos no estándares pueden ser aquellos que han sido construidos hace ya un tiempo atrás, legados, o aquellos generados usando las herramientas de un IDE como Eclipse y por lo cual no se ajustan a los requerimientos convencionales de Maven. En ocasiones he 
mavenizado algún proyecto ya existente que he tenido que modificar para aprovechar los beneficios de algunos plugins de Maven y así evitar reinventar la rueda en su código.
Además, esta guía tiene el objetivo de explicar el funcionamiento de una herramienta de código abierto para llevar a cabo la tarea de mavenización. La herramienta es project-mavenizer. Con esta herramienta podremos generar un archivo de configuración POM que pueda utilizar la estructura no estándar del proyecto existente, en vez de modificar la estructura del proyecto para que se ajuste a las convenciones de Maven.

La guía de project-mavenizer la podemos encontrar también en inglés, nivel Tarzán, en GitHub.

Descargar y descomprimir la herramienta

  1. Descarga la herramienta desde GitHub. Este es un archivo ZIP llamado project-mavenizer-pack.zip que contiene:
    • La herramienta de mavenización project-mavenizer-0.0.1.jar.
    • Un proyecto Web de ejemplo llamado NonStandardWebProject que no cumple con el estándar de directorios de Maven.
    • El archivo sample.properties que deberás editar, y opcionalmente renombrar, para poder usar con tu proyecto.
  2. Descomprime el archivo project-mavenizer-pack.zip en una ubicación bien identificada; por ejemplo en C:\mavenizator\project-mavenizer-pack\.

Agregar tus configuraciones

  1. Deberás editar el archivo C:\mavenizator\project-mavenizer-pack\sample.properties y seguir las instrucciones que vienen en el mismo. En resumen es asignar los siguientes valores:
    • Asignar un nombre al proyecto, digamos miproyectomaven. Este será también el nombre del archivo WAR generado.
    • Asignar la ubicación de la carpeta de tu proyecto. Para el caso de nuestro ejemplo de prueba es C:\mavenizator\project-mavenizer-pack\NonStandardWebProject.
    • Asignar la ruta a la carpeta con el contenido Web del proyecto. Para nuestro ejemplo, C:\mavenizator\project-mavenizer-pack\NonStandardWebProject\WebContent.
    • Asignar la ruta a las carpetas con código fuente y recursos para el classpath del proyecto. En el archivo sample.properties vienen unos ejemplo.
    • Asignar la ruta a la carpeta que contiene todas las librerías usadas en tu proyecto. Ve el ejemplo en el archivo.

Mavenizar el proyecto Web

  1. Abre una ventana de comandos y navega hacia la carpeta que descomprimiste. En los siguientes ejemplos estaré usando MS-DOS.
  2. Desde tu ubicación en línea de comandos, ejecuta lo siguiente: c:\mavenizator\project-mavenizer-pack> java -jar project-mavenizer-0.0.1.jar.
Deberás ver algo similar a esto:
C:\mavenizator\project-mavenizer-pack> java -jar project-mavenizer-0.0.1.jar 
Set the properties file name:sample.properties 
Loading /C:/mavenizator/project-mavenizer-pack/sample.properties 
Generated file is: C:/mavenizator/project-mavenizer-pack/NonStandardWebProject\pom.xml 
C:\mavenizator\project-mavenizer-pack>


Probarlo

  1. Ahora puedes usar tu proyecto como un proyecto Web Maven. El pom.xml generado en el proyecto tiene las configuraciones necesarias para correr la aplicación usando un Tomcat embebido. Para correrlo, desde la ventana de comandos navega a la carpeta del proyecto Web y ejecuta c:\mavenizator\project-mavenizer-pack\NonStandardWebProject > mvn clean tomcat7:run.
  1. Si puedes ver algo similar a Starting ProtocolHandler ["http-bio-9966"] y sin errores previos entonces abre el enlace http://localhost:9966/miproyectomaven/ desde un navegador de Internet.

Después de ejecutar el comando se deberá haber generado un nuevo archivo pom.xml en la carpeta raíz del proyecto. Sería c:\mavenizator\project-mavenizer-pack\NonStandardWebProject\pom.xml.


Prueba la herramienta, espero que te sirva y, si quieres, puedes mejorarlo pues es de código abierto. El código está disponible en https://github.com/jesfre/project-mavenizer.



Cómo convertirse en un desarrollador de aplicaciones Web modernas

miércoles, 4 de junio de 2014

En este artículo busco resumir mi experiencia en cuanto a los pasos o la trayectoria que normalmente se seguiría para llegar a dominar el desarrollo de aplicaciones Web.
Aunque yo aprendí de forma distinta, ya que me tuve que meter de lleno al desarrollo e ir aprendiendo al paso, lo más normal y muy efectivo es siempre iniciar de cero. Pero, para aquellas personas que ya tienen bases o experiencia, puede que haya sido distinto. Lo siguiente, sin embargo, lo comprendí después de haber estado enseñando a mi futura esposa cómo desarrollar aplicaciones Web y viendo la forma en que ella aprendía.

Primero: Identifica qué es lo que sabes y comienza por lo básico, lo que aun no conoces.
Haz un análisis de los conocimientos que tienes actualmente. Normalmente, si estas estudiando una carrera, estarás aprendiendo algún lenguaje de programación, y cualquiera que este sea te será muy útil. Entre las cosas básicas que deberás aprender están:

HTML: Luego de aprenderlo, también deberás comprender lo que es XHTML.
El protocolo HTTP: Deberás entender qué son las peticiones, tipos y cómo se procesan.
CSS: Qué es, cómo se agrega al HTML y cómo se usa.
Javascript: Ees una de las herramientas más importantes para tí como desarrollador de aplicaciones Web modernas; debes aprender qué es, cómo se agrega al HTML y cómo funciona. Aquí deberás hacer uso de tus conocimientos de programación; si no tienes ningún conocimiento de programación, no te preocupes ya que encontrarás muchos tutoriales que también te ensañan las nociones de la programación a través de Javascript.

De todas estas puedes encontrar infinidad de manuales y tutoriales en todo Internet.

Segundo: Determinar hasta dónde quieres llegar.
Ten en cuenta que para desarrollar aplicaciones Web deberás aprender distintas tecnologías, algunas ya las he mencionado, y dependiendo de la complejidad con la que has de desarrollar las aplicaciones y el tipo de aplicaciones Web.
De acuerdo a la complejidad necesitarás aprender lo siguiente:

XML (ya habrás entendido un poco al leer acerca de XHTML)
Un lenguaje para el servidor (aquí comienza el dinamismo de las aplicaciones Web) como Java, PHP, lenguajes de .Net, etc. Esto ya dependerá de varios factores como el proyecto y tus gustos. Ten en cuenta que al decidirte por una tecnología para el servidor, habrás de aprender además otras tecnologías necesarias para el desarrollo de tus aplicaciones.

Tercero: Paciencia y entusiasmo.
Puedo decir que este es el flujo de aprendizaje común para comenzar a desarrollar aplicaciones Web. Puedes comenzar haciendo pequeñas páginas usando HTML y CSS, luego agregarle alguna intereactividad con Javascript, y posteriormente agregarle complejidad.
Pero como siempre, para llegar al lugar que quieres, deberás tener paciencia y estar dispuesto a leer y hacer "pininos" conforme aprendas nuevas cosas. Ten en cuenta que no te servirá mucho si devoras un libro Javascript sin hacer ejemplos, ya que esto se trata de leer, entender y poner en práctica. Tal vez este último punto lo puedo resumir en, pasión.

Espero te sirva.

Problemas con SpringSource Tool Suite + Papyrus

miércoles, 21 de mayo de 2014

Actualmente estoy trabajando sobre un proyecto de código abierto, y algunos otros de mi trabajo; en los cuales he requerido generar cierta documentación técnica. Para realizar la documentación he decidido utilizar alguna herramienta libre o gratuita para diagramar el sistema. Después de buscar y probar algunos encontré Papayrus de la fundación Eclipse, y quise probarlo.


Después de haber instalado el plugin en STS (SpringSource Tool Suite o Spring Tool Suite) a través del Update Site, fue momento para comenzar a usarlo. Pero la sorpresa fue que al crear un proyecto o un modelo de Papyrus, la ventana del Wizard no cerraba al hacer click en Finish, y al intentar abrir el modelo desde el Project Explorer, marcaba el siguiente error.

Your model is corrupted, invalid links have been found: Problems encountered while loading one of the models.
...
org.eclipse.papyrus.infra.core.resource.uml.UmlModel : org.eclipse.core.internal.resources.ResourceException: Resource '../../model.uml' does not exist.

Después de busccar un rato por Google, encontré en un foro que puede ser por conflicto de versiones de un plugin, Google Guava. Para resolver el problema y poder utilizar Papyrus desde el STS lo que hice fue:

  1. Ir a la carpeta de plugins de STS. .../sts-3.4.0.RELEASE-test-papyrus/plugins/
  2. Buscar la palabra "guava".
  3. Encontré dos versiones com.google.guava_11.0.2.v201303041551 y com.google.guava_13.0.0.
  4. Moví com.google.guava_13.0.0 a una carpeta distinta como respaldo, para dejar solamente la versión 11.0.2.
  5. Reincié STS.
  6. Volví a crear un nuevo proyecto de Papyrus, y todo comenzó a funcionar correctamente.
Si llegan a tener el mismo problema espero les pueda funcionar esta solución.
Esperemos a que en las nuevas versiones resuelvan este problema.