Crear proyectos Java EE con Maven


13

He estado desarrollando aplicaciones web Java EE con Eclipse durante aproximadamente un año. Mi empleador no usa Maven, pero cuanto más leo sobre él, más convencido estoy de que Maven + Hudson será de gran beneficio para nosotros. Primero, sin embargo, tengo que sentirme cómodo con esas tecnologías en mi tiempo libre, para poder crear una prueba de concepto.

En este momento, todavía soy un novato de Maven. ¿Existe un conjunto de mejores prácticas para crear aplicaciones web Java EE con Maven? Por ejemplo, podría crear un proyecto con un arquetipo básico y luego agregar todos los JAR necesarios poniendo dependencias en el POM para el contenedor de servlet, EJB, EclipseLink, etc. Eso podría funcionar, pero podría no ser el mejor. manera de hacerlo Agradecería enormemente cualquier orientación que pueda proporcionar sobre este tema.

Respuestas:


10

No te molestes con los arquetipos hasta más tarde

Para toda la información que necesita saber sobre Maven, lea algunos de los libros en su sitio web . Sin embargo, eso es un poco exagerado para lo que estás tratando de lograr.

Para comenzar, diseñe su aplicación web siguiendo la estructura estándar de Maven para aplicaciones web de la siguiente manera. (No necesita un arquetipo de Maven para esto, es solo un montón de carpetas estándar, puede hacerlo en 2 minutos).

  • src/main/java - contiene tu código Java de producción
  • src/main/resources - contiene sus recursos de classpath de producción (por ejemplo, contextos Spring)
  • src/main/webapp - (contiene WEB-INF / web.xml pero no la carpeta lib)
  • src/test/java - contiene tu código Java de prueba
  • src/test/resources - contiene sus recursos de prueba (por ejemplo, feeds XML de ejemplo para pruebas de servicios web, etc.)

Complementos básicos

El siguiente paso es elegir un montón de complementos. Los sospechosos habituales son, obviamente, los que admiten limpieza, compilación y recursos (vienen como parte de Maven pero puedes configurarlos). Entonces tendrás el probador de unidades infalible y el complemento WAR. Eso es suficiente para crear una aplicación web muy básica.

Complementos más avanzados

El siguiente paso es introducir Findbugs y complementos PMD que le darán una revisión exhaustiva de su código e informarán sobre varios problemas potenciales. Probablemente desee tener JXR para el código fuente de referencia cruzada, la lista de tareas para el seguimiento de TODOs y las etiquetas REFACTOR, etc. Sobre todo...

... Use el complemento Jetty para aplicaciones web

Use el complemento Jetty para ejecutar su archivo WAR dentro de su IDE para una depuración fácil. Es rápido y pequeño y hace el trabajo realmente rápido. Tener Jetty como parte de su compilación Maven hace que su proyecto pueda probarse en cualquier máquina sin necesidad de un IDE con algunos paneles de servidores complejos configurados. También le permite declarar dependencias de otros archivos WAR, lo que a su vez significa que puede generar un entorno de trabajo completo que consta de múltiples aplicaciones web, todo con un solo comando "mvn clean jetty: run". Esto funciona en cualquier lugar, e incluso puede proporcionar una configuración JNDI de prueba para que todas las fuentes de datos inyectadas por Spring estén configuradas externamente. Si combina este enfoque Jetty con una página HTML de demostración estándar (src/test/resources/demo.html) ahorrará muchísimas horas de desarrollador intentando obtener un entorno local que funcione. Un comando y listo. Sencillo.

Configurando su IDE

Con Maven es fácil, ya que todos los grandes lo soportan: Eclipse, Netbeans y, por supuesto, mi Intellij favorito. Simplemente apunte su IDE al pom.xml y se encargará de eliminar todas las dependencias enumeradas por usted. No más tonterías con WEB-INF/lib. En Eclipse, normalmente usa Archivo | Importar ... | Proyecto Maven | pom.xml.

Integrando con Hudson

Primero instale Hudson (es solo una aplicación web) y luego apunte a su sistema de control de versiones para que compruebe la versión adecuada. Su último paso es configurarlo para que use Maven para hacer la compilación. Obviamente, Maven tendrá que instalarse en su máquina de compilación (suponiendo que sea diferente de su máquina de desarrollo).

Hudson solo crea las instantáneas

