¿Qué es un artefacto Maven?

342

¿Qué es un artefacto y por qué Maven lo necesita?

Maxim Veksler
fuente
3
Más información sobre los conceptos de Maven aquí: tshikatshikaaa.blogspot.nl/2012/05/…
Jérôme Verstrynge
1
Por cierto, puede ver el glosario oficial de Apache Maven para la definición de un artefacto
informatik01
1
Ninguna de estas respuestas está completa. Puede ver esto simplemente navegando por un repositorio de Maven . Aparentemente, un artefacto es un directorio que cumple algunas restricciones, por ejemplo, debe contener un archivo llamado maven-metadata.xmly un archivo llamado <artifactId>-<version>.pom. Ambos archivos tienen algún esquema y semántica indocumentados.
jameshfisher

Respuestas:

303

Un artefacto es un archivo, generalmente un JAR, que se implementa en un repositorio Maven.

Una compilación de Maven produce uno o más artefactos, como un JAR compilado y un JAR de "fuentes".

Cada artefacto tiene una ID de grupo (generalmente un nombre de dominio invertido, como com.example.foo), una ID de artefacto (solo un nombre) y una cadena de versión. Los tres juntos identifican de forma única el artefacto.

Las dependencias de un proyecto se especifican como artefactos.

Stuart Sierra
fuente
55
¿Es un artefacto básicamente un archivo JAR? Entonces, el archivo jar de tiempo joda puede llamarse un artefacto joda, el jar hibernate puede llamarse artefacto hibernate, etc.
David Blaine
47
Piensa en lo que realmente es un artefacto. Los egipcios crearon maravillosos artefactos como la cerámica. Pero, si estuvieras sosteniendo un cuenco egipcio en tu mano, no te referirías a él como un "artefacto" a menos que estuvieras discutiendo el hecho de que ES un artefacto (hecho). Te referirías a él como un tazón. Comieron fuera del tazón. No comieron del artefacto.
cbmeeks
3
Creo que a lo que @cbmeeks se refiere es que "artefacto" no es un nombre para una "cosa", es un papel en el proceso de compilación. Cualquier cosa puede clasificarse como un "artefacto" si Maven lo produce y se le dan coordenadas especiales de Maven para identificarlo.
Garret Wilson
Si tengo algo llamado "com.example: mylibrary: 1.0.0" (groupId: artifactId: version), que consta de un jar, un pom y un jar de origen, cuál de los siguientes es un artefacto: 1. cada archivo (pom, jar, jar fuente) es un artefacto separado; 2. el conjunto de archivos que comparten el mismo (groupId: artifactId: version) forma un solo artefacto; 3. algo más?
Laurence Gonsalves
No explica cómo obtener el groupid y el artifactid con el nombre de la clase. Voto a favor
Philip Rego
114

En términos generales de software, un " artefacto " es algo producido por el proceso de desarrollo de software, ya sea documentación relacionada con el software o un archivo ejecutable.

En la terminología de Maven, el artefacto es la salida resultante de la acumulación experto, generalmente una jaro wararchivo ejecutable o de otro tipo. Los artefactos en maven se identifican mediante un sistema de coordenadas de groupId, artifactId y version. Maven usa el groupId, artifactIdy versionpara identificar dependencias (generalmente otros archivos jar) necesarias para construir y ejecutar su código.

Ken Liu
fuente
Mi libro dice que "el artefacto central de esta aplicación en línea será una clase Java llamada Usuario, que" "¿Es esto el artefacto que mencionó?
David Blaine
@davidblaine: no exactamente, esa oración usa la palabra en un sentido más general.
Ken Liu
27

Sé que este es un hilo antiguo pero quería agregar algunos matices.

Hay artefactos de Maven, artefactos de administrador de repositorio y luego están los de Maven Artifact.

Un artefacto de Maven es tal como dicen otros comentaristas / respondedores: es algo que se escupió al construir un proyecto de Maven. Eso podría ser un .jararchivo, o un .wararchivo, o un .ziparchivo, o un .dll, o lo que sea.

Un artefacto de administrador de repositorio es algo que, bueno, es administrado por un administrador de repositorio. Un administrador de repositorios es básicamente un servicio de nombres de alto rendimiento para ejecutables de software y bibliotecas. A un administrador de repositorio no le importa de dónde provienen sus artefactos (tal vez provienen de una compilación Maven, o un archivo local, o una compilación Ant, o una compilación manual ...).

Un Maven Artifactes una clase Java que representa el tipo de "nombre" que un administrador de repositorio desreferencia en un artefacto de administrador de repositorio. Cuando se utiliza en este sentido, una Artifactes sólo un nombre glorificado compuesto de partes tales como groupId, artifactId, version, scope, classifiery así sucesivamente.

