Qu'est-ce qu'un artefact Maven?

342

Qu'est-ce qu'un artefact et pourquoi Maven en a-t-il besoin?

Maxim Veksler
la source
3
Plus d'informations sur les concepts Maven ici: tshikatshikaaa.blogspot.nl/2012/05/…
Jérôme Verstrynge
1
btw Vous pouvez voir le glossaire officiel d'Apache Maven pour la définition d'un artefact
informatik01
1
Aucune de ces réponses n'est complète. Vous pouvez le voir simplement en parcourant un référentiel Maven . Un artefact est apparemment un répertoire satisfaisant à certaines contraintes, par exemple il doit contenir un fichier appelé maven-metadata.xmlet un fichier appelé <artifactId>-<version>.pom. Ces deux fichiers ont un schéma et une sémantique non documentés.
jameshfisher

Réponses:

303

Un artefact est un fichier, généralement un fichier JAR, qui est déployé dans un référentiel Maven.

Une build Maven produit un ou plusieurs artefacts, tels qu'un JAR compilé et un JAR "sources".

Chaque artefact a un ID de groupe (généralement un nom de domaine inversé, comme com.example.foo), un ID d'artefact (juste un nom) et une chaîne de version. Les trois ensemble identifient de façon unique l'artefact.

Les dépendances d'un projet sont spécifiées comme des artefacts.

Stuart Sierra
la source
5
Un artefact est-il essentiellement un fichier JAR? Ainsi, le fichier joda time jar peut être appelé un artefact joda, le pot hibernate peut être appelé artefact hibernate, etc.?
david blaine
47
Pensez à ce qu'est réellement un artefact. Les Égyptiens ont créé de merveilleux objets tels que la poterie. Mais, si vous teniez un bol égyptien dans votre main, vous ne vous y référeriez pas comme un "artefact" à moins que vous ne discutiez du fait qu'il EST un artefact (fait). Vous le qualifieriez de bol. Ils ont mangé hors du bol. Ils n'ont pas mangé de l'artefact.
cbmeeks
3
Je pense que @cbmeeks veut dire que "artefact" n'est pas un nom pour une "chose", c'est un rôle dans le processus de construction. Tout ce qui peut être classé comme un "artefact" si Maven le produit et il reçoit des coordonnées Maven spéciales pour l'identifier.
Garret Wilson
Si j'ai quelque chose appelé "com.example: mylibrary: 1.0.0" (groupId: artifactId: version), cela consiste en un pot, un pom et un pot source, lequel des éléments suivants est un artefact: 1. chaque fichier (pom, pot, pot source) est un artefact distinct; 2. l'ensemble de fichiers qui partagent le même (groupId: artifactId: version) constitue un seul artefact; 3. autre chose?
Laurence Gonsalves
Vous n'expliquez pas comment obtenir le groupid et l'artefactid en fonction du nom de la classe. Downvote
Philip Rego
114

En termes généraux de logiciel, un " artefact " est quelque chose produit par le processus de développement logiciel, qu'il s'agisse d'une documentation liée au logiciel ou d'un fichier exécutable.

Dans la terminologie Maven, l'artefact est la sortie résultante de la construction maven, généralement un jarou un warautre fichier exécutable. Les artefacts dans maven sont identifiés par un système de coordonnées groupId, artifactId et version. Maven utilise groupId, artifactIdet versiond'identifier les dépendances (généralement d' autres fichiers jar) nécessaires pour construire et exécuter votre code.

Ken Liu
la source
Mon livre dit "l'artefact principal de cette application en ligne sera une classe Java nommée User, qui" ... Est-ce la même chose que l'artefact que vous avez mentionné?
david blaine
@davidblaine - pas exactement, cette phrase utilise le mot dans un sens plus général.
Ken Liu
27

Je sais que c'est un fil ancien mais je voulais ajouter quelques nuances.

Il y a des artefacts Maven, des artefacts du gestionnaire de référentiel et puis il y a des Maven Artifact.

Un artefact Maven est tout comme le disent d'autres commentateurs / intervenants: c'est une chose qui est crachée en construisant un projet Maven. Cela pourrait être un .jarfichier, ou un .warfichier, ou un .zipfichier, ou un .dll, ou ce que vous avez.

Un artefact du gestionnaire de référentiel est une chose qui est, bien, gérée par un gestionnaire de référentiel. Un gestionnaire de référentiel est essentiellement un service de nommage très performant pour les exécutables logiciels et les bibliothèques. Un gestionnaire de référentiel ne se soucie pas d'où viennent ses artefacts (peut-être qu'ils proviennent d'une build Maven, ou d'un fichier local, ou d'une build Ant, ou d'une compilation manuelle ...).

