Mostrando entradas con la etiqueta maven. Mostrar todas las entradas
Mostrando entradas con la etiqueta maven. Mostrar todas las entradas

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.



Problema al crear nuevo módulo de un proyecto Maven

miércoles, 12 de septiembre de 2012

Al estar creando un nuevo módulo para un proyecto Maven usando Spring Source Tool Suite 2.9.2.RELEASE surgió el siguiente error:

Could not calculate build plan: Failed to parse plugin descriptor for org.apache.maven.plugins:maven-resources-plugin:2.4.3 (C:\Users\jruiza\.m2\repository\org\apache\maven\plugins\maven-resources-plugin\2.4.3\maven-resources-plugin-2.4.3.jar): error in opening zip file
Failed to parse plugin descriptor for org.apache.maven.plugins:maven-resources-plugin:2.4.3 (C:\Users\jruiza\.m2\repository\org\apache\maven\plugins\maven-resources-plugin\2.4.3\maven-resources-plugin-2.4.3.jar): error in opening zip file
El problema surge porque STS viene configurado por defecto para usar la librería de Maven embebida, sí, la que viene con el IDE, y esta tiene sus propias configuraciones como la ruta del repositorio de librerías. Al ser así, Maven intenta encontrar el repositorio en la ruta por defecto establecida, que es C:\Usuario\.m2\repository\ pero mi repositrio existe en otra ruta, por lo tanto ocurre este error.
Para solucionarlo simplemente modifiqué las configuraciones de la instalación de Maven y el repositorio.

Desde el menú superior: Window>Preferences>Maven>Installations
Aquí agregué una nueva instalación de Maven, la cual estoy usando en lugar del que viene embebido con STS.
Desde el menú superior: Window>Preferences>Maven>User Settings
Aquí seleccioné el archivo de configuración de Maven que requiero usar. De esta forma toma la ubicación del repositorio de Maven que tengo configurado en el archivo.


Una vez hechas estas configuraciones volví a intentar crear el nuevo modulo de Maven y funcionó correctamente.


Depurar codigo desde Eclipse usando el plugin de Jetty para Maven

martes, 10 de enero de 2012

Hace ya un tiempo estuve desarrollando una aplicación usando Maven como sistema de building. Pero llegué al punto de que cuando quería depurar la aplicación desde Eclipse, simplemente por la forma en la que funciona el plugin de Jetty para Maven, no me redirigía al código fuente cuando se detenía en un breakpoint, sino en el .class, claro, eso es un problema cuando necesitas ver las líneas de código. Pues bien, luego de un poco de búsqueda, encontré que en la documentación del plugin de Jetty explican cómo lograr depurar el código fuente.

Simplemente es necesario seguir el tutorial que está disponible en

Con esos dos pasos se puede comenzar a depurar el código usando Eclipse, un poco tedioso pero muy rápido de configurar y funciona muy bien.

Illegal character in path at index 18: file: ~/.m2/repository/org/apache/ant/ant/1.7.0/ant-1.7.0.jar

domingo, 11 de julio de 2010

Hace unos días mientras generaba mis CRUD usando la herramienta appfuse:gen de Appfuse me mostró el siguiente error extraño:

[INFO] null
Illegal character in path at index 18: file:/~/.m2/repository/org/apache/ant/ant/1.7.0/ant-1.7.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] Trace
java.lang.IllegalArgumentException
Después de buscar pocos minutos, enseguida encontré cuál era el problema. El problema es que Maven tiene ciertos conflictos al intentar parsear la ubicación del repositorio si tal ubicación contiene espacios en blanco. Y este es un error ya muy conocido que me había tocado ver antes, pero lo había olvidado (algo muy común).
Como en mi caso, que por estar usando un Windows XP en español, por defecto Maven genera el repositorio en "C:/Documents and Settings/<usuario>/.m2/repository/org/apache/ant/ant/1.7.0/ant-1.7.0.jar", por lo tanto generará este error en alguna ejecución. Los pasos para corregir el error fue:
  1. Mover el repositorio que Maven genera, que por defecto se encuentra en "C:/Documents and Settings/<usuario>/.m2/" a una que no contenga espacios como "C:\.m2"
  2. Editar el archivo de configuración de Maven que se encuentra en <MAVEN_HOME>\conf\settings.xml. Descomentar y actualizar la directiva que apunta al repositorio local en

    c:\.m2\repository
  3. y BUILD SUCCESSFUL

Espero les sirva para cualquier ejecución de Maven con el mismo problema.

SAXNotRecognizedException: Property 'http://apache.org/xml/features/nonvalidating/load-external-dtd' is not recognized

miércoles, 7 de julio de 2010

Actualmente estoy desarrollando una pequeña aplicación usando Appfuse 2.0.2. Appfuse cuenta con una herramienta de generación de código muy potente que usa Maven.

mvn appfuse:gen -Dentity=NombrePojo

Pues bien, al momento de intentar generar mis CRUD (Create, Retrieve, Update y Delete) me marcó el error:
org.xml.sax.SAXNotRecognizedException: Property 'http://apache.org/xml/features/nonvalidating/load-external-dtd'

Después de buscar un rato en la lista de correo de Appfuse encontré que es una funcionalidad no probada aún con Java 6 y recomiendan solucionarlo apuntando a otra URL, pero había que hacer algunos cambios muy drásticos, pero lo que quería era solamente solucionar ese error y no tenía inconvenientes en cambiar de versión de Java, así que
  1. instalé la versión 5 de Java,
  2. cambié el valor de la variable de entorno JAVA_HOME a la ubicación del JDK5 en vez de la 6,
  3. abrí una nueva ventana de comandos,
  4. ejecuté nuevamente la instrucción mvn appfuse:gen -Dentity=NombrePojo y
  5. vualá BUILD SUCCESSFUL.
Espero que les sirva si están usando Appfuse