Diferencia entre revisiones de «Maven»

De Dos Ideas.
Saltar a: navegación, buscar
(Plugin)
(MOJO (Maven Plain Old Java Object))
Línea 48: Línea 48:
  
 
===MOJO ('''M'''aven Plain '''O'''ld '''J'''ava '''O'''bject)===
 
===MOJO ('''M'''aven Plain '''O'''ld '''J'''ava '''O'''bject)===
MOJO es el término que utiliza Maven para referirse a un Goal programado en Java. Es en alución a los POJOs que son simples clases en Java sin imposiciones de un framework. En este caso, para programar un Goal basta con escribir cualquier clase en Java que haga lo que se necesita hacer, sin ninguna imposición de Maven. Sólo basta con anotar el método que funcionará como Goal.
+
MOJO es el término que utiliza Maven para referirse a un artefacto que representa un Goal. El término parte de un juego de palabras entre POJO y Mojo. Los POJOs son simples clases en Java sin imposiciones de un framework, aunque Maven hacen extensivo al término MOJO a goals programados en otros lenguajes. Y un Mojo es un hechizo mágico que se hace envolviendo elementos en un paño.
 +
 
 +
Para programar un Goal utilizando Java como lenguaje, basta con escribir una clase que haga lo que se necesita hacer con la única imposición de implementar una interfase. El resto de la configuración va en un descriptor en xml.
  
 
===Plugin===
 
===Plugin===

Revisión del 12:50 5 nov 2008

Maven es una herramienta software para la gestión y comprensión de proyectos Java.

La versión 2 usa un archivo de configuración en XML llamado pom.xml. Su funcionalidad es parecida a Apache Ant de manera que permite compilar, ejecutar test o realizar distribuciones pero con la diferencia que trata de forma automática las dependencias del proyecto. Una de las más importantes características es su actualización en línea mediante servidores repositorios. Maven es capaz de descargar nuevas actualizaciones de las bibliotecas de las que depende el proyecto y de igual manera subir una nueva distribución a un repositorio de versiones, dejandola al acceso de todos los usuarios.

Diferencias con Ant

Declarativo vs. Procedural

En Ant las acciones a realizar se definen en forma procedural paso por paso, mientras que con Maven se declara que plugins se van a utilizar, con que configuración y con que dependencias y Maven se encarga del orden en el que se utilizan las cosas para lograr el objetivo declarado.

Conceptos de Maven

Dependencias Transitivas (Transitive Dependencies)

Esto es que las dependencias que declara una dependencia son utilizadas como dependencias propias del POM que se está utilizando. Ejemplo: si A declara dependencias sobre B y B declara dependencias sobre X e Y, cuando se ejecuten las fases del ciclo de vida de Maven se van a utilizar como dependencias B, X e Y.

POM (Project Object Model)

Es un archivo xml llamado pom.xml y ubicado en la raiz de un proyecto (o un módulo) que declara datos sobre el mismo, dependencias y plugins a utilizar durante el ciclo de vida de la administración del proyecto. [1]

Herencia y POM Real (Effective POM)

Los POMs pueden heredar de otro POM que se defina como parent. La raiz implícita desde donde heredan todos los POMs es el Super POM definido por Maven. El POM resultante luego de incorporar todos los ancestros se llama Effective POM. Se puede inspeccionar corriendo el goal effective-pom del plugin help parados sobre el directorio donde se encuentra el pom en cuestión. mvn help:effective-pom

Goal

Los Goals de Maven son las unidades mínimas de ejecución de las que disponemos durante su uso. Los goals pueden programarse en diferentes lenguajes pero en la práctica están la mayoría programados en Java. No es común que como usuario se piense en programar un goal. Un grupo de goals conforman un plugin. La ejecución de un goal se dispara desde línea de comandos invocando Maven con el nombre del plugin que lo contiene: mvn plugin:goal. Otra forma de invocar un goal es indirectamente declarando por ejemplo el uso de un plugin en un POM. Maven lo invocará dependiendo de la fase del ciclo de vida cuando por ejemplo se ejecute mvn compile

Dependencia (Dependency)

Grupo (Group)

Artefacto (Artifact)