Un Maven Artifactest une classe Java qui représente le type de "nom" qui est déréférencé par un gestionnaire de référentiel en un artefact du gestionnaire de référentiel. Lorsqu'ils sont utilisés dans ce sens, un Artifactest juste un nom glorifié composé de pièces telles que groupId, artifactId, version, scope, classifieret ainsi de suite.

Pour tout rassembler:

  • Votre projet Maven dépend probablement de plusieurs Artifacts par le biais de ses <dependency>éléments.
  • Maven interagit avec un gestionnaire de référentiel pour résoudre ces Artifacts en fichiers en demandant au gestionnaire de référentiel de lui envoyer des artefacts du gestionnaire de référentiel qui correspondent aux Artifacts internes .
  • Enfin, après la résolution, Maven construit votre projet et produit un artefact Maven. Vous pouvez choisir de "transformer cela en" un artefact du gestionnaire de référentiel en utilisant, à son tour, l'outil de votre choix, en l'envoyant au gestionnaire de référentiel avec suffisamment d'informations de coordination pour que d'autres personnes puissent le trouver quand elles le demandent au gestionnaire de référentiel.

J'espère que cela pourra aider.

Laird Nelson
la source
+1 pour de nouvelles informations sur l'ancien fil merci! Correction de la faute de frappe "repoository" bien que parfois caca soit le bon mot haha ​​... tout le monde dit que l '"artefact" est le pot réel, peut être utile de mettre à jour votre réponse pour souligner que lors de l'utilisation, par exemple mvn install, les gens sont essayer de comprendre quoi mettre dans cette entrée. Donc, le nom complet du pot est pour quoi entrer -DartifactId=YOUR_ARTIFACT_ID, n'est-ce pas? Le nom complet du fichier jar avec version et .jar? Semble être ce que vous dites mais aiderait certains à être vraiment explicites. D'autres réponses se rapprochent de cela, mais je pensais que la vôtre était la meilleure.
JimLohse
23

Maven organise ses projets de build in.

Un artifactin maven est une ressource générée par un projet maven. Chaque projet maven peut en avoir un exactement artifactcomme un jar, war, ear, etc.
Le fichier de configuration du projet "pom.xml"décrit comment l'artefact est construit, comment les tests unitaires sont exécutés, etc. ) qui constituent le produit.
Par exemple

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

Les artefacts Maven ne se limitent pas aux ressources java. Vous pouvez générer toutes les ressources dont vous avez besoin. Par exemple, documentation, site de projet, archives zip, bibliothèques natives, etc.

Chaque projet maven a un identifiant unique composé de [groupId, artifactId, version]. Lorsqu'un projet maven nécessite des ressources d'un autre projet, une dépendance est configurée dans celui-ci en pom.xmlutilisant l'identifiant susmentionné. Maven résout ensuite automatiquement les dépendances lorsqu'une génération est déclenchée. Les artefacts des projets requis sont ensuite chargés soit à partir du local repository, qui est un simple répertoire dans la maison de votre utilisateur, soit à partir d'autres référentiels (distants) spécifiés en vous pom.xml.

Marc-Christian Schulze
la source
19

Q. Qu'est-ce que l'artefact dans Maven?
ANS: ARTIFACT est un JAR, (WAR ou EAR), mais cela pourrait aussi être autre chose. Chaque artefact a,

  • un identifiant de groupe (comme com.your.package),
  • un ID d'artefact (juste un nom), et
  • une chaîne de version.
    Les trois ensemble identifient de façon unique l'artefact.

Q. Pourquoi Maven en a-t-il besoin?
Rép: Maven est utilisé pour les rendre disponibles pour nos applications.

VdeX
la source
Belle réponse, comme j'ai commenté une autre réponse , -DartifactId=YOUR_ARTIFACT_IDexpliquez ce que nous sommes censés saisir lors de l'exécution de l'installation de mvn, juste une suggestion :)
JimLohse
@JimLohse merci, n'hésitez pas à ajouter avec le titre "edit" :)
VdeX
9

Un artefact est un JAR ou quelque chose que vous stockez dans un référentiel. Maven les récupère et construit votre code.

duffymo
la source
8

Pour maven, le processus de construction est organisé comme un ensemble d'artefacts. Les artefacts comprennent:

  1. Les plugins qui composent Maven lui-même.
  2. Dépendances dont dépend votre code.
  3. Tout ce que votre build produit peut à son tour être consommé par autre chose.

Les artefacts vivent dans des référentiels.

bmargulies
la source
4

généralement, nous parlons de la terminologie Maven à propos de l'ID de groupe, de l'ID d'artefact et de la version de l'instantané

Group Id: identité du groupe du projet Artifact Id: identité du projet Snapshot version: la version utilisée par le projet.

L'artefact n'est rien d'autre qu'un fichier résultant comme Jar, War, Ear ....

dit simplement que les artefacts ne sont que des packages.

Venky Vungarala
la source