Was ist ein Maven-Artefakt?

342

Was ist ein Artefakt und warum braucht Maven es?

Maxim Veksler
quelle
3
Mehr über Maven-Konzepte hier: tshikatshikaaa.blogspot.nl/2012/05/…
Jérôme Verstrynge
1
Übrigens können Sie das offizielle Apache Maven Glossar für die Definition eines Artefakts sehen
informatik01
1
Keine dieser Antworten ist vollständig. Sie können dies sehen, indem Sie ein Maven-Repository durchsuchen . Ein Artefakt ist anscheinend ein Verzeichnis , das einige Einschränkungen erfüllt, z. B. muss es eine aufgerufene Datei maven-metadata.xmlund eine aufgerufene Datei enthalten <artifactId>-<version>.pom. Beide Dateien haben ein undokumentiertes Schema und eine Semantik.
Jameshfisher

Antworten:

303

Ein Artefakt ist eine Datei, normalerweise eine JAR, die in einem Maven-Repository bereitgestellt wird.

Ein Maven-Build erzeugt ein oder mehrere Artefakte, z. B. eine kompilierte JAR und eine "Quellen" -JAR.

Jedes Artefakt hat eine Gruppen-ID (normalerweise einen umgekehrten Domänennamen wie com.example.foo), eine Artefakt-ID (nur einen Namen) und eine Versionszeichenfolge. Die drei zusammen identifizieren das Artefakt eindeutig.

Die Abhängigkeiten eines Projekts werden als Artefakte angegeben.

Stuart Sierra
quelle
5
Ist ein Artefakt im Grunde eine JAR-Datei? Die joda time jar-Datei kann also als joda-Artefakt bezeichnet werden, der Ruhezustand kann als Ruhezustand-Artefakt usw. bezeichnet werden?
David Blaine
47
Überlegen Sie, was ein Artefakt wirklich ist. Die Ägypter schufen wunderbare Artefakte wie Keramik. Aber wenn Sie eine ägyptische Schale in der Hand halten würden, würden Sie sie nicht als "Artefakt" bezeichnen, es sei denn, Sie diskutieren die Tatsache, dass es sich um ein Artefakt handelt (Tatsache). Sie würden es als Schüssel bezeichnen. Sie aßen aus der Schüssel. Sie haben nicht aus dem Artefakt gegessen.
cbmeeks
3
Ich denke, bei @cbmeeks geht es darum, dass "Artefakt" kein Name für ein "Ding" ist, sondern eine Rolle im Erstellungsprozess. Alles kann als "Artefakt" klassifiziert werden, wenn Maven es produziert und ihm spezielle Maven- Koordinaten zur Identifizierung gegeben werden.
Garret Wilson
Wenn ich etwas mit dem Namen "com.example: mylibrary: 1.0.0" (groupId: arifactId: version) habe, besteht es aus einem jar, einem pom und einem source jar, wobei es sich bei dem folgenden um ein Artefakt handelt: 1. jede Datei (pom, jar, source jar) ist ein separates Artefakt; 2. Die Dateien, die dieselbe Funktion haben (groupId: artefaktId: version), bilden ein einzelnes Artefakt. 3. noch etwas?
Laurence Gonsalves
Sie erklären nicht, wie Sie die Gruppen- und Artefakt-ID unter Angabe des Klassennamens erhalten. Downvote
Philip Rego
114

Im Allgemeinen ist ein " Artefakt " etwas, das durch den Softwareentwicklungsprozess erzeugt wird, sei es eine softwarebezogene Dokumentation oder eine ausführbare Datei.

In Maven Terminologie ist das Artefakt der resultierende Ausgang des maven build, im Allgemeinen eine jaroder waroder andere ausführbare Datei. Artefakte in Maven werden durch ein Koordinatensystem aus Gruppen-ID, Artefakt-ID und Version identifiziert. Maven verwendet das groupId, artifactIdund version, um Abhängigkeiten (normalerweise andere JAR-Dateien) zu identifizieren, die zum Erstellen und Ausführen Ihres Codes erforderlich sind.

Ken Liu
quelle
In meinem Buch heißt es: "Das Kernartefakt dieser Online-Anwendung wird eine Java-Klasse namens User sein, die" ... Entspricht dies dem von Ihnen erwähnten Artefakt?
David Blaine
@davidblaine - nicht genau, dieser Satz verwendet das Wort einen allgemeineren Sinn.
Ken Liu
27

Ich weiß, dass dies ein alter Thread ist, aber ich wollte ein paar Nuancen hinzufügen.

Es gibt Maven-Artefakte, Repository-Manager-Artefakte und dann Maven-Artefakte Artifact.

Ein Maven-Artefakt ist genau so, wie andere Kommentatoren / Responder sagen: Es ist eine Sache, die durch das Erstellen eines Maven-Projekts ausgespuckt wird. Das könnte eine .jarDatei sein oder eine .warDatei oder eine .zipDatei oder eine .dlloder was haben Sie.

Ein Repository-Manager-Artefakt wird von einem Repository-Manager verwaltet. Ein Repository-Manager ist im Grunde ein leistungsstarker Namensdienst für ausführbare Software-Dateien und Bibliotheken. Einem Repository-Manager ist es egal, woher seine Artefakte stammen (möglicherweise stammen sie aus einem Maven-Build, einer lokalen Datei, einem Ant-Build oder einer manuellen Kompilierung ...).

Ein Maven Artifactist eine Java-Klasse, die die Art von "Name" darstellt, der von einem Repository-Manager in ein Repository-Manager-Artefakt dereferenziert wird. Wenn in diesem Sinne verwendet wird , eine Artifactist nur ein besserer Name solcher Teile wie die aus groupId, artifactId, version, scope, classifierund so weiter.