Maven utilza el término artifact para denominar a la unidad mínima que maneja en su repositorio. Puede ser por ejemplo un jar, un ear, un zip, etc. Cuando Maven compila y empaqueta código, produce también artifacts que instala en el repositorio. Los artifacts están agrupados bajo el id de grupo (groupId) y tienen un id propio (artifactId), una versión, un clasificador y una extensión. Para administrar los artefactos en el repositrio Maven los acompaña con un respectivo pom.xml conteniendo los datos anteriores.

Repositorio (Repository)

Coordenadas (Coordinates)

Las coordenadas de Maven es la forma de identificar a un projecto, dependencia, plugin o artefacto en forma única en un pom y en un repositorio. Una coordenada se compone de los siguientes identificadores: groupId:artefactId:version.

A veces es necesario generar dos empaquetados distintos de una misma versión por cuestiones técnicas, por ejemplo un mimso artefacto para correr sobre dos entornos diferentes. En esta situación se puede utilizar un identificador más: groupId:artefactId:version:classifier.

Al momento de producir artefactos, estos cuatro identificadores funcionan en conjunto con uno más, pero que no forma parte de la coordenada: packaging y que se refiere al tipo de empaquetado del artefacto (ejs: zip, jar, ear). De hecho no es posible tener en el repositorio dos artefactos de la misma versión pero con diferente empaquetado.

  • groupId nombre bajo el que se agrupan una serie de artefactos (ej: junit, spring, org.xyx, com.tm.projectox').
  • artifactId identificacion de la unidad mínima administrada por el repositorio (ej: junit, moduloEjb, ejb-api, servlet-api).
  • version la versión del artefacto con la siguiente nomenclatura <major version>.<minor version>.<incremental version>-<qualifier>.
  • classifier clasificador que permite diferenciar iguales versiones pero preparadas o compiladas para diferentes entornos.
  • packaging no forma parte de la coordenada y sólo se utiliza al momento de generar un artefacto. Define el formato del empaquetado (ejs: jar, war, zip, pom).

MOJO (Maven Plain Old Java Object)

MOJO es el término que utiliza Maven para referirse a un artefacto que representa un Goal. El término parte de un juego de palabras entre POJO y Mojo. Los POJOs son simples clases en Java sin imposiciones de un framework, aunque Maven hacen extensivo al término MOJO a goals programados en otros lenguajes. Y un Mojo es un hechizo mágico que se hace envolviendo elementos en un paño.

Para programar un Goal utilizando Java como lenguaje, basta con escribir una clase que haga lo que se necesita hacer con la única imposición de implementar una interfase. El resto de la configuración va en un descriptor en xml.

Plugin

Un Plugin es un conjunto de Goals junto con una descripción y configuración en un pom. Los plugins pueden instalarse y distribuirse mediante los repositorios. Los goals de los plugins pueden utilizarse desde línea de comando: mvn plugin:goal o declarándolo en el pom en la sección <plugins/> con el tag <plugin//>.

Comandos de Ciclo de Vida (Lifecycle Command)

Arquetipo (Archetype)

Perfiles (Profiles)

Es posible redefinir prácticamente cualquier parte de un POM definiendo un perfil. Pueden definirse varios perfiles. La activación de un perfil puede dispararse por uno o una combinación de las siguientes evaluaciones:

  • Existencia o inexistencia de un archivo
  • Sistema operativo
  • Variables de entorno del sistema operativo
  • Inexistencia de variables de entorno del sistema operativo

Plugins

  • Jar
  • War
  • Ear
  • JUnit
  • Distribution: permite meter en un fichero zip todos los archivos del proyecto
  • PDF: genera la documentación del proyecto en PDF
  • Checkstyle: control de convenciones de codificación Java
  • PMD: verificación de reglas de codificación

Ver también

  • listado de plugins oficiales
  • proyecto mojo
  • libro pdf online[[2]]
  • listado del repositorio central
  • snippets
  • junit
  • reconfiguracion del compile
  • multi modulo
  • ejb
  • servlet
  • plugins comunes
  • help
  • archetype
  • install
  • Maven Quic Card Reference (No tan Card!)[[3]]