Apache experto | |
---|---|
Tipo de | Automatización de compilación y sistema de gestión de paquetes |
Desarrollador | Fundación de software Apache |
Escrito en | Java [3] [4] [5] |
Sistema operativo | multiplataforma |
Primera edición | 1 de febrero de 2008 [1] |
plataforma de hardware | máquina virtual de Java |
ultima versión |
|
Formatos de archivo legibles | metadatos expertos [d] |
Formatos de archivo generados | metadatos expertos [d] |
Licencia | Licencia Apache 2.0 |
Sitio web | maven.apache.org _ |
Archivos multimedia en Wikimedia Commons |
Apache Maven es un marco para automatizar el ensamblaje de proyectos basado en la descripción de su estructura en archivos en el lenguaje POM ( Project Object Model ) , que es un subconjunto de XML [6] . El proyecto Maven es publicado por Apache Software Foundation , donde forma parte formalmente del Proyecto Jakarta .
El nombre del sistema es una palabra yiddish , cuyo significado puede expresarse aproximadamente como "recolector de conocimientos" [7] .
Maven proporciona una compilación de proyecto declarativa , no imperativa (a diferencia de la herramienta de automatización de compilación Apache Ant ). Los archivos de descripción del proyecto contienen la especificación del proyecto, no los comandos de ejecución individuales. Todas las tareas de procesamiento de archivos descritas en la especificación son manejadas por Maven a través de una serie de complementos integrados y externos.
Maven se utiliza para construir y gestionar proyectos escritos en Java , C# , Ruby , Scala y otros lenguajes [8] .
Las alternativas notables incluyen el sistema de compilación automatizado Gradle , que se basa en los principios de Apache Ant y Maven, pero usa un Groovy DSL especializado en lugar de una configuración POM.
Maven fue creado por el canadiense Jason van Zyl y Sonatype , una firma que fundó . Comenzó como un subproyecto de Apache Turbine en 2002, y en 2003 Maven fue calificado como un proyecto Apache de nivel superior, al mismo tiempo apareció su primera versión: Maven 1.x, publicada el 13 de julio de 2004 como versión 1.0. Sin embargo, esto sucedió tan rápido que no se pensaron en algunos detalles, por ejemplo, demasiada configuración, problemas de rendimiento.
Por lo tanto, se finalizó el concepto y en 2005 se inició el desarrollo paralelo de Maven 2.x, que se entregó en la versión 2.0 el 19 de octubre de 2005. [9]
Maven 1.x no está más desarrollado y se limita a la asistencia al usuario y la corrección de errores. [diez]
El desarrollo de Maven 3.0 comenzó en 2008. Después de ocho versiones alfa, la primera versión beta de Maven 3.0 se publicó en octubre de 2010. Se ha prestado especial atención a su compatibilidad con versiones anteriores de Maven 2. Para la mayoría de los proyectos, pasar de Maven 2 a Maven 3 no requiere ningún cambio [11] .
El desarrollo de Maven tiene lugar en los siguientes subproyectos:
La información para construir un proyecto compatible con Apache Maven está contenida en un archivo XML llamado pom.xml . Al iniciar, Maven verifica que el archivo de configuración contenga todos los datos requeridos y que todos los datos sean sintácticamente correctos.
Un ejemplo de archivo pom.xml :
<proyecto> <!-- la versión del modelo para Maven 2.x POM siempre es 4.0.0 --> <modeloVersión> 4.0.0 </modeloVersión> <!-- coordenadas del proyecto, es decir, un conjunto de valores que le permite identificar de forma única este proyecto --> <groupId> com.mycompany.app </groupId> <artifactId> my-app </artifactId> <version> 1.0 </version> <!-- dependencias de la biblioteca --> <dependencias> <dependencias> <!-- coordenadas de la biblioteca requerida --> <groupId> junit </groupId> <artifactId> junit </artifactId> <versión> 3.8.1 </versión> <!-- esta biblioteca solo se usa para ejecutar y compilar pruebas --> <alcance> prueba </alcance> </dependencia> </dependencias> </proyecto>La configuración mínima incluye la versión del archivo de configuración, el nombre del proyecto, su autor y la versión [12] . Usando pom.xml , se configuran dependencias en otros proyectos, fases individuales del proceso de construcción del proyecto (proceso de construcción), una lista de complementos que implementan el orden de construcción [12] .
Los proyectos grandes se pueden dividir en varios módulos o subproyectos, cada uno con su propio POM. Las operaciones en los módulos se pueden realizar a través de un POM raíz común con un solo comando.
Los archivos POM de subproyecto pueden heredar la configuración de otros archivos de configuración. Al mismo tiempo, todos los archivos de configuración se heredan necesariamente del archivo "Super POM" [13] de forma predeterminada. El Super POM proporciona una configuración predeterminada, como una estructura de directorio predeterminada, complementos predeterminados, vinculación a las fases del ciclo de vida y más.
Maven admite el principio de convención por configuración , que es que un aspecto en cuestión necesita una configuración si y solo si ese aspecto no satisface alguna especificación. Como consecuencia, esto reduce la cantidad de configuración requerida sin perder flexibilidad. Una consecuencia de este principio es que no hay necesidad de especificar rutas de archivo de forma explícita, lo que simplifica el contenido de pom.xml . Sin embargo, casi todos los estándares en los que se basa Maven se pueden cambiar mediante una configuración individual [14] [15] .
Maven utiliza el principio de los arquetipos de Maven (Eng. Archetypes ). Un arquetipo es una herramienta de patrones, cada uno de los cuales está definido por un patrón o modelo, por analogía con el cual se crean derivados. [dieciséis]
La estructura de directorios predeterminada es una de las implementaciones de Maven del principio del arquetipo. La siguiente estructura muestra los directorios más importantes para un proyecto Java [17] :
El ciclo de vida de un proyecto maven es una lista de fases con nombre que determina el orden de las acciones cuando se construye. El ciclo de vida de Maven contiene tres órdenes de ejecución independientes: [18]
Los ciclos de vida estándar se pueden mejorar con la funcionalidad mediante los complementos de Maven. Los complementos le permiten insertar nuevos pasos en el ciclo estándar (por ejemplo, distribución al servidor de aplicaciones) o ampliar los pasos existentes.
Maven se basa en una arquitectura de complementos que le permite usar complementos para varias tareas ( compilar , probar, construir, implementar, verificar estilo, pmd, scp-transfer ) para un proyecto determinado, sin tener que instalarlos explícitamente. Esto es posible debido al hecho de que la información llega al complemento a través de la entrada estándar y los resultados se escriben en su salida estándar. En teoría, esto permite que cualquiera pueda escribir complementos para interactuar con las herramientas de compilación del proyecto (compiladores, herramientas de prueba, etc.) para cualquier otro idioma. En realidad, el soporte para lenguajes distintos a Java actualmente es mínimo. Hay un complemento para .NET framework [19] , así como complementos para C / C++ [20] [21] .
La cantidad de complementos disponibles actualmente es muy grande e incluye, entre otras cosas, complementos que le permiten ejecutar una aplicación web directamente desde Maven para probarla en un navegador; complementos que le permiten probar o crear bancos de datos; complementos que le permiten generar Servicios Web. La tarea del desarrollador en tal situación es encontrar y aplicar el conjunto de complementos más adecuado.
El complemento logra una serie de objetivos con la siguiente sintaxis:
mvn [nombre del complemento]:[nombre del objetivo]Por ejemplo, un proyecto Java se puede compilar con un complemento del compilador [22] ejecutando el comando mvn compiler:compile.
Hay complementos de Maven para compilar, probar, controlar la fuente, ejecutar un servidor web, generar archivos de proyecto de Eclipse y más. [23] Los complementos se enumeran y configuran en una sección del <plugins>archivo pom.xml . Algún grupo básico de complementos se incluye en cada proyecto de forma predeterminada.
El archivo pom.xml especifica las dependencias que tiene un proyecto administrado por Maven. El administrador de dependencias se basa en varios principios fundamentales:
Un ámbito de dependencia le permite incluir dependencias solo en una etapa determinada de la creación del proyecto. Hay 6 áreas posibles [27] :
Un proyecto mantenido con Maven debe cumplir ciertas condiciones para que la utilidad pueda leerlo, analizarlo y construirlo. Esto impone algunas restricciones en la estructura del directorio y requiere pasos adicionales si el proyecto inicialmente tiene una estructura diferente. [28]
Para que Maven reconozca un proyecto como procesado, debe contener una estructura de directorio establecida. Todos los archivos de código fuente deben estar ubicados en la ruta relativa " \src\main\java " [17] .
El archivo de configuración del proyecto web web.xml debe estar ubicado en el directorio \src\main\webapp\WEB-INF [17 ] .
El archivo de configuración pom.xml de un proyecto Maven debe estar ubicado en el directorio raíz del proyecto. Según su propósito, puede contener un repositorio remoto, complementos para crear archivos, un complemento de compilación, etc. El proyecto web también necesita agregar dependencias adicionales, como javaee.jar.
Entonces, el archivo de configuración del proyecto web de salida, de acuerdo con Maven, se ve así:
<proyecto xmlns= "http://maven.apache.org/POM/4.0.0" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http:/ /maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" > <versión del modelo> 4.0.0 </versión del modelo> <identificación del grupo> com.mkyong </identificación del grupo> < artefactoId> servletdemo </artifactId> <paquete> guerra </paquete> <versión> 1.0-SNAPSHOT </versión> <nombre> servletdemo </nombre> <url> http://maven.apache.org </url> <repositorios> <repositorio> <id> java.net </id> <url> http://download.java.net/maven/2 </url> </repositorio> </repositorios> <compilación> <complementos> <complemento> <groupId> org.apache.maven.plugins </groupId> <artifactId> maven-war-plugin </artifactId> <configuración> <webResources> <recurso> <directorio> ${basedir }/src/main/java </directory> <targetPath> WEB-INF/classes </targetPath> <includes> <include> **/*.properties </include> <include> **/*.xml </ include> <include> **/*.css </include> <include> **/*.html </include> </includes> </resource> </webResources> </configuration> </plugin> <plugin > <artifactId> maven-compiler-plugin </artifactId> <configuration> <source> 1.6 </source> <target> 1.6 </target> </configuration> </plugin> </plugins> </build> </ proyecto>Una vez que se han cumplido todos los requisitos anteriores, el proyecto Maven está listo para realizar las fases del ciclo de vida, como la compilación, la creación de archivos y la generación de documentación [29] .
Un ejemplo del registro de salida de mensajes al ejecutar el comando mvn war:war:
E:\espacio de trabajo\servletdemo>mvnwar:war [INFO] Buscando proyectos... ....... [INFO] Proyecto de guerra de procesamiento [INFO] Copiando recursos de aplicaciones web [E:\workspace\servletdemo] [INFO] Webapp ensamblada en [47 mseg] [INFO] Guerra de construcción: E:\workspace\servletdemo\target\servletdemo-1.0-SNAPSHOT.war [INFORMACION]----------------------------------------------- ----- [INFO] CONSTRUCCIÓN EXITOSA [INFORMACION]----------------------------------------------- -----Para algunos IDE, Maven proporciona complementos que le permiten administrar el ciclo de vida mediante la ejecución de comandos mediante la interfaz IDE. La lista de dichos entornos de desarrollo incluye Eclipse (a través del complemento M2eclipse ), IntelliJ IDEA , NetBeans , JBuilder , JDeveloper (versión 11.1.2), MyEclipse, Emacs [30]
Estos complementos también brindan la capacidad de editar convenientemente el POM o usar el POM para describir completamente las dependencias del proyecto para las necesidades del IDE que está usando.
en redes sociales | |
---|---|
sitios temáticos |
Fundación de software Apache | |||||||
---|---|---|---|---|---|---|---|
Proyectos de primer nivel |
| ||||||
Subproyectos |
| ||||||
Web de Apache |
| ||||||
Otros proyectos | |||||||
Desarrollando proyectos ( Incubadora ) |
| ||||||
Proyectos fuera de servicio ( Ático ) | |||||||
|
Sistemas de automatización de montaje | |
---|---|