¿Qué es Maven?

Maven es una herramienta de gestión y comprensión de proyectos. Maven ofrece a los desarrolladores un marco de trabajo para construir todas las etapas del ciclo de vida de una aplicación. El equipo de desarrollo puede automatizar la infraestructura necesaria para la creación de proyectos en poco tiempo. Maven utiliza un esquema de directorio estándar y una construcción de etapas clásicas de ciclo de vida de un proyecto.

En el caso en el que el desarrollo de un proyecto, sea realizado por varios equipos de desarrollo, Maven puede configurar la forma de trabajar basándose en estándares en muy poco tiempo. Como la mayoría de las configuraciones de proyecto son simples y reutilizable, Maven facilita la vida a los desarrolladores proporcionando de forma automática: la creación de informes, validaciones, compilación y pruebas de configuraciones de forma automatización. Maven facilita el trabajo de los desarrolladores maneras de administrar siguientes:

Maven permite gestionar:

• Compilaciones • Creación de documentación • Creación de informes • Resolución de dependencias • Releases • Distribuciones • Listas de correo

En conclusión, Maven simplifica y estandariza el proceso de creación de proyectos. Gestiona la compilación, distribución, documentación colaboración en grupo y tareas similares. Maven incrementa la reutilización y se encarga de la mayor parte de las tareas relacionadas con las tareas de compilación. Historia de Maven

Maven fue creado con el fin de simplificar el proceso de compilación den el proyecto Turbine de Jakarta. Había varios proyectos y cada uno de ellos contenía ficheros de construcción de ANT muy parecidos. A partir de este hecho, el grupo Apache desarrollo Maven, el cual es capaz de construir proyectos, publicar información acerca de los mismos, desplegar proyectos, compartir JARs y ayudar en la colaboración entre grupos de desarrollo. Objetivo de Maven

El objetivo primario de maven es proporcionar a los desarrolladores:

• Un modelo comprensible para: la creación de proyectos y el mantenimiento de proyectos. • Plugins y tools que interactúan con este modelo declarativo.

1

La estructura y contenido de un proyecto Maven se define en un fichero nombrado pom.. Este fichero se llama POM (Project Object Model). El POM es la piedra de MAVEN. Convención sobre configuración.

Maven utiliza Convención sobre configuración, lo que significa que los desarrolladores no tienen que crear el proceso de creación de ellos mismos. Los desarrolladores no tienen que mencionar todos y cada uno de los detalles de configuración. Maven proporciona un comportamiento para proyectos. Cuando se crea un proyecto Maven, Maven crea la estructura del proyecto de forma predeterminada. El desarrollador sólo debe colocar los ficheros en la forma apropiada y no necesitamos definir ninguna configuración en el fichero pom.xml.

Por ejemplo, la siguiente tabla muestra los valores por defecto para los archivos de código fuente de un proyecto, archivos de recursos y otras configuraciones. Asumiendo que la variable ${basedir} indica la ubicación del proyecto:

Item Valor por defecto Código fuente ${basedir}/src/main/ Recursos ${basedir}/src/main/resources Ficheros con las pruebas ${basedir}/target/classes Compiled byte code ${basedir}/src/test JAR para la distribución ${basedir}/target

Para crear el proyecto, Maven proporciona a los desarrolladores opciones para seleccionar el ciclo de vida objetivo (goal) y dependencias de proyectos (esto depende de las capacidades de los plugins y en sus convenciones por defecto). La mayor parte de la gestión de proyectos, construcción de los mismos y tareas relacionadas es llevada a cabo por los plug-ins de Maven.

Los desarrolladores pueden crear proyectos Maven sin necesidad de conocer cómo funcionan los plugins. Sin embargo para poder adaptarlos a necesidades concretas es necesario saber cómo configurarlos. En la sección Plugins de Maven se dan los detalles para su configuración.

2

Maven Environment Setup

Maven se basa en, así que el primer requisito es tener instalado el kit de desarrollo de Java (SDK) System Requirement

JDK 1.5 o superior. Memory Sin requisito mínimo. Disk Space Sin requisito mínimo. Operating System Sin requisito.

1º Paso. Verificar la instalación de JAVA en su ordenador

Abrir un terminal (cmd.exe) y ejecutar el siguiente comando de acuerdo al S.O. que esté instalado:

Sistema Tarea Comando Operativo Windows Abrir un terminal (cmd.exe) :\> java -version Linux Abrir un terminal $ java -version Mac Abrir terminal $ java -version

El resultado de la ejecución debe ser algo similar a lo siguiente:

Sistema Salida Operativo Windows java version "1.7.0_07" Java(TM) SE Runtime Environment (build 1.7.0_07-b10) Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode) Linux java version "1.7.0_07" Java(TM) SE Runtime Environment (build 1.7.0_07-b10) Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode) Mac java version "1.7.0_07" Java(TM) SE Runtime Environment (build 1.7.0_07-b10) Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)

En caso de que no esté instalado Java, debe proceder a su instalación para ello basta con descargar install the Java Development Kit (SDK) from http://www.oracle.com/technetwork/java/javase/downloads/index.. Se recomienda instalar Java SE 7u9

3

2º Paso: Configurar el entorno JAVA

Se debe crear la variable de entorno JAVA_HOME y hacer que su valor sea igual a la ruta en donde instalo el SDK.

Sistema Operativo Salida Windows JAVA_HOME = C:\Program Files\Java\jdk1.7.0_07 Linux export JAVA_HOME=/usr/local/java-current Mac export JAVA_HOME=/Library/Java/Home

Añadir la ubicación del compilador de Java al Path del sistema.

Sistema Operativo Salida Windows Agregar, a la variable de sistema PATH, la cadena ;C:\Program Files\Java\jdk1.7.0_07\bin Linux export PATH=$PATH:$JAVA_HOME/bin/ Mac No se debe hacer nada

3º Paso: Descargar Maven

Descargar la versión 2.2.1 from http://maven.apache.org/download.html

Sistema Nombre del fichero Operativo Windows apache-maven-2.0.11-bin.zip Linux apache-maven-2.0.11-bin.tar.gz Mac apache-maven-2.0.11-bin.tar.gz

4º Paso: Extraer los ficheros de Maven

Descomprima el fichero “apache-maven-2.2.1-bin.zip” en su ordenador (Para Windows se sugiere la ruta: c:\soft). Una vez descomprimido, debe tener el subdirectorio con Maven

Sistema Ubicación (depende del S.O.) Operativo Windows C:\soft\apache-maven-2.2.1 Linux /usr/local/apache-maven Mac /usr/local/apache-maven

4

5º Paso: Establecer las variables de entorno de Maven

Se deben agregar las variables de entorno M2_HOME, M2, MAVEN_OPTS

S.O. Salida Windows M2_HOME=C:\soft\apache-maven-2.2.1

M2=%M2_HOME%\bin

MAVEN_OPTS=-Xms256m -Xmx512m Linux export M2_HOME=/usr/local/apache-maven/apache-maven-2.2.1

export M2=%M2_HOME%\bin

export MAVEN_OPTS=-Xms256m -Xmx512m Mac Open command terminal and set environment variables.

export M2_HOME=/usr/local/apache-maven/apache-maven-2.2.1

export M2=%M2_HOME%\bin

export MAVEN_OPTS=-Xms256m -Xmx512m

6º Paso: Añada la ubicación del directorio bin al Path del sistema

S.O. Salida Windows Agregar, a la variable de sistema PATH, la cadena: ;%M2%. Linux export PATH=$M2:$PATH Mac export PATH=$M2:$PATH

8º Paso 8: Verificar la instalación de Maven

Abrir una terminal y ejecutar el comando mvn siguiente.

S.O. Tarea Comando Windows Abrir una consola: c:\> mvn --version Linux Abrir un Terminal: $ mvn --version Mac Abrir un Terminal machine:~ joseph$ mvn --version

Finalmente, verifique que en la terminal de comandos, aparece algo como lo siguiente:

5

S.O. Salida Windows 2.2.1 (r801777; 2009-08-06 21:16:01+0200) Java version: 1.7.0_07 Java home: C:\soft\jdk1.7-64bits\jre Linux Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200) Java version: 1.7.0_07 Java home: C:\soft\jdk1.7-64bits\jre Mac Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200) Java version: 1.7.0_07 Java home: C:\soft\jdk1.7-64bits\jre

6

Maven POM

POM es el acrónimo de Project Object Model. Es la piedra angular de trabajo en Maven. Es un fichero XML. Siempre debe estar en el directorio base de un proyecto con el nombre pom.xml.

El POM contiene información sobre el proyecto y detalles de la configuración utilizada por Maven para construir los proyectos. POM también contiene las metas (goals) y los plugins. Durante la ejecución de una tarea (task) o meta (goal), Maven busca el POM en el directorio actual. Lee el POM, obtiene la información de configuración necesaria, y luego ejecuta la meta (goal). Algunas de la configuración que puede especificarse en el POM son los siguientes:

• Dependencias del proyecto • plugins • Metas (goals) • Perfiles de construcción (build profiles) • Versionado del proyecto • Desarrolladores • Listas de correo

Antes de crear un POM, primero se debe decidir el grupo del proyecto (groupId), su nombre (artifactId) y su versión.

Estos atributos definen de forma única al proyecto en el repositorio. POM Ejemplo

4.0.0

com.companyname.project-group project 1.0

Para cada proyecto, debe existir un fichero POM.

• Todos y cada uno de los ficheros POM necesitan tener: El elemento project y tres campos obligatorios: groupId, artifactId, version. • La notación que se utiliza en el repositorio es la siguiente: groupId:artifactId:version. • El elemento raíz del fichero POM.xml es el elemento Project. Project tiene tres sub-nodos principales:

7

Nodo Descripción groupId Identificador de grupo del proyecto. Debe ser único dentro de una organización o proyecto. artifactId Identificador del proyecto. En general es el nombre del proyecto. Junto al identificador de grupo, sirve para definir la ubicación del proyecto dentro del repositorio. version Versión del proyecto

Super POM

Todos los POM heredan de su padre (sea definido de forma explícita o no). Esta POM base es conocido como el Super POM, y contiene valores por defecto.

Maven utiliza el pom efectivo (configuración básica del super pom más la configuración del proyecto) para ejecutar una meta (goal). Sirve a los desarrolladores para especificar detalles de la configuración mínima de su pom.xml. Aunque las configuraciones se pueden cambiar fácilmente.

Una manera fácil de ver las configuraciones predeterminadas de la super POM es ejecutando el siguiente comando: mvn help:effective-pom

Práctica:

1. Crear la carpeta c:\dawsjee\mvn\pr01 2. Crear el fichero c:\dawsjee\mvn\pr01\pom.xml en formato UTF-8 3. Modificar el fichero c:\dawsjee\mvn\pr01\pom.xml para que contenga lo siguiente:

4.0.0

com.companyname.project-group project 1.0

NOTA: Al copiar y pegar reemplaza las dobles comillas.

4. Abrir un terminal, colocarse en la carpeta c:\dawsjee\mvn\pr01 y ejecutar el comando mvn help:effective-pom

8

Resultado de la salida

[INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'help'. [INFO] ------[INFO] Building Unnamed - com.companyname.project-group:project:jar:1.0 [INFO] task-segment: [help:effective-pom] (aggregator-style) [INFO] ------[INFO] [help:effective-pom {execution: default-cli}] [INFO] Effective POMs, after inheritance, interpolation, and profiles are applied:

4.0.0 com.companyname.project-group project 1.0 C:\dawsjee\mvn\pr01\src\main\java src/main/scripts C:\dawsjee\mvn\pr01\src\test\java C:\dawsjee\mvn\pr01\target\classes C:\dawsjee\mvn\pr01\target\test-classes resource-0 C:\dawsjee\mvn\pr01\src\main\resources

9

resource-1 C:\dawsjee\mvn\pr01\src\test\resources C:\dawsjee\mvn\pr01\target project-1.0 maven-antrun-plugin 1.3 maven-assembly-plugin 2.2-beta-2 maven-clean-plugin 2.2 maven-compiler-plugin 2.0.2 maven-dependency-plugin 2.0 maven-deploy-plugin 2.4 maven-ear-plugin 2.3.1 maven-ejb-plugin 2.1 maven-install-plugin 2.2 maven-jar-plugin 2.2 maven-javadoc-plugin 2.5 maven-plugin-plugin 2.4.3 maven-rar-plugin 2.2 maven-release-plugin 2.0-beta-8 maven-resources-plugin 2.3 maven-site-plugin 2.0-beta-7 maven-source-plugin

10

2.0.4 maven-surefire-plugin 2.4.3 maven-war-plugin 2.1-alpha-2 maven-help-plugin 2.1.1 always jboss Repository for Archetype http://richfaces-maven-plugin.googlecode.com/svn/maven2 false central Maven Repository Switchboard http://repo1.maven.org/maven2 never false central Maven Plugin Repository http://repo1.maven.org/maven2 C:\dawsjee\mvn\pr01\target/site

[INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: < 1 second [INFO] Finished at: Sat Dec 08 07:43:28 CET 2012 [INFO] Final Memory: 8M/154M [INFO] ------

No es necesario escribir el fichero pom.xml.

Maven proporciona una gran cantidad de arquetipos para crear proyectos.

11

¿Qué significa Ciclos-de-vida de la construcción de un proyecto?

El ciclo de vida de la construcción de un proyecto, es una secuencia de fases que indican el orden en el que las metas (goals) deben ser ejecutadas. En donde, una fase representa una etapa del ciclo de vida.

Por ejemplo: Un ciclo de vida la construcción de un proyecto consiste de la siguiente secuencia de fases:

Fase Tarea Descripción Preparar-recursos Copia de En esta fase se automatiza el proceso de copiar recursos recursos Compilar compilación En esta fase se realiza la compilación de código fuente Empacar empacado En esta fase se crean los ficheros JAR/WAR/EAR mencionados en el fichero pom.xml. instalar instalación En esta fase se instalan los paquetes en el repositorio Maven (local o remoto).

Existen fases pre y fases post. Estas metas (goals) deben ser ejecutadas antes o después de una fase particular.

Cuando Maven inicia la construcción de un proyecto, lo hace siguiendo una secuencia bien definida de fases, ejecutando las metas (goals) indicadas en cada fase. Los ciclos de vida estándar son:

• clean • build (default) • site

Una meta (goal) representa una tarea (task) que contribuye a la construcción y administración de un proyecto. Una meta puede estar asociada varias fases o a ninguna. A pesar de que una meta no está asociada a una fase esta puede ser ejecutada fuera del ciclo de vida, invocándola directamente

El orden de ejecución depende del orden la que la meta (goal) o metas (goals) son invocadas. Por ejemplo, considere el comando siguiente. Los argumentos “clean” y “package” son fases de construcción mientras que el argumento “dependency:copy- dependencies” es una meta (goal). mvn clean dependency:copy-dependencies package

La fase “clean” será ejecutada primero y a continuación se ejecutará la meta (goal) dependency:copy-dependencies goal finalmente la fase “package” será ejecutada.

Ciclo de vida

12

Cuando se ejecuta el comando: mvn post-clean, Maven invoca el ciclo-de-vida que consta de las siguientes fases.

• pre-clean • clean • post-clean

La meta “clean” (clean:clean) está ligada a la fase “clean” . La meta clean:clean borra la salida generada por una compilación (elimina el directorio). Esto quiere decir que cuando se ejecuta el comando “mvn clean”, Maven elimina el directorio de construcción.

En el siguiente ejemplo, vamos a ligar la meta “maven-antrun-plugin:run” a las fases pre- clean, clean y post-clean. Esto nos va a permitir enviar mensajes de texto indicando en que fase del ciclo-de-vida clean se está ejecutando.

En la carpeta pom.xml in C:\dawsjee\mvn\pr02 se crea el fichero pom.xml con el siguiente contenido:

4.0.0 com.companyname.projectgroup project 1.0 org.apache.maven.plugins maven-antrun-plugin 1.1 id.pre-clean pre-clean run pre-clean phase id.clean clean run clean phase

13

id.post-clean post-clean run post-clean phase

Abrir un terminal, y ejecutar el siguiente comando mvn:Now open command console, go to the folder containing pom.xml and execute the following mvn command.

C:\dawsjee\mvn\pr02>mvn post-clean

[INFO] Scanning for projects... [INFO] ------[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [post-clean] [INFO] ------[INFO] [antrun:run {execution: id.pre-clean}] [INFO] Executing tasks [echo] pre-clean phase [INFO] Executed tasks [INFO] [clean:clean {execution: default-clean}] [INFO] [antrun:run {execution: id.clean}] [INFO] Executing tasks [echo] clean phase [INFO] Executed tasks [INFO] [antrun:run {execution: id.post-clean}] [INFO] Executing tasks [echo] post-clean phase [INFO] Executed tasks [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: < 1 second [INFO] Finished at: Sat Dec 08 12:02:30 CET 2012 [INFO] Final Memory: 5M/122M [INFO] ------C:\dawsjee\mvn\pr02>

Si ejecuta el comando mvn clean command

¿Nota alguna diferencia?

C:\dawsjee\mvn\pr02>mvn clean [INFO] Scanning for projects... [INFO] ------

14

[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [clean] [INFO] ------[INFO] [antrun:run {execution: id.pre-clean}] [INFO] Executing tasks [echo] pre-clean phase [INFO] Executed tasks [INFO] [clean:clean {execution: default-clean}] [INFO] [antrun:run {execution: id.clean}] [INFO] Executing tasks [echo] clean phase [INFO] Executed tasks [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: < 1 second [INFO] Finished at: Sat Dec 08 12:04:15 CET 2012 [INFO] Final Memory: 5M/122M [INFO] ------

Se ejecutan las metas: pre-clean and clean, no se ejecuta la fase post-clean. Ciclo-de-vida por defecto (Build)

Este ciclo de vida es utilizado para construir una aplicación, consta de 23 fases.

Fase del ciclo-de-vida Descripción

Valida si el proyecto es correcto, y genera la información necesaria validate para completar el proceso build. initialize Inicializa propiedades

Genera el código fuente que será incluido en la fase de generate-sources compilación. process-sources Procesa el código fuente, por ejemplo filtra valores. generate-resources Genera los recursos que se deben incluir en el paquete. process-resources Copia y procesa los recursos en el directorio destino. compile Compila el código fuente del proyecto.

Realiza un Post-procesamiento de los ficheros generados en la process-classes compilación. El objetivo es optimizar/enriquecer los bytecodes de los ficheros .class de Java.

Genera cualquier código fuente necesario para ser incluido en la generate-test-sources fase de compilación.

15

Procesa el código fuente de las pruebas, por ejemplo: se filtran process-test-sources valores, ….

test-compile Compila el código fuente y lo deja en el directorio apropiado.

process-test-classes Procesa los ficheros generados en la compilación

test Ejecutar tests utilizando un marco-de-trabajo apropiado (Junit).

Realiza cualquier operación neesaria para preparar un paquete prepare-package antes de ser empacado

El código compilado, es empacado en un formato susceptible de package ser distribuido: JAR, WAR, EAR.

Realiza acciones necesarias antes de la integración de tests para su pre-integration-test ejecución.

Procesa y desliega el paquete en un entorno en donde los tests de integration-test integración pueden ser ejecutados.

Realizar acciones requeridas después de haber ejecutado los test de pre-integration-test integración.

Ejecutar cualquier validación para verificar que el paquete es verify valido y cumple los criterios de calidad.

Instalar los paquetes en el repositorio local, el cual puede ser install utilizado como una dependencia en otros proyectos.

deploy Copia el paquete final a los repositorios remotos.

Hay pocos conceptos importantes relacionados con ciclos-de-vida que merecen ser mencionados.

• Cuando una fase es llamada en base a un comando Maven, por ejmplo mvn compile, solo fases hasta llegar a esta fase incluida la fase será ejecutada. • Dependiendo del tipo de empacado (JAR / WAR / EAR), cambian las metas (goals) Maven que son enlazadas a diferentes fases del ciclo-de-vida .

En el siguiente ejmplo, se enlaza la meta (goal) maven-antrun-plugin:run a algunas de las fases del ciclo-de-vida del proceso “Build”. Esto nos permite mostrar mensajes de texto indicando las fases del ciclo-de-vida.

Para ello se debe crear la carpeta C:\dawsjee\mvn\pr03 y crear un fichero pom.xml con el siguiente código.

16

4.0.0 com.companyname.projectgroup project 1.0 org.apache.maven.plugins maven-antrun-plugin 1.1 id.validate validate run validate phase id.compile compile run compile phase id.test test run test phase id.package package run package phase id.deploy deploy

17

run deploy phase

Ahora ejecuta el siguiente comando en una consola de comandos:

C:\dawsjee\mvn\pr03>mvn compile

La salida es:

C:\dawsjee\mvn\pr03>mvn compile [INFO] Scanning for projects... [INFO] ------[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [compile] [INFO] ------[INFO] [antrun:run {execution: id.validate}] [INFO] Executing tasks [echo] validate phase [INFO] Executed tasks [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\dawsjee\mvn\pr03\src\main\resource s [INFO] [compiler:compile {execution: default-compile}] [INFO] No sources to compile [INFO] [antrun:run {execution: id.compile}] [INFO] Executing tasks [echo] compile phase [INFO] Executed tasks [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: < 1 second [INFO] Finished at: Sat Dec 08 12:51:31 CET 2012 [INFO] Final Memory: 8M/154M [INFO] ------

Ciclo-de-vida del plugin “site”

El plugin site generalmente es utilizado para crear documentación referente a: informes, documentación, …

Fases:

• pre-site • site • post-site • site-deploy

18

En el siguiente ejemplo enlazamos la meta maven-antrun-plugin:run a todas las fases del ciclo-de-vida Site. Esto nos permitirá visualizar las fases del ciclo-de-vida.

Crear la carpeta C:\dawsjee\mvn\pr04 y crear un fichero pom.xml con el siguiente código.

4.0.0 com.companyname.projectgroup project 1.0 org.apache.maven.plugins maven-antrun-plugin 1.1 id.pre-site pre-site run pre-site phase id.site site run site phase id.post-site post-site run post-site phase id.site-deploy site-deploy run

19

site-deploy phase

Ejecutar el siguiente comando mvn.

C:\dawsjee\mvn\pr04>mvn site

[INFO] Scanning for projects... [INFO] ------[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [site] [INFO] ------[INFO] [antrun:run {execution: id.pre-site}] [INFO] Executing tasks [echo] pre-site phase [INFO] Executed tasks [INFO] [site:site {execution: default-site}] [WARNING] No URL defined for the project - decoration links will not be resolved

[INFO] artifact org.apache.maven.skins:maven-default-skin: checking for updates from jboss [INFO] Generating "About" report. [INFO] Generating "Issue Tracking" report. [INFO] Generating "Project Team" report. [INFO] Generating "Dependencies" report. [INFO] Generating "Project Plugins" report. [INFO] Generating "Continuous Integration" report. [INFO] Generating "Source Repository" report. [INFO] Generating "Project License" report. [INFO] Generating "Mailing Lists" report. [INFO] Generating "Plugin Management" report. [INFO] Generating "Project Summary" report. [INFO] [antrun:run {execution: id.site}] [INFO] Executing tasks [echo] site phase [INFO] Executed tasks [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: 2 seconds [INFO] Finished at: Sat Dec 08 12:57:19 CET 2012 [INFO] Final Memory: 31M/506M [INFO] ------

20

¿Qué es un Perfil de Construcción?

Un perfil de construcción es un conjunto de valores de configuración que pueden ser utilizados para remplazar los valores por defecto del proceso “Maven Build”. Mediante los perfiles de construcción se pueden personalizar construcciones para diferentes entornos de desarrollo por ejemplo: Producción, Investigación.

Los perfiles se especifican en el fichero pom.xml utilizando los elementos “activeProfiles” y “profiles”. Los perfiles modifican el POM en tiempo de construcción, y son utilizados para proporcionar parámetros a diferentes entornos “target” (por ejemplo, la ruta de los servidores de bases de datos dependiendo de desarrollo, pruebas, y producción). Tipos del perfil Build

Los perfiles build profiles son principalmente de tres tipos

Tipo ¿En donde es definido?

Por proyecto Se definen en el fichero POM pom.xml

Por usuario Se definen en el fichero xml: %USER_HOME%/.m2/settings.xml

Global Se definen en el fichero xml: %M2_HOME%/conf/settings.xml

Activación de perfiles

La activación de perfiles se puede realizar de diferentes formas:

• Explícitamente, utilizando la consola de comandos. • A través de “maven settings”. • Utilizando variables de entorno. • Presencia/ausencia de ficheros. Ejemplos de activación de perfiles

Asumiendo que un proyecto tiene la siguiente estructura de directorios:

21

En la carpeta src\main\resources hay tres ficheros específicos:

there are three environment specific files:

File Name Description

env.properties Configuración por defecto, utilizada si no se indica un perfil.

env.test.properties Configuración de pruebas cuando se utiliza el perfil “test”.

env.produccion.properties Configuración utilizada cuando de utiliza el perfil “produccion”

22

Activación explicita de un Perfil

Modificar el fichero pom.xml, para ligar la meta maven-antrun-plugin:run a la fase test.

En el fichero pom.xml se definen los perfiles y se activan utilizando parámetros en la líne de comandos.

Assume, we've created following pom.xml in C:\MVN\project folder.

4.0.0 com.companyname.projectgroup project 1.0 test org.apache.maven.plugins maven-antrun-plugin 1.1 test run Using env.test.properties

Ejecute el siguiente comando maven, en donde se define el perfil utilizando la opción -P:

C:\dawsjee\mvn\pr05>mvn test -Ptest

La salida que se obtendrá será algo similar a lo siguiente:

C:\dawsjee\mvn\pr05>mvn test -Ptest [INFO] Scanning for projects... [INFO] ------[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [test] [INFO] ------

23

[INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 3 resources [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to C:\dawsjee\mvn\pr05\target\classes [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\dawsjee\mvn\pr05\src\test\resource s [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] No sources to compile [INFO] [surefire:test {execution: default-test}] [INFO] No tests to run. [INFO] [antrun:run {execution: default}] [INFO] Executing tasks [echo] Using env.test.properties [INFO] Executed tasks [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: < 1 second [INFO] Finished at: Sat Dec 08 14:38:17 CET 2012 [INFO] Final Memory: 13M/154M [INFO] ------

Cómo ejercicio, realice los siguientes cambios:

• Agregue otro elemento perfil al fichero pom.xml • El id de este perfil debe ser normal. • Actualice la sección “task” para ejecutar el comando “echo env.properties” y copiar el fichero env.properties al directorio destino. • Repita los pasos anteriores para crear el perfil “produccion” y modificar la sección “task” para env.produccion.properties • Eso es todo. Ahora se cuentan con tres perfiles listos para ser utilizados (normal / test / produccion).

En una ventana de comando ejecute los siguientes comandos.

C:\dawsjee\mvn\pr05>mvn test –Pnormal C:\dawsjee\mvn\pr05>mvn test –Pproduccion

Observe la salida de cada “build”.

24

Activación de perfiles usando los “settings” de Maven

Crear, en caso de que no existe, el fichero xml settings.xml, localizado en la carpeta %USER_HOME%/.m2

Declarar el perfil “test” como un perfila activo mediante el nodo activeProfiles, de la forma siguiente:

maven.dev.snaponglobal.com Internal Artifactory Maven repository http://repo1.maven.org/maven2/ * test

A continuación, abrir una consola de comandos, colocarse en la carpeta que contiene el fichero pom.xml y ejecutar el siguiente comando mvn test. (En este caso no es necesario utilizar la opción -P. El haber declarado el perfil test como un perfil activo hace que se ejecute directamente al ejecutar el comando mvn test).

C:\dawsjee\mvn\pr05>mvn test Activación de un perfil mediante Variables de entorno

Borre el perfil test, de perfiles activos en el fichero settings.xml y actualice el perfil test en el fichero pom.xml. Agregue el elemento “activation” al elemento perfil, de la siguiente forma:

El perfil “test” será disparado cuando la propiedad de sistema “env” sea especificada con el valor "test". Para ello, se debe crear una variable de entorno "env" y establecer su valor a "test".

test env test

En una consola de comandos, ejecute el comando mvn siguiente:

C:\dawsjee\mvn\pr05>mvn test

25

Activación de un perfil utilizando el S.O.

Primero se debe agregar el elemento de activación, comofue descrito en el paso anterior.

El perfil “test” se disparará cuando el S.O.sea Windows XP.

test Windows XP Windows x86 5.1.2600

Para comprobar que todo funciona apropiadamente, se debe ir a la carpeta que contiene el fichero pom.xml and y ejecutar el comando mvn siguiente (No se debe utilizar la opción –P )

C:\dawsjee\mvn\pr05>mvn test Activación de un perfil, en base a la existencia o ausencia de un Fichero

En este caso, el elemento “activation” debe ser declarado como sigue (El perfil test será disparado cuando no exista el fichero testt/generated- sources/axistools/wsdl2java/com/companyname/group ):

test target/generated- sources/axistools/wsdl2java/com/companyname/group

Para verificar que funciona apropiadamente, abra una consola de comandos, colóquese en la carpeta que contiene el fichero pom.xml y ejecute el comando mvn siguiente:

C:\dawsjee\mvn\pr05>mvn test

26

¿Qué es un repositorio Maven?

En la terminología de Maven, un repositorio es un directorio en donde todos los ficheros jar, plugins, o cualquier otro artefacto de un proyecto son almacenados y pueden ser utilizados fácilmente por Maven.

Existen tres tipos de repositorios Maven:

• local • central • remoto Repositorio Local

El repositorio Maven local es una carpeta en su ordenador. Se crea cuando se ejecuta por primera vez cualquier comando Maven.

El repositorio Maven local mantiene todas las dependencias de sus proyectos (bibliotecas jars, plugin jars, etcétera). Cuando se ejecuta un proceso Maven “build”, de forma automática Maven descarga todos los ficheros jars de las dependencias y los almacena en el repositorio local. Ayuda a evitar referencias a dependencias almacenadas en máquinas remotas, cada vez que se construye un proyecto.

Por defecto, el repositorio Maven local se crea en la carpeta %USER_HOME%. Para definir otra ubicación, basta con modificar el fichero settings.xml %M2_HOME%\conf.

C:/MyLocalRepository

Cuando ejecuta un comando Maven, Maven descargará las dependencias y las almacenará en el directorio indicado. Repositorio Central

El repositorio Maven central es un repositorio proporcionado por la comunidad Maven. Este contiene un gran número de bibliotecas comúnmente utilizadas.

Cuando Maven no encuentra dependencias en el repositorio local, inicia la búsqueda en el repositorio central utilizando la siguiente URL: http://repo1.maven.org/maven2/

Conceptos clave del repositorio Central:

• Este repositorio es gestionado por la comunidad Maven. • No es necesario configurarlo. • Se necesita acceso a Internet.

27

Para ver el contenido del repositorio central Maven, la comunidad Maven proporciona la URL: http://search.maven.org/#browse. Repositorio Remoto

Algunas veces, cuando Maven no encuentra una dependencia en el repositorio central detiene el proceso de construcción y escribe un mensaje de error en la consola. Para prevenir este caso, Maven proporciona el concepto de Repositorio Remoto, el cual es un repositorio alternativo.

Por ejemplo, el fichero POM.xml siguiente, declara que las dependencias que no sean localizadas en el repositorio central, se busquen en un repositorio remoto alternativo.

4.0.0 com.companyname.projectgroup project 1.0 com.companyname.common-lib common-lib 1.0.0 companyname.lib1 http://download.companyname.org/maven2/lib1 companyname.lib2 http://download.companyname.org/maven2/lib2

Secuencia de búsqueda

Cuando se ejecuta un comando “build”, Maven inicia la búsqueda de bibliotecas definidas en las dependencias siguiendo la siguiente secuencia:

• Paso 1. Las dependencias son buscadas en el repositorio local, si no son localizadas, continuamos con el paso 2. • Paso 2. Las dependencias se buscan en el repositorio central, si son localizadas, se descargan y se almacenan en el repositorio local, si no son localizadas procedemos con el tercer paso. • Paso 3. Si no se han declarado repositorios remotos, Maven simplemente, detiene el proceso “build” y genera un error indicando que fue imposible encontrar una dependencia. • Paso 4. Se realiza la búsqueda de las dependencias en los repositorios remotos declarados en el fichero pom.xml, si localiza las dependencias, las descarga y las

28

almacena en el repositorio local, si no las localiza, Maven detiene el proceso “build” y genera un error, indicando que no pudo localizar la(s) referencia(s). ¿Quéson los Plugins de Maven?

Realmente, Maven es un marco de trabajo para ejecutar plugins. Cada una de las tareas es hecha por uno o varios plugins. Los Plugins de Maven son utilizados para:

• Crear ficheros jar • Crear ficheros war • Compilar ficheros • Ejecutar unidades de validación de código • Generar la documentación de proyectos • Generar informes acerca de proyectos

En general, un plugin proporciona un conjunto de metas, que pueden ser ejecutadas utilizando la siguiente sintaxis: mvn [nombre-plugin]:[nombre-meta]

Por ejemplo, un proyecto Java puede ser compilado con el plugin “maven-compiler compile-goal” ejecutando el siguiente comando. mvn compiler:compile Tipos de Plugins

Maven proporciona dos tipos de Plugins:

Tipo Descripción

Se ejecutan durante la construcción y debe ser configurado el elemento Build plugins del fichero pom.xml

Se ejecutan durante la generación del “site”y se configuran con el elemento Reporting plugins del fichero pom.xml

A continuación se muestra una lista de algunos plugins.

Plugin Description clean Borra el directorio destino. compiler Compila los ficheros fuente Java.

Ejecuta los tests unitarios JUnit unit tests. Genera informes del surefile resultado de los tests.

29 jar Genera un fichero JAR. war Genera un fichero WAR javadoc Genera los ficheros Javadoc del proyecto.

Ejecuta un conjunto de tareas Ant, desde cualquier fase indicada en antrun el proceso build.

• Los plugins son definidos en el fichero pom.xml, dentro del elemento plugins. • Cada plugin puede consistir de varias metas. • Se puede definir la fase a partir de la cual se debe iniciar el procesamiento, definiéndolo en el elemento “phase”. • Es posible configurar tareas que deben ser ejecutadas enlazándolas con las metas de un plugin. Por ejemplo, se ha ligado la tarea echo task con la meta “run” del plugin maven-antrun • Esto es todo, Maven se encarga del resto. Descarga el plugin si no ese encuentra en el repositorio local, e inicia su procesamiento.

30

Creación de un Proyecto Java utilizando Maven

Maven emplea plugins (denominados archetypes) para crear proyectos. Para crear una aplicación básica Java se puede utilizar el plugin maven-archetype-quickstart.

Cree la carpeta C:\dawsjee\mvn\pr10, en una consola de comandos ejecute el siguiente comando mvn:

C:\dawsjee\mvn>mvn archetype:generate -DgroupId=com.curso.jee -DartifactId=pr10 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Maven se encarga de crear la estructura de una aplicación Java.

C:\dawsjee\mvn>mvn archetype:generate -DgroupId=com.curso.jee -DartifactId=pr10 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false [INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'archetype'. [INFO] ------[INFO] Building Maven Default Project [INFO] task-segment: [archetype:generate] (aggregator-style) [INFO] ------[INFO] Preparing archetype:generate [INFO] No goals needed for project - skipping [INFO] [archetype:generate {execution: default-cli}] [INFO] Generating project in Batch mode [INFO] ------[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0 [INFO] ------[INFO] Parameter: groupId, Value: com.curso.jee [INFO] Parameter: packageName, Value: com.curso.jee [INFO] Parameter: package, Value: com.curso.jee [INFO] Parameter: artifactId, Value: pr10 [INFO] Parameter: basedir, Value: C:\dawsjee\mvn [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: C:\dawsjee\mvn\pr10 [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: 1 second [INFO] Finished at: Sat Dec 08 22:13:59 CET 2012 [INFO] Final Memory: 24M/221M [INFO] ------

La estructura de la carpeta PR10 es:

C:\DAWSJEE\MVN\PR10 └───src ├───main │ └───java │ └───com │ └───curso │ └───jee └───test └───java └───com └───curso

31

└───jee

Using above example, we can understand following key concepts

Estructura de la Descripción carpeta

pr10 Contiene la carpeta src y el fichero pom.xml

src/main/java Contiene los ficheros con código Java. Estructura del paquete: com.curso.jee

Contiene los ficheros con código Java para verificar el proyecto. La src/main/test estructura del paquete: com.curso.jee

Esta carpeta debe ser creada manualmente. En ella se deben colocar los src/main/resources ficheros con images, ficheros de propiedades, etcétera.

Observe que Maven ha creado un fichero fuente Java, y un fichero con código fuente para la validación (Test).

32

El contenido del fichero App.java es:

package com.curso.jee; public class App{ public static void main( String[] args ){ System.out.println( "Hello World!" ); } }

En la carpeta C:\dawsjee\mvn\pr10\src\test\java\com\curso\jee se ha creado el fichero AppTest.java. El contenido de este fichero es: import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite;

/** * Unit test for simple App. */ public class AppTest extends TestCase{ /** * Create the test case * * @param testName name of the test case */ public AppTest( String testName ) { super( testName ); }

/** * @return the suite of tests being tested

33

*/ public static Test suite(){ return new TestSuite( AppTest.class ); }

/** * Rigourous Test :-) */ public void testApp(){ assertTrue( true ); } }

package com.companyname.bank; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite;

/** * Unit test for simple App. */ public class AppTest extends TestCase { /** * Create the test case * * @param testName name of the test case */ public AppTest( String testName ) { super( testName ); }

34

/** * @return the suite of tests being tested */ public static Test suite() { return new TestSuite( AppTest.class ); }

/** * Rigourous Test :-) */ public void testApp() { assertTrue( true ); } }

Los desarrolladores deben colocar sus ficheros de código de acuerdo a lo mencionado en la tabla mostrada anteriormente, para que Maven pueda gestionar el proyecto.

35

Construcción y Validación del proyecto Java utilizando Maven

Hasta ahora se ha visto como crear una aplicación Java utilizando Maven. Ahora nos centraremos en cómo construir y validar la aplicación.

Edite el fichero pom.xml ubicado en C:\dawsjee\mvn\pr10. El contenido del fichero pom.xml debe ser algo parecido al siguiente código:

4.0.0 com.curso.jee pr10 jar 1.0-SNAPSHOT pr10 http://maven.apache.org junit junit 3.8.1 test

Observe que Maven agrego el marco de trabajo “junit”. Además creo los ficheros App.java y AppTest.

En una consola de comandos ejecute el siguiente comando mvn:

C:\dawsjee\mvn\pr10>mvn clean package

La salida que se genera es:

C:\dawsjee\mvn\pr10>mvn clean package [INFO] Scanning for projects... [INFO] ------[INFO] Building pr10 [INFO] task-segment: [clean, package] [INFO] ------[INFO] [clean:clean {execution: default-clean}] [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\dawsjee\mvn\pr10\src\main\resource s [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to C:\dawsjee\mvn\pr10\target\classes [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\dawsjee\mvn\pr10\src\test\resource s [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Compiling 1 source file to C:\dawsjee\mvn\pr10\target\test-classes [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: C:\dawsjee\mvn\pr10\target\surefire-reports

36

------T E S T S ------Running com.curso.jee.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jar:jar {execution: default-jar}] [INFO] Building jar: C:\dawsjee\mvn\pr10\target\pr10-1.0-SNAPSHOT.jar [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: 1 second [INFO] Finished at: Sat Dec 08 22:39:10 CET 2012 [INFO] Final Memory: 20M/224M [INFO] ------

Felicitaciones, usted ya ha creado su proyecto y ha creado un fichero .jar.

Se ha generado la carpeta target.

37

Dentro de esta carpeta se tuene un fichero pr10-1.0-SNAPSHOT.jar

A continuación se listan los conceptos de aprendizaje clave:

• Se dieron 2 metas. La primera para borrar el directorio “target” (meta cklean)y la segunda para empacar el proyecto en formato jar. • El fichero empacado “pr10-1.0-SNAPSHOT.jar” se encuentra en la carpeta pr10\target. • Los informes de “Test” se encuentran disponibles en la carpeta pr10\target\surefire-reports folder. • Maven se ha encargado de compilar los ficheros con código fuente y los ficheros con código fuente para ejecutar los tests. • Maven ejecuta los casos de prueba. • Finalmente, Maven genero el fichero .jar

38

Finalmente, abra una consola de comandos, colóquese en la carpeta C:\dawsjee\pr10\target\classes y ejecute el siguiente comando java:

C:\dawsjee\mvn\pr10\target\classes>java com.curso.jee.App

El resultado debe ser la cadena de texto:

Hello World! ¿Cómo agregar ficheros con código Java?

En la carpeta C:\dawsjee\mvn\pr10\src\main\java\com\curso\jee debe crear un fichero con el nombre Util.java

El contenido de este fichero debe ser: package com.curso.jee; public class Util { public static void printMessage(String message){ System.out.println(message); } }

Actualiza el fichero App.java para que tenga este código: package com.curso.jee; public class App { public static void main( String[] args ) { Util.printMessage("Bienvenido al curso de JEE!"); } }

Abra una consola de comandos y ejecute el siguiente comando mvn:

C:\dawsjee\mvn\pr10>mvn clean compile

C:\dawsjee\mvn\pr10>mvn clean compile [INFO] Scanning for projects... [INFO] ------[INFO] Building pr10 [INFO] task-segment: [clean, compile] [INFO] ------[INFO] [clean:clean {execution: default-clean}] [INFO] Deleting directory C:\dawsjee\mvn\pr10\target [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\dawsjee\mvn\pr10\src\main\resource s [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 2 source files to C:\dawsjee\mvn\pr10\target\classes [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: < 1 second [INFO] Finished at: Sun Dec 09 07:48:07 CET 2012 [INFO] Final Memory: 12M/154M [INFO] ------

Ahora ejecute la clase App.class

39

C:\dawsjee\mvn\pr10\target\classes>java com.curso.jee.App

En la consola debe aparecer lo siguiente:

Dependencias externas en Maven

Maven realiza la gestión de dependencias utilizando el concepto de repositorios Maven.

Pero ¿qué sucede si la dependencia no está disponible en cualquiera de los repositorios remotos y repositorio central?

Maven ofrece la respuesta para tal escenario utilizando el concepto de dependencia externa. En el proyecto creado en la sección anterior, realice los siguientes cambios .

• En la carpeta “src” se debe agregar una carpeta con el nombre lib • Haga una copia del fichero mysql-connector-java-5.1.22-bin.jar y póngala en la carpeta lib.

Ahora nuestra estructura de proyecto debe ser como la siguiente:

40

El proyecto ya tiene una librería específica propia, cosa común en los proyectos Java. Si construye el proyecto tal y como está ahora Maven generará un mensaje de error, debido a que Maven no puede descargar o referenciar esta biblioteca durante la fase de compilación.

Para solucionar este problema, se debe agregar información acerca de la dependencia externa en el pom.xml

4.0.0 com.companyname.bank consumerBanking jar 1.0-SNAPSHOT consumerBanking http://maven.apache.org

junit junit 3.8.1 test

41

mysql-connector-java mysql-connector-java system 1.0 ${basedir}\src\lib\ mysql-connector-java-5.1.22- bin.jar

Puntos a tener en cuenta, en lo referente a dependencias externas:

Las dependencias externas son configuradas, en el fichero pom.xml, de la misma forma que las dependencias locales.

• Debe especificar un “groupId” igual al nombre de la biblioteca. • Debe especificar el “artifactId” con el mismo nombre que la biblioteca. • Debe especificar el “scope” como “system”. • Debe indicar la ruta, en donde está el fichero, utilizando una ruta relativa a la ubicación del proyecto. Documentación de un Proyecto Maven

Este tutorial le mostrará cómo crear documentación de la aplicación de una sola vez. Así que vamos a empezar, vaya al directorio c:\dawsjee\mvn\pr10 . Ejecute el siguiente comando mvn.

c:\dawsjee\mvn\pr10

C:\dawsjee\mvn\pr10>mvn site

[INFO] Scanning for projects... [INFO] ------[INFO] Building pr10 [INFO] task-segment: [site] [INFO] ------[INFO] [site:site {execution: default-site}] [INFO] artifact org.apache.maven.skins:maven-default-skin: checking for updates from jboss [INFO] artifact org.apache.maven.skins:maven-default-skin: checking for updates from central [INFO] Generating "About" report. [INFO] Generating "Issue Tracking" report. [INFO] Generating "Project Team" report. [INFO] Generating "Dependencies" report. [INFO] Generating "Continuous Integration" report. [INFO] Generating "Source Repository" report. [INFO] Generating "Project License" report. [INFO] Generating "Mailing Lists" report. [INFO] Generating "Plugin Management" report. [INFO] Generating "Project Summary" report. [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: 4 seconds

42

[INFO] Finished at: Sun Dec 09 08:14:03 CET 2012 [INFO] Final Memory: 31M/350M [INFO] ------

C:\dawsjee\mvn\pr10>

Eso es todo. La documentación del proyecto esta lista. Maven ha generado una carpeta “site” dentro de la carpeta target.

• • Pulse sobre el fichero index.html para ver la documentación generada.

43

• • Maven genera la documentación utilizando la aplicación Doxia. Si desea crear documentación acerca de su proyecto, puede utilizar los siguientes formatos: •

Format Name Description Reference Formato de

APT documento de texto http://maven.apache.org/doxia/format.html plano. Formato de

XDoc documentación para http://jakarta.apache.org/site/jakarta-site2.html Maven 1.0

44

Utilizado para http://maven.apache.org/doxia/references/fml- FML documentos tipo format.html FAQ

XHTML HTML Extensible http://en.wikipedia.org/wiki/XHTML

Plantillas (Templates) del Proyecto Maven Maven ofrece a los usuarios, una lista muy grande de diferentes tipos de plantillas de proyecto (más de 614). Maven utiliza el concepto de arquetipo. Para iniciar rápidamente un nuevo proyecto java, basta con ejecutar siguiente comando mvn archetype:generate ¿Qué es un arquetipo?

Un arquetipo es un plugin de Maven, cuya tarea es crear una estructura de proyecto de acuerdo a una plantilla. A continuación, vamos a usar un arquetipo para crear una aplicación java sencilla. Utilización de una plantilla de proyecto

En una consola de comandos, colocarse en la carpeta c:\dawsjee\mvn y ejecutar el siguiente comando mvn:

C:\MVN>mvn archetype:generate

Maven will start processing and will ask to choose required archetype

[INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'archetype'. [INFO] ------[INFO] Building Maven Default Project [INFO] task-segment: [archetype:generate] (aggregator-style) [INFO] ------[INFO] Preparing archetype:generate [INFO] No goals needed for project - skipping [INFO] [archetype:generate {execution: default-cli}] [INFO] Generating project in Interactive mode [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype- quickstart:1.0) Choose archetype: 1: remote -> br.gov.frameworkdemoiselle.archetypes:demoiselle-jsf-jpa (Archetype for web applications (JSF + JPA) using Demoiselle Framework) 2: remote -> br.gov.frameworkdemoiselle.archetypes:demoiselle-minimal (Basic archetype for generic applications using Demoiselle Framework) 3: remote -> br.gov.frameworkdemoiselle.archetypes:demoiselle--jpa (Archetype for Vaadin web applications) 4: remote -> co.ntier:spring-mvc-archetype (An extremely simple Spring MVC archetype, configured with NO XML.) 5: remote -> com.agilejava.docbkx:docbkx-quickstart-archetype (-) 6: remote -> com.alibaba.citrus.sample:archetype-webx-quickstart (-) 7: remote -> com.bsb.common.vaadin:com.bsb.common.vaadin.embed-simple-archetype (-) 8: remote -> com.bsb.common.vaadin:com.bsb.common.vaadin7.embed-simple-archetype (-) 9: remote -> com.cedarsoft.open.archetype:multi (-) 10: remote -> com.cedarsoft.open.archetype:simple (-)

45

11: remote -> com.dyuproject.protostuff.archetype:basic-gwt-webapp (webapp archetype using protostuff, and gwt) 12: remote -> com.dyuproject.protostuff.archetype:basic-webapp (webapp archetype using protostuff, json and ) 13: remote -> com.dyuproject.protostuff.archetype:simple-gwt-webapp (webapp archetype using protobuf, json and gwt) 14: remote -> com.dyuproject.protostuff.archetype:simple-webapp (webapp archetype using protobuf, json and jquery) 15: remote -> com.force.sdk:springmvc-archetype (-) 16: remote -> com.github.igor-petruk.archetypes:maven-archetype-executable (Executable Quickstart Archetype that is ready to run with 'java -jar') 17: remote -> com.github.igor-petruk.archetypes:maven-archetype-scala-executable (Creates executable Scala Project that is ready to run with 'java -jar') 18: remote -> com.github.jpaoletti:jpm-archetype (Archetype for a jpm-struts1-bootstrap project) 19: remote -> com.github.lalyos:standalone-jpa-eclipselink-archetype (StandAlone (j2se) jpa project with eclipseLink implementations using embedded DerbiDB) 20: remote -> com.github.venkatramanm.swf-all:swf-archetype (Archetype to create apps using SWF) 21: remote -> com.github.venkatramanm.swf-all:swf-plugin-archetype (Archetype to create plugins for SWF) 22: remote -> com.google.code.plsqlmaven:plsql-package-archetype (a sample archetype that creates a project with a PL/SQL package inside and extends the parent project) 23: remote -> com.google.code.plsqlmaven:plsql-project-archetype (preconfigured PL/SQL project) 24: remote -> com.google.code.plsqlmaven:plsql-webapp-archetype (preconfigured PL/SQL webapp) 25: remote -> com.google.sitebricks:sitebricks-jetty-archetype (-) 26: remote -> com.googlecode.android-player-root-archetype:parent-archetype (-) 27: remote -> com.googlecode.apparat:apparat-archetype-asm (-) 28: remote -> com.googlecode.apparat:apparat-archetype-tdsi (-) 29: remote -> com.googlecode.etl-unit:etlunit-feature-archetype (-) 30: remote -> com.googlecode.etl-unit:etlunit-project-archetype (-) 31: remote -> com.googlecode.gwtquery:gquery-archetype (This archetype generates a Gwt-2.5.0-rc1 project with all set to use GwtQuery and its plugins.) 32: remote -> com.googlecode.gwtquery:gquery-plugin-archetype (-) 33: remote -> com.googlecode.jannocessor:jannocessor-sample-archetype (Multi-module sample project for annotation-driven source code generation with JAnnocessor) 34: remote -> com.googlecode.jdbc-proc:jdbc-proc-archetype (Creates simple project with jdbc-proc support) 35: remote -> com.googlecode.metridoc:metridoc-archetype (-) 36: remote -> com.googlecode.playn:playn-archetype (Archetype for PlayN game projects.) 37: remote -> com.highwise:weby (A simple spring mvc + project archetype) 38: remote -> com.jgeppert.struts2.jquery:struts2-jquery-archetype-base (This Archetype provides a Webapp Configuration ready for the Struts2 jQuery Plugin.) 39: remote -> com.jgeppert.struts2.jquery:struts2-jquery-archetype-mobile (This Archetype provides a Webapp Configuration ready for the Struts2 jQuery Mobile Plugin.) 40: remote -> com.jgeppert.struts2.jquery:struts2-jquery-bootstrap-archetype-grid (This Archetype provides a Webapp Configuration ready for the Struts2 jQuery Grid Plugin and the Struts2 Bootstrap Plugin.) 41: remote -> com.liferay.maven.archetypes:liferay-ext-archetype (Provides an archetype to create Liferay extensions.) 42: remote -> com.liferay.maven.archetypes:liferay-hook-archetype (Provides an archetype to create Liferay hooks.) 43: remote -> com.liferay.maven.archetypes:liferay-layouttpl-archetype (Provides an archetype to create Liferay layout templates.) 44: remote -> com.liferay.maven.archetypes:liferay-portlet-archetype (Provides an archetype to create Liferay portlets.) 45: remote -> com.liferay.maven.archetypes:liferay-portlet--archetype (Provides an archetype to create Liferay ICEfaces portlets.) 46: remote -> com.liferay.maven.archetypes:liferay-portlet-jsf-archetype (Provides an archetype to create Liferay JSF portlets.) 47: remote -> com.liferay.maven.archetypes:liferay-portlet-liferay-faces-alloy-archetype (Provides an archetype to create Liferay Faces Alloy portlets.) 48: remote -> com.liferay.maven.archetypes:liferay-portlet--archetype (Provides an archetype to create Liferay PrimeFaces portlets.) 49: remote -> com.liferay.maven.archetypes:liferay-portlet--archetype (Provides an archetype to create Liferay RichFaces portlets.) 50: remote -> com.liferay.maven.archetypes:liferay-servicebuilder-archetype (Provides an archetype to create Liferay Service Builder portlets.) 51: remote -> com.liferay.maven.archetypes:liferay-theme-archetype (Provides an archetype to create Liferay themes.) 52: remote -> com.liferay.maven.archetypes:liferay-web-archetype (Provides an archetype to create Liferay webs.) 53: remote -> com.lordofthejars.thymeleafarchetype:thymeleaf-spring-maven-archetype (Thymeleaf Spring Maven Archetype) 54: remote -> com.matthewjosephtaylor.archetypes:application-archetype (Maven archetype for a single-jar application) 55: remote -> com.mikenimer:extjs-springmvc-webapp (A maven Archetype to create new EXTJS project powered by a spring MVC service.)

46

56: remote -> com.mysema.rdf:rdfbean-tapestry-quickstart (Archetype for creating a basic RDFBean Tapestry 5 application.) 57: remote -> com.mysema.rdfbean:rdfbean-tapestry-quickstart (-) 58: remote -> com.nativelibs4java:javacl-simple-tutorial (-) 59: remote -> com.pojosontheweb:woko-archetype (-) 60: remote -> com.proofpoint.platform:sample-server-archetype (Sample server archetype) 61: remote -> com.proofpoint.platform:skeleton-server-archetype (Skeleton server archetype) 62: remote -> com.pyx4me:j2me-simple (Maven 2 Archetype for application using j2me-maven-plugin) 63: remote -> com.sixdimensions.wcm.cq:cq-deploy-plugin (Maven plugin for automating code deployments to Adobe CQ.) 64: remote -> com.sixsq.slipstream:slipstream-module (-) 65: remote -> com.sun.faces.regression:i_jsf_XXXX-archetype (-) 66: remote -> com.sun.faces.test:i_jsf_xxxx_htmlunit-archetype (-) 67: remote -> com.sun.jersey.archetypes:jersey-quickstart-ejb (An archetype which contains a simple Jersey based EJB project.) 68: remote -> com.sun.jersey.archetypes:jersey-quickstart-grizzly (An archetype which contains a quickstart Jersey project based on Grizzly container.) 69: remote -> com.sun.jersey.archetypes:jersey-quickstart-grizzly2 (An archetype which contains a quickstart Jersey project based on Grizzly2 container.) 70: remote -> com.sun.jersey.archetypes:jersey-quickstart-webapp (An archetype which contains a sample Jersey based Webapp project.) 71: remote -> com.taobao.itest:itest-sample-s30-archetype (-) 72: remote -> com.tqlab.sense:tqlab-sense-archetype (tqlab sense archetype) 73: remote -> com.vaadin:vaadin-archetype-addon (-) 74: remote -> com.vaadin:vaadin-archetype-application (This archetype generates a simple Vaadin application as a Maven project.) 75: remote -> com.vaadin:vaadin-archetype-clean (This archetype generates a simple Vaadin application as a Maven project. No custom widgetset is included.) 76: remote -> com.vaadin:vaadin-archetype-jpacontainer (This archetype generates a simple Vaadin application using JPAContainer as a Maven project.) 77: remote -> com.vaadin:vaadin-archetype-portlet (This archetype creates a simple porlet with required Vaadin dependencies. In addition to standard JSR 286 configurations the archetype also adds liferay specific configuration files, but they shoudn't affect other portals.) 78: remote -> com.vaadin:vaadin-archetype-sample (This archetype generates a Vaadin application as a Maven project. The application contains a custom GWT widgetset that is compiled by the GWT compiler and integrated into the project as part of the build process. The application is based on the Vaadin Color Picker Demo application available at http://vaadin.com.) 79: remote -> com.vaadin:vaadin-archetype-touchkit (This archetype generates a simple Vaadin application using TouchKit as a Maven project.) 80: remote -> com.vaadin:vaadin-archetype-widget (This archetype generates a Vaadin widget project for Vaadin 6.2+ and a test application.) 81: remote -> com.vaadin:vaadin-maven-plugin (Maven plugin for Vaadin.) 82: remote -> com.willowtreeapps:oak-archetype (-) 83: remote -> com.zenjava:-basic-archetype (The JavaFX Basic Archetype provides core functionality for assembling JavaFX applications.) 84: remote -> com.zenjava:javafx-rest-archetype (The JavaFX Basic Archetype provides a Maven archetype for generating a basic JavaFX REST client-server starter project.) 85: remote -> de.akquinet.android.archetypes:android-quickstart (Creates a skeleton for an Android application) 86: remote -> de.akquinet.android.archetypes:android-release (Creates a skeleton for an Android application, instrumentation tests and ready-to-publish application on releases.) 87: remote -> de.akquinet.android.archetypes:android-with-test (Creates a skeleton for an Android application and instrumentation tests) 88: remote -> de.akquinet.chameria:chameria-quickstart-archetype (-) 89: remote -> de.akquinet..archetypes:javascript-jqueryplugin (-) 90: remote -> de.akquinet.javascript.archetypes:javascript-quickstart (-) 91: remote -> de.akquinet.jbosscc:jbosscc-javaee6-modular-ear-archetype (Maven Archetype to generate a modular Java EE 6 based project skeleton.) 92: remote -> de.akquinet.jbosscc:jbosscc-seam-archetype (Maven Archetype to generate a Seam Application - running on JBoss AS7) 93: remote -> de.cologneintelligence:archetype-fitgoodies-quickstart (Archetype which generates an FitGoodies- enabled example project) 94: remote -> de.crowdcode.kissmda.maven:kissmda-maven-app-archetype (-) 95: remote -> de.crowdcode.kissmda.maven:kissmda-maven-cartridge-archetype (-) 96: remote -> de.saumya.mojo:rails-maven-archetype (-)

47

97: remote -> de.schlichtherle:javafx-scala-demo (An archetype for a standalone JavaFX 2.0 application written in Scala. The generated application is translated from the Colorful Circles demo from the JavaFX 2.0 SDK.) 98: remote -> de.schlichtherle.truezip:truezip-archetype-file (TrueZIP File* module application - requires JSE 6.) 99: remote -> de.schlichtherle.truezip:truezip-archetype-path (TrueZIP Path module application - requires JSE 7.) 100: remote -> dk.jacobve.maven.archetypes:maven-archetype-flex (An archetype which contains a sample Maven Flex project using the israfil maven plugin) 101: remote -> es.ucm.fdi.grasia.faerie.archetypes:basic (Project for definition and implementation of an architecture/framework for Ambient-Assited Living systems) 102: remote -> eu.vitaliy:java6se-spring3-archetype (Simple spring 3 archetype) 103: remote -> io.airlift:sample-server-archetype (Sample server archetype) 104: remote -> io.airlift:skeleton-server-archetype (Skeleton server archetype) 105: remote -> it.amattioli.archetypes:javate--archetype (-) 106: remote -> it.tidalwave.:netbeans-platform-archetype (Tidalwave NetBeans Platform Archetype) 107: remote -> it.tidalwave.northernwind:simple-project-site-archetype-1 (-) 108: remote -> it.tidalwave.northernwind:simple-site1-step1-archetype (-) 109: remote -> it.tidalwave.thesefoolishthings:project-archetype (TheseFoolishThings - Project Archetype) 110: remote -> javax.faces:javax.faces-war-archetype (-) 111: remote -> jboss:mobicents-ra-mavenization-archetype (-) 112: remote -> net.avh4.mvn.archetype:java-1.6-archetype (-) 113: remote -> net.contextfw:web-quickstart (Context Framework - Quickstart) 114: remote -> net.databinder:data-app (To make creating a new Databinder application easier, this archetype includes all required sources and resources.) 115: remote -> net.databinder.maven.net.databinder:data-app (To make creating a new Databinder application easier, this archetype includes all required sources and resources.) 116: remote -> net.devonlinux.solr:solr-quickstart-archetype (-) 117: remote -> net.devonlinux.solr:solr-quickstart-archetype-no-acceptance-tests (-) 118: remote -> net.flexmojos.oss:flexmojos-archetypes-application (-) 119: remote -> net.flexmojos.oss:flexmojos-archetypes-library (-) 120: remote -> net.flexmojos.oss:flexmojos-archetypes-modular-webapp (-) 121: remote -> net.java.truevfs:truevfs-archetype-access (Showcases the client API of the module TrueVFS Access.) 122: remote -> net.java.truevfs:truevfs-archetype-profile (Creates a custom TrueVFS Profile which bundles all selected TrueVFS modules for ease of use with and without Maven.) 123: remote -> net.kindleit:gae-archetype-gwt (Archetype for creating maven-gae projects that uses GWT for the view) 124: remote -> net.kindleit:gae-archetype-jsf (Archetype for creating maven-gae projects that works under Java Server Faces) 125: remote -> net.kindleit:gae-archetype-jsp (Archetype for creating maven-gae projects that uses jsp for the view) 126: remote -> net.kindleit:gae-archetype-objectify-jsp (Archetype for creating maven-gae projects that uses jsp for the view and Objectify for the ORM.) 127: remote -> net.kindleit:gae-archetype-wicket (Archetype for creating maven-gae projects based on framework) 128: remote -> net.liftweb:-archetype-basic (Basic project archetype for Lift (with database, logging, user management).) 129: remote -> net.liftweb:lift-archetype-basic_2.7.7 (Basic project archetype for Lift Web Framework (with database, logging, user management).) 130: remote -> net.liftweb:lift-archetype-basic_2.8.0 (Basic project archetype for Lift Web Framework (with database, logging, user management).) 131: remote -> net.liftweb:lift-archetype-basic_2.8.1 (-) 132: remote -> net.liftweb:lift-archetype-basic_2.9.1 (Basic project archetype for Lift Web Framework (with database, logging, user management).) 133: remote -> net.liftweb:lift-archetype-blank (Blank project archetype for Lift Web Framework.) 134: remote -> net.liftweb:lift-archetype-blank_2.7.7 (Blank project archetype for Lift Web Framework.) 135: remote -> net.liftweb:lift-archetype-blank_2.8.0 (Blank project archetype for Lift Web Framework.) 136: remote -> net.liftweb:lift-archetype-blank_2.8.1 (-) 137: remote -> net.liftweb:lift-archetype-blank_2.9.1 (Blank project archetype for Lift Web Framework.) 138: remote -> net.liftweb:lift-archetype-hellolift (Archetype - hellolift, a sample Lift application) 139: remote -> net.liftweb:lift-archetype-jpa-basic (Basic JPA archetype for Lift Web Framework.) 140: remote -> net.liftweb:lift-archetype-jpa-basic_2.7.7 (Basic JPA archetype for Lift Web Framework.) 141: remote -> net.liftweb:lift-archetype-jpa-basic_2.8.0 (Basic JPA archetype for Lift Web Framework.) 142: remote -> net.liftweb:lift-archetype-jpa-basic_2.8.1 (-) 143: remote -> net.liftweb:lift-archetype-jpa-basic_2.9.1 (Basic JPA archetype for Lift Web Framework.) 144: remote -> net.liftweb:lift-archetype-jpa-blank (Blank JPA archetype for Lift Web Framework.) 145: remote -> net.liftweb:lift-archetype-jpa-blank-single (Blank JPA archetype for Lift Web Framework (single project).)

48

146: remote -> net.liftweb:lift-archetype-jpa-blank-single_2.7.7 (Blank JPA archetype for Lift Web Framework (single project).) 147: remote -> net.liftweb:lift-archetype-jpa-blank-single_2.8.0 (Blank JPA archetype for Lift Web Framework (single project).) 148: remote -> net.liftweb:lift-archetype-jpa-blank-single_2.8.1 (-) 149: remote -> net.liftweb:lift-archetype-jpa-blank-single_2.9.1 (Blank JPA archetype for Lift Web Framework (single project).) 150: remote -> net.liftweb:lift-archetype-jpa-blank_2.7.7 (Blank JPA archetype for Lift Web Framework.) 151: remote -> net.liftweb:lift-archetype-jpa-blank_2.8.0 (Blank JPA archetype for Lift Web Framework.) 152: remote -> net.liftweb:lift-archetype-jpa-blank_2.8.1 (-) 153: remote -> net.liftweb:lift-archetype-jpa-blank_2.9.1 (Blank JPA archetype for Lift Web Framework.) 154: remote -> net.liftweb:lift-archetype-sbt (Basic project archetype for Lift Web Framework (with database, logging, user management) using the sbt build system) 155: remote -> net.liftweb:lift-archetype-sbt_2.7.7 (Basic project archetype for Lift Web Framework (with database, logging, user management) using the sbt build system) 156: remote -> net.liftweb:lift-archetype-sbt_2.8.0 (Basic project archetype for Lift Web Framework (with database, logging, user management) using the sbt build system) 157: remote -> net.liftweb:lift-archetype-sbt_2.8.1 (-) 158: remote -> net.liftweb:lift-archetype-sbt_2.9.1 (Basic project archetype for Lift Web Framework (with database, logging, user management) using the sbt build system) 159: remote -> net.officefloor.maven:woof-archetype (Archetype to generate a WoOF project) 160: remote -> net.phaedra:phaedra-archetype (-) 161: remote -> net.sf.ingenias:iafarch-empty (-) 162: remote -> net.sf.ingenias:iafarch-gui (-) 163: remote -> net.sf.ingenias:iafarch-helloworld (-) 164: remote -> net.sf.ingenias:iafarch-interaction (-) 165: remote -> net.sf.itcb.archetype:common-archetype (Archetype that might be used by IT managers in order to create the common packages of custom IT. groupId, artifactId, package, version, companyMainGroupId, companyMainArtifactId, companyMainVersion, company, companyUrl have to be defined in archetype execution. By convention, we recommend to call this module common-"yourcompany".) 166: remote -> net.sf.itcb.archetype:main-archetype (Archetype that might be used by IT managers in order to create the base of custom IT. archetypeId, groupId, version, company and companyUrl have to be defined in archetype execution. By convention, we recommend to call this module main-"yourcompany".) 167: remote -> net.sf.jlue:jlue-archetype-basic (Archetype - basic project for Jlue) 168: remote -> net.sf.jlue:jlue-archetype-blank (Archetype - blank project for Jlue) 169: remote -> net.sf.maven-har:maven-archetype-har (-) 170: remote -> net.sf.maven-sar:maven-archetype-sar (-) 171: remote -> net.sf.mgp:maven-archetype-gwt (An archetype which contains a sample Maven GWT project.) 172: remote -> net.sf.portletunit:portletunit-portlet-archetype (An archetype that creates a simple porltet with unit tests.) 173: remote -> net.sf.squirrel-sql.plugins:squirrelsql-plugin-archetype (This project produces the maven archetype that can be used to generate a SQuirreL Plugin maven project. The project that is produced contains an Example plugin that demonstrates the use of key plugin APIs.) 174: remote -> net..ota-tools.schema:ota-tools-schema-archetype (-) 175: remote -> net.thejeearchitectcookbook:jsf-jqmobile-archetype (JSF 2 and JQuery Mobile basic web archetype.) 176: remote -> net.thucydides:thucydides-easyb-archetype (Thucydides automated acceptance testing project using Selenium 2, JUnit and easyb) 177: remote -> net.thucydides:thucydides-simple-archetype (Thucydides automated acceptance testing project using Selenium 2 and JUnit) 178: remote -> no.:modular-app-archetype (Modular application archetype based on Tornado Inject - One service and one client module.) 179: remote -> org.antlr:antlr3-maven-archetype (ANTLR 3 Maven Archetype) 180: remote -> org.apache.archiva:archiva-consumer-archetype (Simple archetype to create archiva consumers) 181: remote -> org.apache.avro:avro-service-archetype (Archetype that generates a simple example Avro service) 182: remote -> org.apache.camel:camel-component (-) 183: remote -> org.apache.camel:camel-router (-) 184: remote -> org.apache.camel.archetypes:camel-archetype-activemq (Creates a new Camel project that configures and interacts with ActiveMQ.) 185: remote -> org.apache.camel.archetypes:camel-archetype-blueprint (Creates a new Camel project with OSGi blueprint support. Ready to be deployed in OSGi.) 186: remote -> org.apache.camel.archetypes:camel-archetype-component (Creates a new Camel component.) 187: remote -> org.apache.camel.archetypes:camel-archetype-component-scala (Creates a new Camel component with Scala.) 188: remote -> org.apache.camel.archetypes:camel-archetype-dataformat (Creates a new Camel data format.)

49

189: remote -> org.apache.camel.archetypes:camel-archetype-java (Creates a new Camel project using Java DSL.) 190: remote -> org.apache.camel.archetypes:camel-archetype-scala (Creates a new Camel project using Scala DSL.) 191: remote -> org.apache.camel.archetypes:camel-archetype-spring (Creates a new Camel project with added Spring DSL support.) 192: remote -> org.apache.camel.archetypes:camel-archetype-spring-dm (Creates a new Camel project with added Spring DSL support. Ready to be deployed in OSGi.) 193: remote -> org.apache.camel.archetypes:camel-archetype-war (-) 194: remote -> org.apache.camel.archetypes:camel-archetype-web (Creates a new Camel web project that deploys the Camel routes as a WAR) 195: remote -> org.apache.camel.archetypes:camel-archetype-webconsole (Creates a new Camel project that deploys the Camel Web Console, REST API, and your routes as a WAR) 196: remote -> org.apache.clerezza:internal.archetype (Generic archetype for clerezza projects) 197: remote -> org.apache.cocoon:cocoon-22-archetype-block (-) 198: remote -> org.apache.cocoon:cocoon-22-archetype-block-plain (-) 199: remote -> org.apache.cocoon:cocoon-22-archetype-webapp (-) 200: remote -> org.apache.cocoon.archetype-block:cocoon-archetype-block (-) 201: remote -> org.apache.cocoon.archetype-parent:cocoon-archetype-parent (-) 202: remote -> org.apache.cocoon.archetype-sample:cocoon-archetype-sample (-) 203: remote -> org.apache.cocoon.archetype-webapp:cocoon-archetype-webapp (-) 204: remote -> org.apache.crunch:crunch-archetype (Create a basic, self-contained job for Apache Crunch.) 205: remote -> org.apache.cxf:cxf-http-basic (-) 206: remote -> org.apache.cxf.archetype:cxf-jaxrs-service (Simple CXF JAX-RS webapp service using Spring configuration) 207: remote -> org.apache.cxf.archetype:cxf-jaxws-javafirst (Creates a project for developing a starting from Java code) 208: remote -> org.apache.directmemory.server:server-example-archetype (-) 209: remote -> org.apache.directory.server:apacheds-schema-archetype (-) 210: remote -> org.apache.directory.server:apacheds-testcase-archetype (-) 211: remote -> org.apache.felix:maven-ipojo-plugin (Maven Plugin to package iPOJO-powered bundles.) 212: remote -> org.apache.geronimo.buildsupport:geronimo-archetype-testsuite (Plugin to help create a testsuite) 213: remote -> org.apache.geronimo.buildsupport:geronimo-assembly-archetype (-) 214: remote -> org.apache.geronimo.buildsupport:geronimo-plugin-archetype (-) 215: remote -> org.apache.geronimo.plugins:geronimo-archetype-testsuite (Plugin to help create a testsuite) 216: remote -> org.apache.geronimo.samples:geronimo-samples-archetype (Plugin to help create a samples project) 217: remote -> org.apache.isis:quickstart-archetype (-) 218: remote -> org.apache.karaf.archetypes:archetypes-command (-) 219: remote -> org.apache.karaf.archetypes:karaf-assembly-archetype (An archetype for creating a Karaf assembly.) 220: remote -> org.apache.karaf.archetypes:karaf-blueprint-archetype (An archetype for creating a simple blueprint bundle.) 221: remote -> org.apache.karaf.archetypes:karaf-bundle-archetype (A simple bundle archetype.) 222: remote -> org.apache.karaf.archetypes:karaf-command-archetype (A Karaf command archetype.) 223: remote -> org.apache.karaf.archetypes:karaf-feature-archetype (This archetype sets up an empty karaf features project.) 224: remote -> org.apache.karaf.archetypes:karaf-kar-archetype (This archetype creates a KAR file from a provided features XML.) 225: remote -> org.apache.maven.archetypes:maven-archetype-archetype (An archetype which contains a sample archetype.) 226: remote -> org.apache.maven.archetypes:maven-archetype-j2ee-simple (An archetype which contains a simplifed sample J2EE application.) 227: remote -> org.apache.maven.archetypes:maven-archetype-marmalade-mojo (-) 228: remote -> org.apache.maven.archetypes:maven-archetype-mojo (An archetype which contains a sample a sample Maven plugin.) 229: remote -> org.apache.maven.archetypes:maven-archetype-plugin (An archetype which contains a sample Maven plugin.) 230: remote -> org.apache.maven.archetypes:maven-archetype-plugin-site (An archetype which contains a sample Maven plugin site. This archetype can be layered upon an existing Maven plugin project.) 231: remote -> org.apache.maven.archetypes:maven-archetype-portlet (An archetype which contains a sample JSR- 268 Portlet.) 232: remote -> org.apache.maven.archetypes:maven-archetype-profiles (-) 233: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.) 234: remote -> org.apache.maven.archetypes:maven-archetype-site (An archetype which contains a sample Maven site which demonstrates some of the supported document types like APT, XDoc, and FML and demonstrates how to i18n your site. This archetype can be layered upon an existing Maven project.)

50

235: remote -> org.apache.maven.archetypes:maven-archetype-site-simple (An archetype which contains a sample Maven site.) 236: remote -> org.apache.maven.archetypes:maven-archetype-webapp (An archetype which contains a sample Maven Webapp project.) 237: remote -> org.apache.myfaces.buildtools:myfaces-archetype-codi-jsf12 (Archetype to create a new JSF 1.2 webapp based on MyFaces CODI) 238: remote -> org.apache.myfaces.buildtools:myfaces-archetype-codi-jsf20 (Archetype to create a new JSF 2.0 webapp based on MyFaces CODI) 239: remote -> org.apache.myfaces.buildtools:myfaces-archetype-core-integration-test (Archetype to create a new MyFaces core project used for integration tests via cargo and HtmlUnit. Projects created via this archetype aim to test specific issues from the MyFaces core JIRA issue tracker and can be directly added to the MyFaces core integration-tests module.) 240: remote -> org.apache.myfaces.buildtools:myfaces-archetype-helloworld (Archetype to create a new webapp based on myfaces) 241: remote -> org.apache.myfaces.buildtools:myfaces-archetype-helloworld-facelets (Archetype to create a new webapp based on MyFaces and Facelets) 242: remote -> org.apache.myfaces.buildtools:myfaces-archetype-helloworld-portlets (Archetype to create a new portlet webapp based on myfaces) 243: remote -> org.apache.myfaces.buildtools:myfaces-archetype-helloworld20 (Archetype to create a new webapp based on MyFaces 2.0) 244: remote -> org.apache.myfaces.buildtools:myfaces-archetype-helloworld20-debug (Archetype to create a new webapp based on MyFaces 2.0, specially for debug issues) 245: remote -> org.apache.myfaces.buildtools:myfaces-archetype-helloworld20-owb (Archetype to create a new webapp based on MyFaces 2.0 with OpenWebBeans) 246: remote -> org.apache.myfaces.buildtools:myfaces-archetype-jsfcomponents (Archetype to create a libary project of JSF components) 247: remote -> org.apache.myfaces.buildtools:myfaces-archetype-jsfcomponents20 (Archetype to create a libary project of JSF 2.0 components) 248: remote -> org.apache.myfaces.buildtools:myfaces-archetype-trinidad (Archetype to create a new webapp based on Trinidad) 249: remote -> org.apache.myfaces.buildtools:myfaces-archetype-trinidad20 (Archetype to create a new webapp based on Trinidad and JSF 2.0) 250: remote -> org.apache.myfaces.trinidadbuild:myfaces-archetype-trinidad (Archetype to ease the burden of creating a new application based with Trinidad) 251: remote -> org.apache.npanday:maven-archetype-dotnet-simple (-) 252: remote -> org.apache.npanday:maven-archetype-netexecutable (-) 253: remote -> org.apache.npanday:maven-archetype-vb-simple (-) 254: remote -> org.apache.portals.jetspeed-2:application-archetype (Jetspeed-2 Maven2 Archetype used to generate portal application templates.) 255: remote -> org.apache.portals.jetspeed-2:component-archetype (Jetspeed-2 Maven2 Archetype used to generate component templates to be used by other components and applications.) 256: remote -> org.apache.portals.jetspeed-2:jetspeed-archetype (Jetspeed 2 Maven Archetype) 257: remote -> org.apache.portals.jetspeed-2:portal-archetype (Jetspeed-2 Maven2 Archetype used to generate portal instances.) 258: remote -> org.apache.portals.jetspeed-2:portal-component-archetype (Jetspeed-2 Maven2 Archetype used to generate component templates to be injected/installed as a library in the portal application itself.) 259: remote -> org.apache.portals.jetspeed-2:shared-component-archetype (Jetspeed-2 Maven2 Archetype used to generate component templates to be installed as a shared library for all portlet/web applications.) 260: remote -> org.apache.servicemix.tooling:servicemix-bean-service-unit (-) 261: remote -> org.apache.servicemix.tooling:servicemix-binding-component (-) 262: remote -> org.apache.servicemix.tooling:servicemix-camel-osgi-bundle (-) 263: remote -> org.apache.servicemix.tooling:servicemix-camel-service-unit (-) 264: remote -> org.apache.servicemix.tooling:servicemix-cxf-bc-service-unit (-) 265: remote -> org.apache.servicemix.tooling:servicemix-cxf-code-first-osgi-bundle (-) 266: remote -> org.apache.servicemix.tooling:servicemix-cxf-se-service-unit (-) 267: remote -> org.apache.servicemix.tooling:servicemix-cxf-se-wsdl-first-service-unit (-) 268: remote -> org.apache.servicemix.tooling:servicemix-cxf-wsdl-first-osgi-bundle (-) 269: remote -> org.apache.servicemix.tooling:servicemix-drools-service-unit (-) 270: remote -> org.apache.servicemix.tooling:servicemix-eip-service-unit (-) 271: remote -> org.apache.servicemix.tooling:servicemix-embedded-simple (-) 272: remote -> org.apache.servicemix.tooling:servicemix-exec-service-unit (-) 273: remote -> org.apache.servicemix.tooling:servicemix-file-poller-service-unit (-) 274: remote -> org.apache.servicemix.tooling:servicemix-file-sender-service-unit (-) 275: remote -> org.apache.servicemix.tooling:servicemix-file-service-unit (-)

51

276: remote -> org.apache.servicemix.tooling:servicemix-ftp-poller-service-unit (-) 277: remote -> org.apache.servicemix.tooling:servicemix-ftp-sender-service-unit (-) 278: remote -> org.apache.servicemix.tooling:servicemix-ftp-service-unit (-) 279: remote -> org.apache.servicemix.tooling:servicemix-http-consumer-service-unit (-) 280: remote -> org.apache.servicemix.tooling:servicemix-http-provider-service-unit (-) 281: remote -> org.apache.servicemix.tooling:servicemix-http-service-unit (-) 282: remote -> org.apache.servicemix.tooling:servicemix-jms-consumer-service-unit (-) 283: remote -> org.apache.servicemix.tooling:servicemix-jms-provider-service-unit (-) 284: remote -> org.apache.servicemix.tooling:servicemix-jms-service-unit (-) 285: remote -> org.apache.servicemix.tooling:servicemix-jsr181-annotated-service-unit (-) 286: remote -> org.apache.servicemix.tooling:servicemix-jsr181-service-unit (-) 287: remote -> org.apache.servicemix.tooling:servicemix-jsr181-wsdl-first-service-unit (-) 288: remote -> org.apache.servicemix.tooling:servicemix-lwcontainer-service-unit (-) 289: remote -> org.apache.servicemix.tooling:servicemix-mail-service-unit (-) 290: remote -> org.apache.servicemix.tooling:servicemix-ode-service-unit (-) 291: remote -> org.apache.servicemix.tooling:servicemix-osgi-bundle (-) 292: remote -> org.apache.servicemix.tooling:servicemix-osworkflow-service-unit (-) 293: remote -> org.apache.servicemix.tooling:servicemix-project-root (-) 294: remote -> org.apache.servicemix.tooling:servicemix-quartz-service-unit (-) 295: remote -> org.apache.servicemix.tooling:servicemix-saxon-service-unit (-) 296: remote -> org.apache.servicemix.tooling:servicemix-saxon-xquery-service-unit (-) 297: remote -> org.apache.servicemix.tooling:servicemix-saxon-xslt-service-unit (-) 298: remote -> org.apache.servicemix.tooling:servicemix-script-service-unit (-) 299: remote -> org.apache.servicemix.tooling:servicemix-scripting-service-unit (-) 300: remote -> org.apache.servicemix.tooling:servicemix-service-assembly (-) 301: remote -> org.apache.servicemix.tooling:servicemix-service-engine (-) 302: remote -> org.apache.servicemix.tooling:servicemix-service-unit (-) 303: remote -> org.apache.servicemix.tooling:servicemix-shared-library (-) 304: remote -> org.apache.servicemix.tooling:servicemix-smpp-service-unit (-) 305: remote -> org.apache.servicemix.tooling:servicemix-snmp-service-unit (-) 306: remote -> org.apache.servicemix.tooling:servicemix-validation-service-unit (-) 307: remote -> org.apache.servicemix.tooling:servicemix-vfs-service-unit (-) 308: remote -> org.apache.servicemix.tooling:servicemix-xmpp-service-unit (-) 309: remote -> org.apache.sling:sling-bundle-archetype (-) 310: remote -> org.apache.sling:sling-initial-content-archetype (Maven archetype for initial content) 311: remote -> org.apache.sling:sling-jcrinstall-bundle-archetype (-) 312: remote -> org.apache.sling:sling-launchpad-standalone-archetype (-) 313: remote -> org.apache.sling:sling-launchpad-webapp-archetype (-) 314: remote -> org.apache.sling:sling-servlet-archetype (Maven archetype for Sling Servlets) 315: remote -> org.apache.struts:struts2-archetype-blank (-) 316: remote -> org.apache.struts:struts2-archetype-convention (-) 317: remote -> org.apache.struts:struts2-archetype-dbportlet (-) 318: remote -> org.apache.struts:struts2-archetype-plugin (-) 319: remote -> org.apache.struts:struts2-archetype-portlet (-) 320: remote -> org.apache.struts:struts2-archetype-starter (-) 321: remote -> org.apache.synapse:synapse-package-archetype (This archetype can be used to create Maven projects that bundle a mediation into a standalone distribution ready to be executed) 322: remote -> org.apache.syncope:syncope-archetype (Apache Syncope Archetype) 323: remote -> org.apache.tapestry:quickstart (-) 324: remote -> org.apache.tapestry:tapestry-archetype (-) 325: remote -> org.apache.tapestry:tapestry-simple (Archetype for creating a basic Tapestry 5 application, including control files.) 326: remote -> org.apache.tomcat.maven:tomcat-maven-archetype (-) 327: remote -> org.apache.turbine:turbine-webapp-2.3.3 (This archetype sets up a web application project based on Apache Turbine 2.3.3) 328: remote -> org.apache.turbine:turbine-webapp-4.0 (This archetype sets up a web application project based on Apache Turbine 4.0M1) 329: remote -> org.apache.tuscany.sca:tuscany-binding-archetype (Create a Tuscany binding extension project) 330: remote -> org.apache.tuscany.sca:tuscany-contribution-jar (Create an SCA JAR contribution project) 331: remote -> org.apache.tuscany.sca:tuscany-contribution-zip (Create an SCA ZIP contribution project) 332: remote -> org.apache.tuscany.sca:tuscany-policy-archetype (Create a Tuscany policy extension project) 333: remote -> org.apache.tuscany.sca:tuscany-quickstart (Create a simple SCA webapp project) 334: remote -> org.apache.tuscany.sca:tuscany-quickstart-bpel (Create an SCA Webapp project using BPEL) 335: remote -> org.apache.tuscany.sca:tuscany-quickstart-jsf (Create a Tuscany SCA and JSF project) 336: remote -> org.apache.tuscany.sca:tuscany-quickstart-jsonp (-)

52

337: remote -> org.apache.tuscany.sca:tuscany-quickstart- (Create a simple Apache Tuscany SCA webapp project using the Stripes Web Framework) 338: remote -> org.apache.wicket:wicket-archetype-quickstart (-) 339: remote -> org.aperteworkflow:custom-widget-archetype (Aperte Workflow is a compilation of well-known, stable and mature frameworks into a complete BPM solution developed by BlueSoft sp. z o.o. - Polish independent software vendor. Project home page is available at http://www.aperteworkflow.org/) 340: remote -> org.appfuse:appfuse-basic-jsf (Maven 2 archetype that creates a web application with AppFuse embedded in it.) 341: remote -> org.appfuse:appfuse-basic-spring (Maven 2 archetype that creates a web application with AppFuse embedded in it.) 342: remote -> org.appfuse:appfuse-basic-struts (Maven 2 archetype that creates a web application with AppFuse embedded in it.) 343: remote -> org.appfuse:appfuse-basic-tapestry (Maven 2 archetype that creates a web application with AppFuse embedded in it.) 344: remote -> org.appfuse:appfuse-core (Maven 2 archetype that creates a backend (Managers, DAOs and Web Services) application with AppFuse embedded in it.) 345: remote -> org.appfuse:appfuse-modular-jsf (Maven 2 archetype that creates a modular web application with AppFuse. This archetype creates two modules: "core" and "web". The core module depends on appfuse-service, while the web module depends on core as well as AppFuse's JSF implementation.) 346: remote -> org.appfuse:appfuse-modular-spring (Maven 2 archetype that creates a modular web application with AppFuse. This archetype creates two modules: "core" and "web". The core module depends on appfuse-service, while the web module depends on core as well as AppFuse's Spring MVC implementation.) 347: remote -> org.appfuse:appfuse-modular-struts (Maven 2 archetype that creates a modular web application with AppFuse. This archetype creates two modules: "core" and "web". The core module depends on appfuse-service, while the web module depends on core as well as AppFuse's Struts implementation.) 348: remote -> org.appfuse:appfuse-modular-tapestry (Maven 2 archetype that creates a modular web application with AppFuse. This archetype creates two modules: "core" and "web". The core module depends on appfuse-service, while the web module depends on core as well as AppFuse's Tapestry implementation.) 349: remote -> org.appfuse.archetypes:appfuse-basic-jsf (Maven 2 archetype that creates a web application with AppFuse embedded in it.) 350: remote -> org.appfuse.archetypes:appfuse-basic-jsf-archetype (-) 351: remote -> org.appfuse.archetypes:appfuse-basic-spring (Maven 2 archetype that creates a web application with AppFuse embedded in it.) 352: remote -> org.appfuse.archetypes:appfuse-basic-spring-archetype (-) 353: remote -> org.appfuse.archetypes:appfuse-basic-struts (Maven 2 archetype that creates a web application with AppFuse embedded in it.) 354: remote -> org.appfuse.archetypes:appfuse-basic-struts-archetype (-) 355: remote -> org.appfuse.archetypes:appfuse-basic-tapestry (Maven 2 archetype that creates a web application with AppFuse embedded in it.) 356: remote -> org.appfuse.archetypes:appfuse-basic-tapestry-archetype (-) 357: remote -> org.appfuse.archetypes:appfuse-core (Maven 2 archetype that creates a backend (Managers, DAOs and Web Services) application with AppFuse embedded in it.) 358: remote -> org.appfuse.archetypes:appfuse-core-archetype (-) 359: remote -> org.appfuse.archetypes:appfuse-light-jsf-archetype (-) 360: remote -> org.appfuse.archetypes:appfuse-light-spring-archetype (-) 361: remote -> org.appfuse.archetypes:appfuse-light-spring-freemarker-archetype (-) 362: remote -> org.appfuse.archetypes:appfuse-light-spring-security-archetype (-) 363: remote -> org.appfuse.archetypes:appfuse-light-stripes-archetype (-) 364: remote -> org.appfuse.archetypes:appfuse-light-struts-archetype (-) 365: remote -> org.appfuse.archetypes:appfuse-light-tapestry-archetype (-) 366: remote -> org.appfuse.archetypes:appfuse-light-wicket-archetype (-) 367: remote -> org.appfuse.archetypes:appfuse-modular-jsf (Maven 2 archetype that creates a modular web application with AppFuse. This archetype creates two modules: "core" and "web". The core module depends on appfuse-service, while the web module depends on core as well as AppFuse's JSF implementation.) 368: remote -> org.appfuse.archetypes:appfuse-modular-jsf-archetype (-) 369: remote -> org.appfuse.archetypes:appfuse-modular-spring (Maven 2 archetype that creates a modular web application with AppFuse. This archetype creates two modules: "core" and "web". The core module depends on appfuse-service, while the web module depends on core as well as AppFuse's Spring MVC implementation.)

53

370: remote -> org.appfuse.archetypes:appfuse-modular-spring-archetype (-) 371: remote -> org.appfuse.archetypes:appfuse-modular-struts (Maven 2 archetype that creates a modular web application with AppFuse. This archetype creates two modules: "core" and "web". The core module depends on appfuse-service, while the web module depends on core as well as AppFuse's Struts implementation.) 372: remote -> org.appfuse.archetypes:appfuse-modular-struts-archetype (-) 373: remote -> org.appfuse.archetypes:appfuse-modular-tapestry (Maven 2 archetype that creates a modular web application with AppFuse. This archetype creates two modules: "core" and "web". The core module depends on appfuse-service, while the web module depends on core as well as AppFuse's Tapestry implementation.) 374: remote -> org.appfuse.archetypes:appfuse-modular-tapestry-archetype (-) 375: remote -> org.appfuse.archetypes:appfuse-ws-archetype (-) 376: remote -> org.blueoxygen.cimande:cimande-archetype (-) 377: remote -> org.blueoxygen.cimande:cimande-archetype-blank (-) 378: remote -> org.boretti.drools.integration:drools4-integration-helper-archetype (Support of the archetype for the Maven plugin) 379: remote -> org.boretti.drools.integration:drools5-integration-helper-archetype (This is an Maven 2 Archetype to support creation of a ready to use Maven 2 project with Drools support. This archetype contains examples of code based on interface, classes and pre/post condition. JUnit 4 examples are also included.) 380: remote -> org.brillien:brillien-archetype (-) 381: remote -> org.broadleafcommerce:ecommerce-archetype (BroadleafCommerce ECommerce Archetype) 382: remote -> org.codehaus.cargo:cargo-archetype-remote-deployment (Sample Maven archetype showing how to configure Cargo and Maven to generate a webapp and deploy it to a remote container.) 383: remote -> org.codehaus.cargo:cargo-archetype-webapp-functional-tests-module (Sample Maven archetype showing how to configure Cargo and Maven to run functional tests for a webapp by creating a separate functional-tests module.) 384: remote -> org.codehaus.cargo:cargo-archetype-webapp-single-module (Sample Maven archetype showing how to configure Cargo and Maven to run functional tests directly from a single webapp module.) 385: remote -> org.codehaus.cargo:cargo-archetype-webapp-with-datasource (Sample Maven archetype showing how to configure Cargo and Maven to run functional tests directly from a webapp with datasource. Cargo will be used to configure the datasource on the container.) 386: remote -> org.codehaus.castor:castor-archetype-codegen-testcase (-) 387: remote -> org.codehaus.castor:codegen-testcase (-) 388: remote -> org.codehaus.castor:cpa-testcase (-) 389: remote -> org.codehaus.enunciate.archetypes:enunciate-simple-archetype (-) 390: remote -> org.codehaus.gmaven.archetypes:gmaven-archetype-basic (-) 391: remote -> org.codehaus.gmaven.archetypes:gmaven-archetype-mojo (-) 392: remote -> org.codehaus.groovy.maven.archetypes:gmaven-archetype-basic (-) 393: remote -> org.codehaus.groovy.maven.archetypes:gmaven-archetype-mojo (-) 394: remote -> org.codehaus.mevenide.plugins:maven-archetype-nbm (Archetype for Netbeans Modules Maven setup) 395: remote -> org.codehaus.mojo:gwt-maven-plugin (Maven plugin for the .) 396: remote -> org.codehaus.mojo:javascript-ria-archetype (A JavaScript Rich Internet Application template using jQuery and jQuery UI.) 397: remote -> org.codehaus.mojo:latex-maven-archetype (-) 398: remote -> org.codehaus.mojo:xmlbeans-maven-plugin (Runs the xmlbeans parser/code generator against schemas in files and dependent jars.) 399: remote -> org.codehaus.mojo.archetypes:appclient-javaee6 (-) 400: remote -> org.codehaus.mojo.archetypes:appclient-jee5 (-) 401: remote -> org.codehaus.mojo.archetypes:appframework (Archetype for creating application based on JSR 296) 402: remote -> org.codehaus.mojo.archetypes:ear-j2ee14 (-) 403: remote -> org.codehaus.mojo.archetypes:ear-javaee6 (-) 404: remote -> org.codehaus.mojo.archetypes:ear-jee5 (-) 405: remote -> org.codehaus.mojo.archetypes:ejb-j2ee13 (-) 406: remote -> org.codehaus.mojo.archetypes:ejb-j2ee14 (-) 407: remote -> org.codehaus.mojo.archetypes:ejb-javaee6 (-) 408: remote -> org.codehaus.mojo.archetypes:ejb-jee5 (-) 409: remote -> org.codehaus.mojo.archetypes:nbm-archetype (Archetype for development of NetBeans modules in Maven.) 410: remote -> org.codehaus.mojo.archetypes:nbm-osgi-archetype (Archetype for development of NetBeans modules that can depend on OSGi bundles.)

54

411: remote -> org.codehaus.mojo.archetypes:nbm-suite-root (Root project archetype for creating multi module projects developing NetBeans IDE modules. Approximately similar in functionality to module suites in NetBeans Ant projects.) 412: remote -> org.codehaus.mojo.archetypes:netbeans-platform-app-archetype (Archetype for sample application based on NetBeans Platform. Creates parent POM with branding and empty NBM project.) 413: remote -> org.codehaus.mojo.archetypes:osgi-archetype (Archetype for development of OSGi bundles using Maven plugin) 414: remote -> org.codehaus.mojo.archetypes:pom-root (Root project archetype for creating multi module projects) 415: remote -> org.codehaus.mojo.archetypes:webapp-j2ee13 (-) 416: remote -> org.codehaus.mojo.archetypes:webapp-j2ee14 (-) 417: remote -> org.codehaus.mojo.archetypes:webapp-javaee6 (-) 418: remote -> org.codehaus.mojo.archetypes:webapp-jee5 (-) 419: remote -> org.codehaus.mojo.groovy:groovy-maven-archetype (An archetype for creating Maven modules/projects using the Groovy language.) 420: remote -> org.codehaus.mojo.groovy:groovy-mojo-archetype (An archetype for writing Maven 2 plugins in the Groovy language.) 421: remote -> org.codehaus.openxma:org.openxma.dsl.sample-archetype (-) 422: remote -> org.codehaus.sonar.archetypes:sonar-basic-plugin-archetype (Maven archetype to create a basic Sonar plugin) 423: remote -> org.codehaus.sonar.archetypes:sonar-gwt-plugin-archetype (Maven archetype to create a Sonar plugin including GWT pages) 424: remote -> org.cometd.archetypes:cometd-archetype-dojo-jetty6 (-) 425: remote -> org.cometd.archetypes:cometd-archetype-dojo-jetty7 (-) 426: remote -> org.cometd.archetypes:cometd-archetype-dojo-jetty8 (-) 427: remote -> org.cometd.archetypes:cometd-archetype-jquery-jetty6 (-) 428: remote -> org.cometd.archetypes:cometd-archetype-jquery-jetty7 (-) 429: remote -> org.cometd.archetypes:cometd-archetype-jquery-jetty8 (-) 430: remote -> org.cometd.archetypes:cometd-archetype-spring-dojo-jetty7 (-) 431: remote -> org.cometd.archetypes:cometd-archetype-spring-jquery-jetty7 (-) 432: remote -> org.conventionsframework:conventions-archetype (-) 433: remote -> org.coosproject.maven.archetypes:coos-plugin-actor (-) 434: remote -> org.coosproject.maven.archetypes:coos-plugin-api (-) 435: remote -> org.coosproject.maven.archetypes:coos-plugin-noapi (-) 436: remote -> org.debux.webmotion:webmotion-archetype (WebMotion is Java web framework based on the Java EE6 standard) 437: remote -> org.devnull:devnull-web-archetype (DevNull starter webaapp with Spring MVC, JPA, Groovy and Twitter Bootstrap) 438: remote -> org.dishevelled:dsh-archetype (dishevelled.org maven project archetype.) 439: remote -> org.drombler.fx:drombler-fx-maven-archetype-application (-) 440: remote -> org.duelengine:duel-mvc-archetype (MVC project archetype using Jersey, Guice, DUEL views, DUEL merge) 441: remote -> org.duelengine:war-bootstrap-archetype (Simple WAR bootstrap for quick & dirty testing in multiple servlet containers (Tomcat, Jetty, Glassfish).) 442: remote -> org.eclipse.hudson.tools:maven-hpi-plugin (Support for developing Hudson plugins with Apache Maven.) 443: remote -> org.eiichiro.gig:gig-archetype-appengine (An archetype which contains a simple Gig Webapp project for .) 444: remote -> org.eiichiro.gig:gig-archetype-heroku (An archetype which contains a simple Gig Webapp project for Heroku.) 445: remote -> org.eiichiro.gig:gig-archetype-webapp (An archetype which contains a simple Gig Webapp project.) 446: remote -> org.entando.entando:entando-archetype-plugin-generic (Generic Plugin Archetype for Entando: an agile, modern and user-centric open source Portal platform.) 447: remote -> org.entando.entando:entando-archetype-portal-generic (Generic Portal Archetype for Entando: an agile, modern and user-centric open source Portal platform.) 448: remote -> org.fluttercode.knappsack:jee6-basic-archetype (-) 449: remote -> org.fluttercode.knappsack:jee6-minimal-archetype (-) 450: remote -> org.fluttercode.knappsack:jee6-sandbox-archetype (-) 451: remote -> org.fluttercode.knappsack:jee6-sandbox-demo-archetype (-) 452: remote -> org.fluttercode.knappsack:jee6-servlet-basic-archetype (-) 453: remote -> org.fluttercode.knappsack:jee6-servlet-demo-archetype (-) 454: remote -> org.fluttercode.knappsack:jee6-servlet-minimal-archetype (-) 455: remote -> org.fluttercode.knappsack:jee6-servlet-sandbox-archetype (-) 456: remote -> org.fluttercode.knappsack:spring-jsf-jpa-archetype (-) 457: remote -> org.fluttercode.knappsack:spring-mvc-jpa-archetype (-) 458: remote -> org.fluttercode.knappsack:spring-mvc-jpa-demo-archetype (-) 459: remote -> org.fusesource.scalate.tooling:scalate-archetype-empty (An archetype which creates an empty Scalate web application)

55

460: remote -> org.fusesource.scalate.tooling:scalate-archetype-guice (An archetype which creates an empty Scalate Guice web application) 461: remote -> org.fusesource.scalate.tooling:scalate-archetype-jersey (An archetype which creates an empty Scalate web application) 462: remote -> org.fusesource.scalate.tooling:scalate-archetype-sitegen (An archetype which creates an empty Scalate static website generation project) 463: remote -> org.geomajas:geomajas-gwt-archetype (Geomajas GWT application archetype) 464: remote -> org.geomajas:geomajas-plugin-archetype (-) 465: remote -> org.geoserver.maven:geoserver-archetype-wfsoutputformat (-) 466: remote -> org..jersey.archetypes:jersey-quickstart-grizzly2 (An archetype which contains a quick start Jersey project based on Grizzly container.) 467: remote -> org.glassfish.jersey.archetypes:jersey-quickstart-webapp (An archetype which contains a quick start Jersey-based web application project.) 468: remote -> org.:grails-maven-archetype (Maven archetype for Grails projects.) 469: remote -> org.graniteds.archetypes:graniteds-flex-spring-jpa-hibernate (Base project with Flex 4.6, Spring 3 and Hibernate using GraniteDS with RemoteObject API.) 470: remote -> org.graniteds.archetypes:graniteds-spring-jpa-hibernate (Base project with Flex 4.5, Spring 3 and Hibernate using GraniteDS with RemoteObject API.) 471: remote -> org.graniteds.archetypes:graniteds-tide-cdi-jpa (Base project with Flex 4.5 and CDI using GraniteDS with the Tide API.) 472: remote -> org.graniteds.archetypes:graniteds-tide-flex-cdi-jpa (Base project with Flex 4.6, CDI and JPA using GraniteDS with Tide API.) 473: remote -> org.graniteds.archetypes:graniteds-tide-flex-seam-jpa-hibernate (Base project with Flex 4.6, JBoss Seam 2.2 and Hibernate using GraniteDS with the Tide API.) 474: remote -> org.graniteds.archetypes:graniteds-tide-flex-spring-jpa-hibernate (Base project with Flex 4.6, Spring 3.1 and Hibernate 3.6 using GraniteDS with the Tide API.) 475: remote -> org.graniteds.archetypes:graniteds-tide-javafx-spring-jpa-hibernate (Base project with JavaFX 2.2, Spring 3.1 and Hibernate 3.6 using GraniteDS with the Tide API.) 476: remote -> org.graniteds.archetypes:graniteds-tide-seam-jpa-hibernate (Base project with Flex 4.5, JBoss Seam 2.2 and Hibernate using GraniteDS with the Tide API.) 477: remote -> org.graniteds.archetypes:graniteds-tide-spring-jpa-hibernate (Base project with Flex 4.5, Spring 3 and Hibernate using GraniteDS with the Tide API.) 478: remote -> org.grouplens.lenskit:lenskit-archetype-simple-analysis (-) 479: remote -> org.hibernate:hibernate-search-quickstart (-) 480: remote -> org.hibernate:hibernate-validator-quickstart-archetype (Aggregator of the Hibernate Validator modules.) 481: remote -> org.imixs.application:imixs-workflow-jee-archetype (Imixs Workflow JEE Archetype provides a JEE Sample Application) 482: remote -> org.jasig.portlet.archetype:jsr286-archetype (-) 483: remote -> org.jbehave:jbehave-groovy-archetype (An archetype to run multiple textual stories with steps classes written in Groovy.) 484: remote -> org.jbehave:jbehave-guice-archetype (An archetype to run multiple textual stories configured programmatically but with steps classes composed using Guice.) 485: remote -> org.jbehave:jbehave-pico-archetype (An archetype to run multiple textual stories configured programmatically but with steps classes composed using Pico.) 486: remote -> org.jbehave:jbehave-simple-archetype (An archetype to run multiple textual stories configured programmatically.) 487: remote -> org.jbehave:jbehave-spring-archetype (An archetype to run multiple textual stories configured programmatically but with steps classes composed using Spring.) 488: remote -> org.jbehave.web:jbehave-web-selenium-flash-archetype (An archetype to run web Flash stories using Selenium.) 489: remote -> org.jbehave.web:jbehave-web-selenium-groovy-pico-archetype (An archetype to run web stories using Selenium, Groovy and Pico.) 490: remote -> org.jbehave.web:jbehave-web-selenium-java-spring-archetype (An archetype to run web stories using Selenium, Java and Spring.) 491: remote -> org.jboss.aerogear.archetypes:jboss-html5-mobile-archetype (An archetype that generates a Java EE 6 application using HTML5, and JAX-RS to support both desktop and mobile web browsers) 492: remote -> org.jboss.aerogear.archetypes:jboss-html5-mobile-blank-archetype (An archetype that generates a Java EE 6 application using HTML5, and JAX-RS to support both desktop and mobile web browsers) 493: remote -> org.jboss.as.archetypes:jboss-as-subsystem (An archetype that generates a skeleton project for implementing a JBoss AS 7 subsystem) 494: remote -> org.jboss.errai.archetypes:bus-quickstart (-) 495: remote -> org.jboss.errai.archetypes:cdi-quickstart (-) 496: remote -> org.jboss.errai.archetypes:jaxrs-quickstart (-) 497: remote -> org.jboss.errai.archetypes:jboss-errai-kitchensink-archetype (A starter Errai + Java EE 6 webapp project for use on JBoss AS 7 / EAP 6, generated from the jboss-errai-kitchensink-archetype archetype)

56

498: remote -> org.jboss.errai.archetypes:kitchensink-quickstart (A starter Errai + Java EE 6 webapp project for use on JBoss AS 7 / EAP 6, generated from the kitchensink-quickstart archetype) 499: remote -> org.jboss.portletbridge.archetypes:1.2-basic (-) 500: remote -> org.jboss.portletbridge.archetypes:2.0-basic (-) 501: remote -> org.jboss.portletbridge.archetypes:2.0-basic-archetype (-) 502: remote -> org.jboss.portletbridge.archetypes:jsf2-basic-archetype (-) 503: remote -> org.jboss.portletbridge.archetypes:richfaces-basic (-) 504: remote -> org.jboss.portletbridge.archetypes:richfaces-simpleapp-archetype (-) 505: remote -> org.jboss.portletbridge.archetypes:seam-basic (-) 506: remote -> org.jboss.spec.archetypes:jboss-html5-mobile-archetype (An archetype that generates a Java EE 6 application using HTML5, and JAX-RS to support both desktop and mobile web browsers) 507: remote -> org.jboss.spec.archetypes:jboss-javaee6-ear-webapp (An archetype that generates a starter Java EE 6 webapp project for JBoss AS 7. The project is an EAR, with an EJB-JAR and WAR) 508: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp (An archetype that generates a starter Java EE 6 webapp project for JBoss AS 7) 509: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-archetype (An archetype that generates a starter Java EE 6 webapp project for JBoss AS 7.1 (by default) or EAP 6 (if the "enterprise" property is true)) 510: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-archetype-blank (An archetype that generates a starter Java EE 6 webapp project for JBoss AS 7 (by default) or EAP 6 (if the "enterprise" property is true)) 511: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-blank-archetype (An archetype that generates a starter Java EE 6 webapp project for JBoss AS 7.1 (by default) or EAP 6 (if the "enterprise" property is true)) 512: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-ear-archetype (An archetype that generates a starter Java EE 6 webapp project for JBoss AS 7.1 (by default) or EAP 6 (if the "enterprise" property is true). The project is an EAR, with an EJB-JAR and WAR) 513: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-ear-archetype-blank (An archetype that generates a starter Java EE 6 webapp project for JBoss AS 7 (by default) or EAP 6 (if the "enterprise" property is true). The project is an EAR, with an EJB-JAR and WAR) 514: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-ear-blank-archetype (An archetype that generates a starter Java EE 6 webapp project for JBoss AS 7.1 (by default) or EAP 6 (if the "enterprise" property is true). The project is an EAR, with an EJB-JAR and WAR) 515: remote -> org.jboss.spring.archetypes:spring-mvc-webapp (An archetype that generates a starter Spring MVC application with Java EE persistence settings (server bootstrapped JPA, JTA transaction management) for JBoss AS7) 516: remote -> org.jboss.weld.archetypes:jboss-javaee6-webapp (-) 517: remote -> org.jboss.weld.archetypes:jboss-jsf-weld-servlet-webapp (-) 518: remote -> org.jboss.weld.archetypes:weld-jsf-jee (Weld archetype for creating a Java EE 6 application using JSF 2.0, CDI 1.0, EJB 3.1 and JPA 2.0 (persistence unit included)) 519: remote -> org.jboss.weld.archetypes:weld-jsf-jee-minimal (Weld archetype for creating a minimal Java EE 6 application using JSF 2.0, CDI 1.0 and EJB 3.1 (persistence unit not included)) 520: remote -> org.jboss.weld.archetypes:weld-jsf-servlet-minimal (Weld archetype for creating an application using JSF 2.0 and CDI 1.0 for Servlet Containers (Tomcat 6 / Jetty 6)) 521: remote -> org.jbundle.config:org.jbundle.config.archetype (-) 522: remote -> org.jbundle.util.webapp:jbundle-util-webapp-cgi-archetype (-) 523: remote -> org.jbundle.util.webapp:jbundle-util-webapp-files-archetype (-) 524: remote -> org.jbundle.util.webapp:jbundle-util-webapp-proxy-archetype (-) 525: remote -> org.jbundle.util.webapp:jbundle-util-webapp-redirect-archetype (-) 526: remote -> org.jbundle.util.webapp:jbundle-util-webapp-upload-archetype (-) 527: remote -> org.jbundle.util.webapp:jbundle-util-webapp-webdav-archetype (-) 528: remote -> org.jbundle.util.webapp:jbundle-util-webapp-website-archetype (-) 529: remote -> org.jbundle.util.webapp:jbundle-util-webapp-webstart-archetype (-) 530: remote -> org.jbundle.util.webapp:jbundle-util-webapp-webstart-reactor-archetype (-) 531: remote -> org.jbundle.util.webapp:org.jbundle.util.webapp.cgi-archetype (-) 532: remote -> org.jbundle.util.webapp:org.jbundle.util.webapp.files-archetype (-) 533: remote -> org.jbundle.util.webapp:org.jbundle.util.webapp.proxy-archetype (-) 534: remote -> org.jbundle.util.webapp:org.jbundle.util.webapp.redirect-archetype (-) 535: remote -> org.jbundle.util.webapp:org.jbundle.util.webapp.upload-archetype (-) 536: remote -> org.jbundle.util.webapp:org.jbundle.util.webapp.webdav-archetype (-) 537: remote -> org.jbundle.util.webapp:org.jbundle.util.webapp.website-archetype (-) 538: remote -> org.jclouds:jclouds-compute-service-archetype (Maven archetype for a provider of a Compute service) 539: remote -> org.jclouds:jclouds-rest-client-archetype (Maven archetype for a provider of a rest-speaking service) 540: remote -> org.jibx.ota.osgi:jibx-ota-osgi-archetype (-) 541: remote -> org.jibx.schema.config:opentravel-ws-archetype (-) 542: remote -> org.jibx.schema.org.opentravel._2010B:opentravel-archetype (-) 543: remote -> org.jibx.schema.org.opentravel._2011A:opentravel-archetype (-) 544: remote -> org.jibx.schema.org.opentravel._2011B:opentravel-archetype (-) 545: remote -> org.jibx.schema.org.opentravel._2011B.ws:opentravel-touractivity-ws-archetype (-) 546: remote -> org.jibx.schema.org.opentravel._2011B.ws:opentravel-touractivity-ws-service-archetype (-) 547: remote -> org.jibx.schema.org.opentravel._2012A:opentravel-archetype (-)

57

548: remote -> org.jibx.schema.org.opentravel._2012A.ws:opentravel-touractivity-ws-service-archetype (-) 549: remote -> org..maven-jini-plugin:jini-service-archetype (Archetype for Jini service project creation) 550: remote -> org.juzu:juzu-archetype (-) 551: remote -> org.jvnet.hudson.tools:maven-hpi-plugin (Support for developing Hudson plugins with Apache Maven.) 552: remote -> org.kuali.rice:rice-archetype-quickstart (This is a archetype which creates a Kuali Rice based application. It uses a basic project structure demonstrating war overlays, service implementation, unit and integration testing. It is configured in a bundled integration model with Kuali Rice.) 553: remote -> org.kualigan.maven.archetypes:kc-archetype (-) 554: remote -> org.kualigan.maven.archetypes:kfs-archetype (-) 555: remote -> org.kualigan.maven.archetypes:kfs3-archetype (-) 556: remote -> org.kualigan.maven.archetypes:kfs4-archetype (-) 557: remote -> org.kualigan.maven.archetypes:kr-archetype (-) 558: remote -> org.kualigan.maven.archetypes:lb-copy-archetype (Archetype used when copying databases. Creates a database project for the lb-maven-project to use in copying/exporting a database) 559: remote -> org.makumba:makumba-archetype (Archetype for a makumba web-application) 560: remote -> org.meruvian.midas:midas-archetype-blank (Generates blank Midas project template) 561: remote -> org.meruvian.yama:yama-jaxrs-archetype (-) 562: remote -> org.meruvian.yama:yama-struts-archetype (-) 563: remote -> org.mobicents.servlet.sip.archetypes:maven-archetype-sipapp (Archetype providing a default layout to start building SIP Servlets Applications.) 564: remote -> org.mortbay.jetty.archetype:jetty-archetype-assembler (-) 565: remote -> org.mortbay.jetty.archetype:jetty-archetype-fileserver (-) 566: remote -> org.mule.ibeans:ibean-archetype (An archetype for creating an empty ibean maven project) 567: remote -> org.mule.tools:ibean-archetype (-) 568: remote -> org.mule.tools:mule-catalog-archetype (-) 569: remote -> org.mule.tools:mule-cloud-connector-archetype (-) 570: remote -> org.mule.tools:mule-example-archetype (An archetype for creating a Mule example application.) 571: remote -> org.mule.tools:mule-module-archetype (An architype for creating a Mule Module. It provides options for adding certain mule features and configuring the module for Muleforge.) 572: remote -> org.mule.tools:mule-project-archetype (An architype for creating Mule applications.) 573: remote -> org.mule.tools:mule-transport-archetype (Archetype for Mule 2.0 and above transport projects.) 574: remote -> org.multiverse:multiverse-project-archetype (Skeleton for a project using Multiverse) 575: remote -> org.nakedobjects:application-archetype (-) 576: remote -> org.nakedobjects:remoting-support (-) 577: remote -> org.nakedobjects.archetypes:application (-) 578: remote -> org.nakedobjects.plugins:hibernate-support (-) 579: remote -> org.nakedobjects.plugins:html-war (-) 580: remote -> org.nakedobjects.plugins:htmlviewer-war (-) 581: remote -> org.nakedobjects.prototyping:application (-) 582: remote -> org.nakedobjects.prototyping:icons (-) 583: remote -> org.nakedosgi:bundle-archetype (-) 584: remote -> org.objectweb.fractal.cecilia:maven-archetype-cecilia-app (This archetype is useful to quick start Cecilia applications, having a source tree template already filled.) 585: remote -> org.objectweb.fractal.cecilia:maven-archetype-cecilia-application (This archetype is useful to quick start Cecilia applications, having a source tree template already filled.) 586: remote -> org.objectweb.fractal.cecilia:maven-archetype-cecilia-library (This archetype is useful to quick start Cecilia components library projects, having a source tree template already filled.) 587: remote -> org.objectweb.petals:maven-archetype-petals-jbi-binding-component (>This project is Maven 2 archetype associated to a JBI binding component project.) 588: remote -> org.objectweb.petals:maven-archetype-petals-jbi-service-assembly (This project is Maven 2 archetype associated to a JBI service assembly project.) 589: remote -> org.objectweb.petals:maven-archetype-petals-jbi-service-engine (This project is Maven 2 archetype associated to a JBI service engine project.) 590: remote -> org.objectweb.petals:maven-archetype-petals-jbi-service-unit (This project is Maven 2 archetype associated to a JBI service unit project.) 591: remote -> org.opencoweb:admin-archetype (-) 592: remote -> org.opencoweb:coweb-archetype (-) 593: remote -> org.openengsb.tooling.archetypes:openengsb-tooling-archetypes-connector (Archetype to produce new Connector project) 594: remote -> org.openengsb.tooling.archetypes:openengsb-tooling-archetypes-domain (Archetype to produce new Domain project) 595: remote -> org.openengsb.tooling.archetypes:org.openengsb.tooling.archetypes.connector (Archetype to produce new Connector project)

58

596: remote -> org.openengsb.tooling.archetypes:org.openengsb.tooling.archetypes.domain (Archetype to produce new Domain project) 597: remote -> org.openengsb.tooling.archetypes.clientproject:org.openengsb.tooling.archetypes.clientproject.root (Archetype to produce new client project) 598: remote -> org.openl.rules:openl-simple-project (-) 599: remote -> org.ops4j.pax.construct:maven-archetype-osgi-bundle (-) 600: remote -> org.ops4j.pax.construct:maven-archetype-osgi-project (-) 601: remote -> org.ops4j.pax.construct:maven-archetype-osgi-service (-) 602: remote -> org.ops4j.pax.construct:maven-archetype-osgi-wrapper (-) 603: remote -> org.ops4j.pax.construct:maven-archetype-spring-bean (-) 604: remote -> org.ops4j.pax.exam:maven-archetype-paxexam-junit () 605: remote -> org.ops4j.pax.web.archetypes:wab-archetype (-) 606: remote -> org.ops4j.pax.web.archetypes:wab-gwt-archetype (-) 607: remote -> org.ops4j.pax.web.archetypes:war-archetype (-) 608: remote -> org.ow2.jasmine.kerneos:kerneos-module-archetype (-) 609: remote -> org.ow2.jasmine.kerneos:kerneos-war-archetype (-) 610: remote -> org.ow2.jasmine.probe:jprobe-collector-archetype (-) 611: remote -> org.ow2.jasmine.probe:jprobe-outer-archetype (-) 612: remote -> org.ow2.jonas.camel:camel-archetype-simple-route (-) 613: remote -> org.ow2.kerneos:kerneos-application-archetype (-) 614: remote -> org.ow2.kerneos:kerneos-flex-archetypes-application (-) 615: remote -> org.ow2.kerneos:kerneos-flex-archetypes-module (-) 616: remote -> org.ow2.kerneos:kerneos-flex-archetypes-module-fragment (-) 617: remote -> org.ow2.kerneos:kerneos-module-archetype (-) 618: remote -> org.ow2.orchestra:orchestra-extension-archetype (Generates extensions for Orchestra) 619: remote -> org.ow2.petals:maven-archetype-petals-jbi-binding-component (This project is Maven 2 archetype associated to a JBI binding component project.) 620: remote -> org.ow2.petals:maven-archetype-petals-jbi-service-assembly (This project is Maven 2 archetype associated to a JBI service assembly project.) 621: remote -> org.ow2.petals:maven-archetype-petals-jbi-service-engine (This project is Maven 2 archetype associated to a JBI service engine project.) 622: remote -> org.ow2.petals:maven-archetype-petals-jbi-service-unit (This project is Maven 2 archetype associated to a JBI service unit project.) 623: remote -> org.ow2.petals:maven-archetype-petals-jbi-shared-library (This project is Maven 2 archetype associated to a JBI Shared Library project.) 624: remote -> org.ow2.shelbie:shelbie-command-archetype (-) 625: remote -> org.ow2.weblab.tools.maven:weblab-archetype-analyser (The Archetype used to generate a stub for analyser. This should be called through the weblab-archetype-plugin and not directly.) 626: remote -> org.ow2.weblab.tools.maven:weblab-archetype-configurable (The Archetype used to generate a stub for configurable. This should be called through the weblab-archetype-plugin and not directly.) 627: remote -> org.ow2.weblab.tools.maven:weblab-archetype-indexer (The Archetype used to generate a stub for indexer. This should be called through the weblab-archetype-plugin and not directly.) 628: remote -> org.ow2.weblab.tools.maven:weblab-archetype-queuemanager (The Archetype used to generate a stub for queuemanager. This should be called through the weblab-archetype-plugin and not directly.) 629: remote -> org.ow2.weblab.tools.maven:weblab-archetype-reportprovider (The Archetype used to generate a stub for reportprovider. This should be called through the weblab-archetype-plugin and not directly.) 630: remote -> org.ow2.weblab.tools.maven:weblab-archetype-resourcecontainer (The Archetype used to generate a stub for resourcecontainer. This should be called through the weblab-archetype-plugin and not directly.) 631: remote -> org.ow2.weblab.tools.maven:weblab-archetype-resources (The Archetype used to generate a stub for any WebLab service. It should be used in conjunction with interfaces specific archetypes. This should be called through the weblab-archetype-plugin and not directly.) 632: remote -> org.ow2.weblab.tools.maven:weblab-archetype-searcher (The Archetype used to generate a stub for searcher. This should be called through the weblab-archetype-plugin and not directly.) 633: remote -> org.ow2.weblab.tools.maven:weblab-archetype-sourcereader (The Archetype used to generate a stub for sourcereader. This should be called through the weblab-archetype-plugin and not directly.) 634: remote -> org.ow2.weblab.tools.maven:weblab-archetype-trainable (The Archetype used to generate a stub for trainable. This should be called through the weblab-archetype-plugin and not directly.) 635: remote -> org.parallelj:parallelj-archetype (ParallelJ is a Java framework for parallel computing. It provides flow modeling and execution. This archetype projects allows to create a project skeleton using ParallelJ.) 636: remote -> org.parallelj:parallelj-archetype-web (ParallelJ is a Java framework for parallel computing. It provides flow modeling and execution. This archetype projects allows to create a project skeleton using ParallelJ.) 637: remote -> org.parancoe:parancoe-pluginarchetype (-) 638: remote -> org.parancoe:parancoe-webarchetype (-) 639: remote -> org.patterntesting:patterntesting-tools (PatternTesting Tools (patterntesting-tools) is the container for tools around PatternTesting like the Ant extensions and Maven plugin.) 640: remote -> org.pustefixframework:pustefix-archetype-application (Pustefix Archetype for Applications) 641: remote -> org.pustefixframework:pustefix-archetype-basic (Pustefix archetype creating a basic application)

59

642: remote -> org.pustefixframework.maven.archetypes:pustefix-archetype-module (Pustefix Archetype for Modules) 643: remote -> org.:qooxdoo-archetype-desktop (An archetype to create a qooxdoo application) 644: remote -> org.qooxdoo:qooxdoo-archetype-gui (An archetype to create a qooxdoo application) 645: remote -> org.quattor.maven:cfg-module (-) 646: remote -> org.quattor.pan:panc-maven-archetype (-) 647: remote -> org.resthub:resthub-jpa-backbonejs-archetype (-) 648: remote -> org.resthub:resthub-jpa-backbonejs-multi-archetype (-) 649: remote -> org.resthub:resthub-mongodb-backbonejs-archetype (-) 650: remote -> org.resthub:resthub-mongodb-backbonejs-multi-archetype (-) 651: remote -> org.rhq:rhq-plugin-archetype (-) 652: remote -> org.rhq.maven:smartgwt-war-archetype (archetype for a Maven project for a SmartGWT web application (WAR)) 653: remote -> org.richfaces.archetypes:richfaces-archetype-kitchensink (-) 654: remote -> org.richfaces.archetypes:richfaces-archetype-simpleapp (-) 655: remote -> org.sadiframework:sadi-service-archetype (-) 656: remote -> org.scala-tools.archetypes:liftweb-archetype-blank (Archetype - blank project for liwftweb) 657: remote -> org.scala-tools.archetypes:liftweb-archetype-hellolift (Archetype - hellolift sample liwftweb application) 658: remote -> org.scala-tools.archetypes:scala-archetype-simple (The maven-scala-plugin is used for compiling/testing/running/documenting scala code in maven.) 659: remote -> org.siqisource.agave:archetypes-quickstart (-) 660: remote -> org.slf4j:slf4j-archetype (The slf4j Archetype) 661: remote -> org.sonatype.flexmojos:flexmojos-archetypes-application (-) 662: remote -> org.sonatype.flexmojos:flexmojos-archetypes-library (-) 663: remote -> org.sonatype.flexmojos:flexmojos-archetypes-modular-webapp (-) 664: remote -> org.sonatype.nexus.archetypes:nexus-plugin-archetype (-) 665: remote -> org.springframework.osgi:spring-osgi-bundle-archetype (Spring OSGi Maven2 Archetype) 666: remote -> org.springframework.ws:spring-ws-archetype (Spring Web Services Maven2 Archetype.) 667: remote -> org.sweble.wikitext:swc-example-basic-archetype (An archetype that creates a simple application which is able to parse a page written in Wikitext and render it as HTML.) 668: remote -> org.sweble.wikitext:swc-example--archetype (An example project that contains a simple application that is able to parse a page written in Wikitext and serialize it to XML, JSON or binary.) 669: remote -> org.sweble.wikitext:swc-example-xpath-archetype (An archetype that creates a simple application which is able to parse a page written in Wikitext and perform an XPath query on that document.) 670: remote -> org.syncope:syncope-archetype (Syncope archetype) 671: remote -> org.trailsframework:trails-archetype (-) 672: remote -> org.trailsframework:trails-secure-archetype (-) 673: remote -> org.tynamo:tynamo-archetype (-) 674: remote -> org.wicketstuff.scala:wicket-scala-archetype (-) 675: remote -> org.wicketstuff.scala:wicketstuff-scala-archetype (Basic setup for a project that combines Scala and Wicket, depending on the Wicket-Scala project. Includes an example Specs test.) 676: remote -> org.wikbook:wikbook.archetype (-) 677: remote -> org.xaloon.archetype:xaloon-archetype-wicket-jpa-glassfish (-) 678: remote -> org.xaloon.archetype:xaloon-archetype-wicket-jpa-spring (-) 679: remote -> org.xwiki.commons:xwiki-commons-component-archetype (Make it easy to create a maven project for creating XWiki Components.) 680: remote -> org.xwiki.rendering:xwiki-rendering-archetype-macro (Make it easy to create a maven project for creating XWiki Rendering Macros.) 681: remote -> org.zkoss:zk-archetype-component (The ZK Component archetype) 682: remote -> org.zkoss:zk-archetype-webapp (The ZK wepapp archetype) 683: remote -> ru.circumflex:circumflex-archetype (-) 684: remote -> se.vgregion.javg.maven.archetypes:javg-minimal-archetype (-) 685: remote -> sk.seges.sesam:sesam-annotation-archetype (-) 686: remote -> tk.skuro:-maven-archetype (A simple Maven archetype for Clojure) 687: remote -> uk.ac.rdg.resc:edal-ncwms-based-webapp (-)

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains):

Press Enter to choose to default option(233: maven-archetype-quickstart)

60

Maven preguntará por una versión particular.

Choose org.apache.maven.archetypes:maven-archetype-quickstart version: 1: 1.0-alpha-1 2: 1.0-alpha-2 3: 1.0-alpha-3 4: 1.0-alpha-4 5: 1.0 6: 1.1 Choose a number: 6:

Seleccione la opción 6 y pulse la tecla “enter” (6: maven-archetype-quickstart:1.1)

Maven preguntará por los detalles del proyecto:

'groupId': com.curso.jee 'artifactId': pr11 'version': 1.0 'package': com.curso.jee

Proyecto creado

En la carpeta c:\dawsjee\mvn\pr11 se ha creado el proyecto. La estructura del proyecto se muestra en la figura siguiente.

61

Fichero pom.xml

El fichero POM generado POM.xml contiene lo siguiente:

4.0.0 com.companyname.insurance health 1.0-SNAPSHOT jar health http://maven.apache.org UTF-8 junit junit 3.8.1 test

Además, se han creado los ficheros de código fuente App.java y TestApp.java

62

63

Snapshots de Maven Una aplicación software generalmente consta de varios módulos y es común que varios equipos se encarguen de desarrollar los módulos de la aplicación.

Por ejemplo, considere el caso en el que un equipo está trabajando en el “front-end” de una aplicación (interfaz de usuario: app-ui.jar:1.0) y que están utilizando el servicio de datos (data- service.jar:1.0). Puede ocurrir que el equipo que trabaja en el servicio de datos esté realizando la corrección de errores o mejoras de manera que están continuamente modificando la biblioteca al repositorio remoto.

En este escenario, los equipos de desarrollo deben trabajar de la siguiente forma:

• El equipo encargado del módulo “data-service” debe notificar al equipo que desarrolla el módulo “app-ui” cada vez que han realizado una actualización de código. • El equipo encargado del módulo “app-ui” necesita actualizar el fichero pom.xml con el fin de utilizar la última versión liberada

Para evitar este tipo de situaciones se desarrollo el concepto SNAPSHOT (instantánea). ¿Qué es un SNAPSHOT?

Un SNAPSHOT es una versión especial que indica una copia actual de desarrollo. A diferencia de las versiones regulares, Maven busca una nueva versión de la instantánea en un repositorio remoto para cada “build”. Ahora el equipo de servicio de datos liberará un SNAPSHOT de su código actualizando el repositorio. Snapshot contra Versión

En el caso de una Versión, una vez que Maven haya descargado la versión indicada, (por ejemplo la versión 1.0) nunca tratará de descargar una nueva versión 1.0

En el caso de un SNAPSHOT, de forma automática Maven buscará la versión SNAPSHOT (data-service:1.0-SNAPSHOT) cada vez que se realice un build utilizando esta SNAPSHOT. Fichero pom.xml del proyecto app-ui

El proyecto “app-ui” utiliza la versión 1.0-SNAPSHOT de “data-service”

4.0.0 app-ui

64

app-ui 1.0 jar health http://maven.apache.org UTF- 8 data-service data-service 1.0-SNAPSHOT test Fichero pom.xml del proyecto “data-service”

El proyecto “data-service” libera la versión 1.0-SNAPSHOT cada vez que realizan pequeños cambios o mejoras.

4.0.0 data-service data-service 1.0-SNAPSHOT jar health http://maven.apache.org UTF-8

A pesar de que Maven busca de forma automática la versión SNAPSHOT, es posible forzar a Maven para descargar la última snapshot utilizando la opción -U mvn clean package -U

Automatización de “Build”

La automatización de “Build” define el escenario en donde se verifica que la construcción final de una aplicación, que depende de varios proyectos, se realiza de forma apropiada. Ejemplo

65

Un equipo desarrolla el proyecto “bus-core-api”. Por otro lado, los proyectos “app-web- ui” y “app-desktop-ui” dependen del proyecto “bus-core-api”.

El proyecto “app-web-ui” utiliza la versión “1.0-SNAPSHOT” del proyecto “bus-core- api”

4.0.0 app-web-ui app-web-ui 1.0 jar bus-core-api bus-core-api 1.0-SNAPSHOT

El proyecto “app-desktop-ui” utiliza la version “1.0-SNAPSHOT” del proyecto “bus- core-api”

4.0.0 app-desktop-ui app-desktop-ui 1.0 jar bus-core-api bus-core-api 1.0-SNAPSHOT

Proyecto “bus-core-api”

4.0.0 bus-core-api bus-core-api 1.0-SNAPSHOT jar

66

Los equipos de desarrollo de los proyectos “app-web-ui” y “app-desktop-ui” necesitan que los procesos “build” deben ser recompilados siempre que haya cambios en el proyecto “bus-core-api”.

Utilizar snapshot asegura que se está utilizando la última versión del proyecto “bus-core- api”, sin embargo para que se recompilen de forma automática los proyectos dependientes es necesario agregar información adicional.

Existen 2 formas de hacer esta recompilación automática:

• Agregar una meta “post-build” al fichero pom.xml del proyecto “bus-core-api” para recompilar los proyectos “app-web-ui” y “app-desktop-ui”. • Utilizar un Servidor de integración continua (Continuous Integration: CI) tipo Hudson para gestionar la automatización de la recompilación. Utilizando Maven las cosas se pueden hacer de la siguiente forma

Actualizar el fichero pom.xml del proyecto “bus-core-api Project”

4.0.0 bus-core-api bus-core-api 1.0-SNAPSHOT jar maven-invoker-plugin 1.6 true app-web-ui/pom.xml app-desktop-ui/pom.xml build run

67

Utilización del Servicio de Integración Continua (Continuous Integration Service) con maven

Utilizando un servidor de CI es la mejor opción, ya que de esta forma los desarrolladores no necesitan que actualizar el pom de su proyecto, cada vez que un nuevo proyecto depende de su proyecto.

Hudson considera cada “proceso Build” como un trabajo independiente.

Una vez que el código de un proyecto es revisado mediante SVN (o cualquier herramienta de administración de la fuente asignada a Hudson), Hudson inicia su trabajo de compilación y una vez que ha terminado este trabajo, automáticamente inicia los trabajos dependientes (otros proyectos dependientes).

En nuestro ejemplo: cuando se actualiza el código fuente de “bus-core-IU” en SVN, Hudson comienza su construcción. Una vez que la construcción es exitosa. Automáticamente, Hudson busca proyectos dependientes y comienza a construir dichos proyectos: “app-web-ui” y “app- desktop-ui”

Gestión de dependencias en Maven

Una de las características básicas de Maven es la gestión de dependencias. La tarea de gestionar dependencias se complica cuando se trata con proyectos multi-modulo (Este tipo de proyectos consisten en cientos de módulos/sub-proyectos). Maven proporciona unalto grado de control de la gestión para este tipo de escenarios. Descubrimiento de dependencias transitivas

68

Es muy común el caso en el que una biblioteca A, depende de otra biblioteca B. Si un tercer proyecto C, quiere utilizar la biblioteca A, se necesita indicar que dicho proyecto C también depende de B.

Maven ayuda a evitar tales requerimientos, ayudando a descubrir todas las bibliotecas que son requeridas. Para lograr esto, Maven lee los ficheros de dependencias (pom.xml), y determina sus dependencias, acto seguido lee los ficheros pom.xml de cada dependencia y así sigue.

De forma, que en el fichero pom.xml de un proyecto, basta con definir las dependencias directas, el resto lo hace de forma automática Maven.

Con dependencias transitivas, el grafo de bibliotecas incluidas puede crecer de forma exponencial, ya que se podrían duplicar librerías. Maven también está preparado para eliminar la repetición de dependencias.

Característica Descripción

Determines what version of a dependency is to be used when multiple Dependency versions of an artifact are encountered. If two dependency versions are at the mediation same depth in the dependency tree, the first declared dependency will be used.

Directly specify the versions of artifacts to be used when they are Dependency encountered in transitive dependencies. For an example project C can include management B as a dependency in its dependencyManagement section and directly control which version of B is to be used when it is ever referenced.

Dependency scope Includes dependencies as per the current stage of the build

Any transitive dependency can be excluede using "exclusion" element. As Excluded example, A depends upon B and B depends upon C then A can mark C as dependencies excluded.

Any transitive dependency can be marked as optional using "optional" Optional element. As example, A depends upon B and B depends upon C. Now B dependencies marked C as optional. Then A will not use C.

Ámbito de las dependencias

El descubrimiento de dependencias transitivas puede ser restringido a un ámbito:

Ámbito Descripción

69

Este ámbito indica que la dependencia esta disponible en le “classpath” de la compile aplicación. Es el valor por defecto.

Esté ámbito indica que la dependencia será proporcionada por el SDK o por provided el servidor Web en tiempo de ejecución.

Esté ámbito indica que la dependencia se necesita en tiempo de ejecución (en runtime el servidor), no siendo requerida en tiempo de compilación.

Este ámbito indica que la dependencia sólo se encuentra disponible en la test compilación de los “tests” y en las fases de ejecución de dichos “tests”.

system Este ámbito indica que basta con indicar la ruta del sistema.

Este ámbito sólo se utiliza cuando la dependencia es de tipo pom. Este ámbito import indica que el POM especificado debe ser remplazado por las dependencias encontradas en el elemento

Gestión de dependencias

Por lo general, tenemos un conjunto de proyectos bajo un proyecto común. En tal caso, podemos crear un fichero pom común con todas las dependencias comunes y luego hacer este pom el padre de los ficheros pom de los sub-proyectos. El ejemplo siguiente le ayudará a entender este concepto

A continuación se indican los detalles del grafo de dependencias mostrado en la figura anterior.

• App-UI-WAR depende de “App-Core-lib” y “App-Data-lib”. • Root es el padre de “App-Core-lib” y “App-Data-lib”. • Root define, en su sección de dependencias, Lib1, Lib2 y Lib3 como dependencias.

App-UI-WAR

70

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.companyname.groupname App-UI-WAR 1.0 war com.companyname.groupname App-Core-lib 1.0 com.companyname.groupname App-Data-lib 1.0

App-Core-lib

Root com.companyname.groupname 1.0 4.0.0 com.companyname.groupname App-Core-lib 1.0 jar

App-Data-lib

Root com.companyname.groupname 1.0 4.0.0 com.companyname.groupname App-Data-lib 1.0 jar

71

Root

4.0.0 com.companyname.groupname Root 1.0 pom com.companyname.groupname1 Lib1 1.0 com.companyname.groupname2 Lib2 2.1 com.companyname.groupname3 Lib3 1.1

Cuando construimos el proyecto “App-UI-WAR, Maven descubrirá todas las dependencias al navegar el gráfico de dependencia y generara la aplicación.

Del ejemplo presentado, los conceptos clave a comprender son:

• Las dependencias comunes pueden ser colocadas en un solo lugar utilizando el concepto de POM padre. Las dependencias de los proyectos “App-Data-lib” y “App-Core-lib” son listadas en el proyecto “Root” • No es necesario especificar las dependencias Lib1, Lib2 yLib3 como dependencias en “App-UI-WAR”. Maven emplea el mecanismo de dependencias transitivas para incluirlas.

Automatización del proceso de despliegue en Maven

En el desarrollo de proyectos, normalmente un proceso de despliegue consta de los siguientes pasos:

• Registrar el código de los proyectos en desarrollo en un repositorio de código fuente SVN. • Descargar el código del servidor SVN • Construir la aplicación.

72

• Almacenar el resultado de la compilación (fichero WAR o fichero EAR) en una ubicación de red. • Obtener el fichero de la red y desplegarlo en el sitio en producción • Actualizar la documentación de la aplicación. Problema a resolver

Normalmente, el proceso de despliegue de una aplicación es realizada por muchas personas. Un equipo puede ser el encargado de registrar el código, otro puede estra encargado de descargar el código y construir la aplicación, y así sucesivamente. Es muy probable que un paso sea omitido. Por ejemplo, no remplazar el resultado de un proceso “build” en la red, significaría que se despliegue y documente la versión anterior (por segunda vez).

Solución

Automatizar el proceso de despliegue combinando:

• Maven, para ejecutar los procesos de construcción y liberalización (releases) de proyectos. • SubVersion, Repositorio para gestionar el código fuente. • Un gestor de repositorio remoto (Jfrog/Nexus) encargado de mantener los ficheros binarios del proyecto.

Update Project POM.xml

Se puede utilizar el plugin “Release” para crear un proceso de liberación automatizado.

Ejemplo: Fichero pom.xml del proyecto “bus-core-api”

4.0.0 bus-core-api bus-core-api 1.0-SNAPSHOT jar http://www.svn.com scm:svn:http://localhost:8080/svn/jrepo/trunk/ Framework

scm:svn:${username}/${password}@localhost:8080: common_core_api:1101:code Core-API-Java-Release Release repository http://localhost:8081/nexus/content/repositories/

73

Core-Api-Release org.apache.maven.plugins maven-release-plugin 2.0-beta-9 false deploy [bus-core-api-release-checkin]-< /scmCommentPrefix>

En este fichero pom.xml, los elementos importantes son:

Elemento Descripción

Configura la localización del servidor SVN del que Maven obtendrá el SCM código fuente.

Ubicación en donde los ficheros construidos WAR/EAR/JAR serán Repositories almacenados después de que un proceso de construcción haya terminado de forma exitosa.

Se configura el plugin maven-release para automatizar el proceso de Plugin despliegue

Plug-in Maven Release

Maven puede hacer las siguientes tareas utilizando el plugin maven-release. mvn release:clean

Limpia el espacio de trabajo en caso de que el ultimo proceso de “reléase” no fue satisfactorio. mvn release:rollback

Deshace (Rollback) los cambios hechos en el código del espacio de trabajo y en la configuración, en el caso en el que el último proceso de “release” no haya sido realizado de forma satisfactoria. mvn release:prepare

Realiza una gran cantidad de operaciones

74

• Comprueba si existen cambios locales no confirmados o no • Asegura que no existe ninguna dependencia SNAPSHOT • Cambia la versión de la aplicación y elimina SNAPSHOT de la versión para hacer una liberación (reléase). • Actualiza los ficheros pom para SVN. • Ejecuta los casos de prueba • cometer los archivos modificados de POM • etiqueta el código en subversión • Incremento el número de la versión y agrega una SNAPSHOT para liberaciones futuras • Almacena en el servidor SVN los ficheros pom.xml modificados

Aplicación Web Maven

El siguiente ejemplo tiene por objetivo mostrar como gestionar una aplicación web utilizando el sistema de control de versiones de Maven. Creación de una aplicación Web

Para crear una aplicación web basada en Java, vamos a utilizar el plugin “maven- archetype-webapp”. En una consola de comandos, vaya al directorio C:\dawsjee\mvn> y ejecute el siguiente comando Maven:

C:\dawsjee\mvn> mvn archetype:generate -DgroupId=com.curso.jee -DartifactId=pr12

-DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

[INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'archetype'. [INFO] ------[INFO] Building Maven Default Project [INFO] task-segment: [archetype:generate] (aggregator-style) [INFO] ------[INFO] Preparing archetype:generate [INFO] No goals needed for project - skipping [INFO] [archetype:generate {execution: default-cli}] [INFO] Generating project in Batch mode [INFO] ------[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0 [INFO] ------[INFO] Parameter: groupId, Value: com.curso.jee [INFO] Parameter: packageName, Value: com.curso.jee [INFO] Parameter: package, Value: com.curso.jee [INFO] Parameter: artifactId, Value: pr12 [INFO] Parameter: basedir, Value: C:\dawsjee\mvn [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: C:\dawsjee\mvn\pr12 [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: 1 second [INFO] Finished at: Sun Dec 09 12:41:29 CET 2012 [INFO] Final Memory: 24M/221M [INFO] ------

75

Verifique que se ha creado la carpeta pr12:

Maven emplea una estructura de directorios estándar.

Folder Structure Description

pr12 Contiene la carpeta src y el fichero pom.xml

src/main/webapp Contiene el fichero index.jsp y la carpeta WEB-INF

76

Contiene el fichero de configuración de la aplicación WEB: src/main/webapp/WEB-INF web.xml

Contiene los recursos de la aplicación Web (imágenes, ficheros de src/main/resources propiedades, etcétera).

Fichero pom.xml

4.0.0 com.curso.jee pr12 war 1.0-SNAPSHOT pr12 Maven Webapp http://maven.apache.org junit junit 3.8.1 test pr12

Con el fin de que la aplicación Web sea operativa, Maven crea el fichero C:\dawsjee\mvn\pr12\src\main\webapp\index.jsp con el siguiente código:

Hello World!

Modifique este fichero para que contenga el siguiente código HTML:

dawsjee

Bienvenido al curso de desarrollo de aplicaciones Web seguras utilizando JEE (dawsjee)

Construcción de la aplicación Web

En una consola de comandos, ejecute el siguiente comando maven:

C:\dawsjee\mvn\pr12>mvn clean package

77

[INFO] Scanning for projects... [INFO] ------[INFO] Building pr12 Maven Webapp [INFO] task-segment: [clean, package] [INFO] ------[INFO] [clean:clean {execution: default-clean}] [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [compiler:compile {execution: default-compile}] [INFO] No sources to compile [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\dawsjee\mvn\pr12\src\test\resource s [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] No sources to compile [INFO] [surefire:test {execution: default-test}] [INFO] No tests to run. [INFO] [war:war {execution: default-war}] [INFO] Packaging webapp [INFO] Assembling webapp[pr12] in [C:\dawsjee\mvn\pr12\target\pr12] [INFO] Processing war project [INFO] Copying webapp resources[C:\dawsjee\mvn\pr12\src\main\webapp] [INFO] Webapp assembled in[31 msecs] [INFO] Building war: C:\dawsjee\mvn\pr12\target\pr12.war [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: < 1 second [INFO] Finished at: Sun Dec 09 12:51:56 CET 2012 [INFO] Final Memory: 15M/222M [INFO] ------

Verifique que se ha creado la carpeta target, en el cual se tiene la aplicación empacada en eun fichero WAR

78

Despliegue de la aplicación Web

Copie el fichero C:\dawsjee\mvn\pr12\target\pr12.war a la carpeta c:\tomcat7\webapps

Inicie Tomcat.

Verifique que la aplicación Web está operativa

Con un navegador abra la URL siguiente:

http://loclahost:8080/pr12/index.jsp

79

Integración de Maven con el IDE Eclipse

Eclipse proporciona un excelente plugin m2eclipse que integra Maven y Eclipse.

Algunas de las características de m2eclipse son listadas a continuación:

• Se pueden ejecutar las metas de maven desde Eclipse. • La salida de los comandos Maven se visualizan dentro de la consola de Eclipse. • Es posible actualizar las dependencias con el IDE. • Es posible lanzar “Maven builds” desde Eclipse. • Resuelve las dependencias desde el espacio de trabajo “workspace” de Eclipse • Automáticamente se descargan las dependencias desde los repositorios remotos • Eclipse proporciona asistentes para crear proyectos Maven Instalación del plugin m2eclipse

Utilice uno de los siguientes enlaces para instalar el plugin m2eclipse:

Eclipse URL

Eclipse 3.5 (Gallileo) Instalación de m2eclipse en Eclipse 3.5 (Gallileo)

Eclipse 3.6 (Helios) Instalación de m2eclipse en Eclipse 3.6 (Helios)

El plugin m2eclipse de Sonatype ya está integrado en Eclipse 3.7 Eclipse 3.7 (indigo) (Indigo)

El plugin m2eclipse de Sonatype ya está integrado en Eclipse 3.8 Eclipse 3.8 (Juno) (Juno)

80

Importar un proyecto maven desde Eclipse

Primero se debe ejecutar el siguiente comando mvn

C:\dawsjee\mvn\pr10>mvn eclipse:eclipse

[INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'eclipse'. [INFO] ------[INFO] Building pr10 [INFO] task-segment: [eclipse:eclipse] [INFO] ------[INFO] Preparing eclipse:eclipse [INFO] No goals needed for project - skipping [INFO] [eclipse:eclipse {execution: default-cli}] [INFO] Using Eclipse Workspace: null [INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAIN ER [INFO] Not writing settings - defaults suffice [INFO] Wrote Eclipse project for "pr10" to C:\dawsjee\mvn\pr10. [INFO] [INFO] ------[INFO] BUILD SUCCESSFUL [INFO] ------[INFO] Total time: < 1 second [INFO] Finished at: Sun Dec 09 13:47:40 CET 2012 [INFO] Final Memory: 12M/220M [INFO] ------

Desde eclipse, seleccionar la opción de Menú File→Import

81

82

83

84

85

86

87

88

89

90

91

92

93

Forma de trabajo: A partir de ahora, vamos a utilizar Eclipse para crear los proyectos Maven:

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109