Para poner todo junto:

  • Su proyecto Maven probablemente depende de varios Artifacts a través de sus <dependency>elementos.
  • Maven interactúa con un administrador de repositorios para resolver esos Artifactcorreos electrónicos al ordenarle al administrador del repositorio que le envíe algunos artefactos del administrador de repositorios que corresponden a los correos Artifactelectrónicos internos .
  • Finalmente, después de la resolución, Maven construye su proyecto y produce un artefacto Maven. Puede optar por "convertir esto en" un artefacto de administrador de repositorios, a su vez, utilizando cualquier herramienta que desee, enviándolo al administrador de repositorios con suficiente información de coordinación que otras personas puedan encontrar cuando lo soliciten al administrador de repositorios.

Espero que ayude.

Laird Nelson
fuente
+1 para nueva información sobre hilo antiguo gracias! Arregle el error tipográfico "repositorio", aunque a veces caca podría ser la palabra correcta jaja ... todos dicen que el "artefacto" es el frasco real, podría ser útil para actualizar su respuesta para señalar que cuando se usa, por ejemplo mvn install, las personas son tratando de averiguar qué poner en esa entrada. Entonces, el nombre completo del frasco es para qué ingresar -DartifactId=YOUR_ARTIFACT_ID, ¿es así? El nombre completo del archivo jar con versión y .jar? Parece ser lo que estás diciendo, pero ayudaría a algunos a ser realmente explícitos. Otras respuestas se acercan a esto, pero pensé que la tuya era la mejor.
JimLohse
23

Maven organiza su construcción en proyectos.

Un artifactin maven es un recurso generado por un proyecto maven. Cada proyecto de Maven puede tener exactamente uno artifactcomo jar, war, ear, etc.
El archivo de configuración del proyecto "pom.xml"describe cómo se construye el artefacto, cómo se ejecutan las pruebas unitarias, etc. Comúnmente, una construcción de proyecto de software con Maven consta de muchos proyectos de Maven que construyen artefactos (por ejemplo, jarras ) que constituyen el producto.
P.ej

Root-Project   // produces no artifact, simply triggers the build of the other projects
  App-Project  // The application, that uses the libraries
  Lib1-Project // A project that creates a library (jar)
  Lib2-Project // Another library
  Doc-Project  // A project that generates the user documentation from some resources

Los artefactos de Maven no se limitan a los recursos de Java. Puede generar cualquier recurso que necesite. Por ejemplo, documentación, sitio del proyecto, archivos zip, bibliotecas nativas, etc.

Cada proyecto Maven tiene un identificador único que consiste en [groupId, artifactId, version]. Cuando un proyecto maven requiere recursos de otro proyecto, se configura una dependencia en la que se pom.xmlutiliza el identificador mencionado anteriormente. Maven resuelve automáticamente las dependencias cuando se activa una compilación. Los artefactos de los proyectos requeridos se cargan desde el local repository, que es un directorio simple en el hogar de su usuario, o desde otros repositorios (remotos) especificados en usted pom.xml.

Marc-Christian Schulze
fuente
19

P. ¿Qué es artefacto en maven?
RESPUESTA: ARTIFACT es un JAR (WAR o EAR), pero también podría ser otra cosa. Cada artefacto tiene,

  • una ID de grupo (como com.your.package),
  • una identificación de artefacto (solo un nombre) y
  • una cadena de versión
    Los tres juntos identifican de forma única el artefacto.

P. ¿Por qué los necesita Maven?
Respuesta: Maven se utiliza para que estén disponibles para nuestras aplicaciones.

VdeX
fuente
Buena respuesta, como comenté en otra respuesta , -DartifactId=YOUR_ARTIFACT_IDexplique en qué se supone que debemos escribir al ejecutar mvn install, solo una sugerencia :)
JimLohse
@JimLohse gracias, por favor siéntase libre de agregar con el título "editar" :)
VdeX
9

Un artefacto es un JAR o algo que almacena en un repositorio. Maven los saca y construye tu código.

duffymo
fuente
8

Para maven, el proceso de construcción se organiza como un conjunto de artefactos. Los artefactos incluyen:

  1. Los complementos que componen el propio Maven.
  2. Dependencias de las que depende su código.
  3. Cualquier cosa que produzca tu construcción que, a su vez, pueda ser consumida por otra cosa.

Los artefactos viven en repositorios.

bmargulies
fuente
4

usualmente hablamos de Maven Terminology sobre Id. de grupo, Id. de artefacto y versión de instantánea

Id. De grupo: identidad del grupo del proyecto Id. De artefacto: identidad del proyecto Versión de instantánea: la versión utilizada por el proyecto.

Artifact no es más que un archivo resultante como Jar, War, Ear ...

simplemente dice que los artefactos no son más que paquetes.

Venky Vungarala
fuente