Haga que Hudson realice compilaciones de instantáneas y deje las compilaciones de lanzamiento a un proceso manual. El uso de ese enfoque significará que los desarrolladores pueden compartir su código bajo una revisión de instantánea (por ejemplo, 1.0.0-SNAPSHOT) y solo si puede pasar la compilación se compartirá en el repositorio del equipo. Por lo general, Hudson ejecutará "mvn clean deploy", aunque incluir el objetivo de "sitio" también puede ser parte de su proceso, ya que creará un pequeño sitio web de proyecto para cada compilación. Los desarrolladores del equipo tendrán la compilación de instantáneas actualizada incluida automáticamente en su proyecto a través del proceso de gestión de dependencias de Maven.

Hudson ofrece una gran cantidad de complementos que pueden admitir todo tipo de métricas. Mi favorito personal es hacer un seguimiento del número de pruebas aprobadas por proyecto a lo largo del tiempo. Es genial mostrarle a la gerencia que su recuento de pruebas unitarias y la cobertura siempre están aumentando.

Guía de configuración general

Divida sus repositorios en al menos la siguiente estructura:

  • Team-Release: todos sus artefactos de producción lanzados van aquí
  • instantánea del equipo: todos sus artefactos de desarrollo de instantáneas van aquí
  • lanzamiento de terceros: todas sus bibliotecas de terceros compatibles van aquí (por ejemplo, Spring, Hibernate, etc.)

Las cuentas de usuario de desarrollador no deberían poder escribir en los repositorios del equipo, ya sea una instantánea o una versión. Esto permitiría a un desarrollador evitar a Hudson si tiene prisa y rápidamente se convertirá en la norma.

Asegúrese de descargar siempre las firmas fuente, javadocs y SHA para todos sus terceros. Jarvana es un excelente explorador de repositorios para todas esas clases difíciles de encontrar.

Considere instalar un administrador de repositorio como Nexus o Artifactory para permitir un mejor control sobre su repositorio cada vez mayor.


2
Sonar también es bastante impresionante y encaja bien con maven / Hudson
Kevin

1
Absolutamente. En este momento, si estoy trabajando en un proyecto de Maven en un equipo, esperaría que un Findbugs / PMD local detecte rápidamente los problemas asesinos, luego un trabajo de Sonar después de una construcción de Jenkins con despliegue de artefactos en Nexus o Artifactory. Esto proporciona una ubicación fácil de los artefactos y un análisis de impacto ("donde se usa") para esos artefactos en todo el ecosistema del proyecto. Junto con git, JIRA y Fisheye, tienes disponible un increíble proceso de desarrollo.
Gary Rowe

1
Gary, el enlace pdf ha caducado
user1787812

1

Maven proporciona muchos arquetipos

mvn archetype:generate

imprimirá una lista de disponibles.

La principal diferencia entre los arquetipos simples de Java con los arquetipos J2EE es que se generarán directorios para jsp e imágenes. Si comienza un nuevo proyecto J2EE, considere usar uno de ellos desde el principio.

A medida que su proyecto crezca, puede agregar más dependencias. Personalmente, prefiero comenzar con una colección mínima de dependencias (por ejemplo, el arquetipo básico J2EE) y luego agregar gradualmente lo que necesito.


0

Lo hice comenzando con un arquetipo básico y agregando todos los bits, y estoy bastante seguro de que esa no es una muy buena manera. Pero también me resulta incómodo al revés; seleccionar lo que es un buen arquetipo es difícil a menos que ya estés "profundamente versado en los secretos". Eso es demasiado parecido a la tradición mágica (a diferencia de la información técnica sensible y reconocible) para mi gusto ...


Y creo que es una buena pregunta. Ojalá tuviera una mejor respuesta.
Donal Fellows

Es muy apreciado, señor.
Michael

0

Maven proporciona una forma de crear proyectos a partir de plantillas llamadas Arquetipos . Utiliza el comando mvn archetype:generatepara elegir uno de forma interactiva . También puede especificar uno directamente.

mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-j2ee-simple \
    -DarchetypeVersion=1.0

Todo en una línea.


0

He estado usando Maven y Hudson los últimos tres meses. Me ayuda a verificar el estado de la base del código regularmente ejecutando todas las pruebas unitarias, generando un informe de prueba. Puedes probar esto.
También puedes probar Spring Roo. Es una herramienta RAD para crear proyectos J2EE basados ​​en Spring.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.