Um alles zusammenzufassen:

  • Ihr Maven Projekt hängt wahrscheinlich von mehreren Artifacts durch seine <dependency>Elemente.
  • Maven interagiert mit einem Repository-Manager, um diese Artifacts in Dateien aufzulösen, indem er den Repository-Manager anweist, ihm einige Repository-Manager-Artefakte zu senden, die den internen Artifacts entsprechen.
  • Nach der Auflösung erstellt Maven schließlich Ihr Projekt und erstellt ein Maven-Artefakt. Sie können sich dafür entscheiden, dies in ein Repository-Manager-Artefakt umzuwandeln, indem Sie es wiederum mit einem beliebigen Tool an den Repository-Manager senden, das über genügend koordinierende Informationen verfügt, die andere Personen finden können, wenn sie den Repository-Manager danach fragen.

Ich hoffe, das hilft.

Laird Nelson
quelle
+1 für neue Infos zum alten Thread danke! Behebung des Tippfehlers "repoository", obwohl poo manchmal das richtige Wort ist, haha ​​... jeder sagt, das "Artefakt" sei das eigentliche Glas, könnte hilfreich sein, um Ihre Antwort zu aktualisieren und darauf hinzuweisen, dass es sich bei der Verwendung von beispielsweise um mvn installPersonen handelt versuchen herauszufinden, was in diesen Eintrag zu setzen. Der vollständige Name des Glases ist also, wofür Sie eingeben -DartifactId=YOUR_ARTIFACT_IDmüssen, stimmt das? Der vollständige JAR-Dateiname mit Version und .jar? Scheint das zu sein, was Sie sagen, würde aber einigen helfen, wirklich explizit zu sein. Andere Antworten kommen dem nahe, aber ich fand deine am besten.
JimLohse
23

Maven organisiert seine eingebauten Projekte.

Ein artifactIn-Maven ist eine Ressource, die von einem Maven-Projekt generiert wird. Jedes Maven-Projekt kann genau eines artifactwie ein jar, war, earusw. haben.
Die Konfigurationsdatei des Projekts "pom.xml"beschreibt, wie das Artefakt erstellt wird, wie Komponententests ausgeführt werden usw. In der Regel besteht ein mit Maven erstelltes Softwareprojekt aus vielen Maven-Projekten, die Artefakte erstellen (z. B. Gläser) ) die das Produkt ausmachen.
Z.B

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

Maven-Artefakte sind nicht auf Java-Ressourcen beschränkt. Sie können jede Ressource generieren, die Sie benötigen. ZB Dokumentation, Projekt-Site, Zip-Archive, native Bibliotheken usw.

Jedes Maven-Projekt hat eine eindeutige Kennung aus [groupId, artifactId, version]. Wenn für ein Maven-Projekt Ressourcen eines anderen Projekts erforderlich sind, wird eine Abhängigkeit unter pom.xmlVerwendung der oben genannten Kennung konfiguriert . Maven löst dann automatisch die Abhängigkeiten auf, wenn ein Build ausgelöst wird. Die Artefakte der erforderlichen Projekte werden dann entweder aus dem lokalen repositoryVerzeichnis geladen , bei dem es sich um ein einfaches Verzeichnis bei Ihrem Benutzer handelt, oder aus anderen (Remote-) Repositorys, die in Ihnen angegeben sind pom.xml.

Marc-Christian Schulze
quelle
19

Frage: Was ist Artefakt in Maven?
ANS: ARTIFACT ist ein JAR (WAR oder EAR), aber es könnte auch etwas anderes sein. Jedes Artefakt hat,

  • eine Gruppen-ID (wie com.your.package),
  • eine Artefakt-ID (nur ein Name) und
  • eine Versionszeichenfolge.
    Die drei zusammen identifizieren das Artefakt eindeutig.

Q. Warum braucht Maven sie?
Antwort: Maven wird verwendet, um sie für unsere Anwendungen verfügbar zu machen.

VdeX
quelle
Schöne Antwort, wie ich auf andere Antwort kommentiert habe , machen Sie deutlich, in was wir -DartifactId=YOUR_ARTIFACT_IDbeim Ausführen von mvn install eingeben sollen, nur ein Vorschlag :)
JimLohse
@ JimLohse danke, bitte zögern Sie nicht, mit "bearbeiten" Titel hinzuzufügen :)
VdeX
9

Ein Artefakt ist eine JAR oder etwas, das Sie in einem Repository speichern. Maven holt sie raus und erstellt Ihren Code.

Duffymo
quelle
8

Zum Erstellen wird der Erstellungsprozess als eine Reihe von Artefakten angeordnet. Zu den Artefakten gehören:

  1. Die Plugins, aus denen Maven selbst besteht.
  2. Abhängigkeiten, von denen Ihr Code abhängt.
  3. Alles, was Ihr Build produziert, kann wiederum von etwas anderem verbraucht werden.

Artefakte leben in Repositories.

bmargulies
quelle
4

Normalerweise sprechen wir über die Maven-Terminologie über Gruppen-ID, Artefakt-ID und Snapshot-Version

Gruppen-ID: Identität der Gruppe des Projekts Artefakt-ID: Identität des Projekts Snapshot-Version: Die vom Projekt verwendete Version.

Artefakt ist nichts anderes als eine resultierende Datei wie Jar, War, Ear ....

sagt einfach, dass Artefakte nichts als Pakete sind.

Venky Vungarala
quelle