2010-03-21 13 views
247

Was ist ein Artefakt und warum benötigt Maven es?Was ist ein Maven-Artefakt?

+3

Mehr über Maven Konzepte hier: http://tshikatshikaaa.blogspot.nl/2012/05/introduction-to-maven-concepts-crash.html – JVerstry

+1

btw Sie können das offizielle Apache Maven Glossar für die Definition eines [sehen] * Artefakt *] (http://maven.apache.org/glossary.html#Artifact) – informatik01

+1

Keine dieser Antworten ist vollständig. Sie können dies nur durch [Durchsuchen eines Maven-Repositorys] (http://search.maven.org/#browse|842264825) sehen. Ein Artefakt ist offensichtlich ein * Verzeichnis *, das einige Einschränkungen erfüllt, z. Es muss eine Datei namens 'maven-metadata.xml' und eine Datei namens' - .pom' enthalten. Beide dieser Dateien haben ein undokumentiertes Schema und Semantik. – jameshfisher

Antwort

235

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. ein kompiliertes JAR und ein "Quellen" -AR.

Jedes Artefakt hat eine Gruppen-ID (normalerweise ein umgekehrter Domänenname wie com.example.foo), eine Artefakt-ID (nur ein Name) und eine Versionszeichenfolge. Die drei zusammen identifizieren das Artefakt eindeutig.

Die Abhängigkeiten eines Projekts werden als Artefakte angegeben.

+4

Ist ein Artefakt im Grunde eine JAR-Datei? Also, die Joda-Zeit-JAR-Datei kann ein Joda-Artefakt genannt werden, kann Hibernate Jar Hibernate Artefakt usw. genannt werden? –

+2

@davidblaine: Ich würde es nicht so sagen. Die Build-Prozedur generiert Artefakte. Dies kann eine Jar-Datei sein, ja. Die JAR-Datei ist dann ein Build-Artefakt. Aber du würdest nie über ein z. "Joda Artefakt" (es sei denn, Sie sind in eine Diskussion über das Joda-Build-Verfahren). Der Wortlaut ist eher "joda jar". Wenn Sie sich in einem Projekt auf Joda beziehen, sprechen Sie eher von einer "Joda-Abhängigkeit". – sorencito

+35

Denke darüber nach, was ein Artefakt wirklich ist. Die Ägypter erschufen wunderbare Artefakte wie Keramik. Aber, wenn Sie eine ägyptische Schüssel in Ihrer Hand hielten, würden Sie es nicht als ein "Artefakt" bezeichnen, es sei denn, Sie diskutierten die Tatsache, dass es ein Artefakt (Tatsache) ist. Sie würden es als eine Schüssel bezeichnen. Sie aßen aus der Schüssel. Sie haben nicht aus dem Artefakt gegessen. – cbmeeks

8

Ein Artefakt ist ein JAR oder etwas, das Sie in einem Repository speichern. Maven holt sie raus und baut deinen Code auf.

7

Um zu sehen, ist der Build-Prozess als eine Reihe von Artefakten angeordnet. Zu den Artefakten gehören:

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

Artefakte leben in Repositories.

84

Im Allgemeinen Software Begriffe, eine "artifact" ist etwas, das durch den Software-Entwicklungsprozess, sei es Software-Dokumentation oder eine ausführbare Datei.

In der Terminologie von Maven ist das Artefakt die resultierende Ausgabe des Maven Builds, in der Regel eine jar oder war oder andere ausführbare Datei. Artefakte in maven werden durch ein Koordinatensystem von groupId, artifactId und version identifiziert. Maven verwendet die groupId, artifactId und version, um Abhängigkeiten (in der Regel andere JAR-Dateien) zu identifizieren, die zum Erstellen und Ausführen des Codes benötigt werden.

+0

Mein Buch sagt "das Kernartefakt dieser Online-Anwendung wird eine Java-Klasse namens User sein, die wird ..." Ist das das gleiche wie das Artefakt, das du erwähnt hast? –

+0

@davidblaine - nicht genau, dieser Satz verwendet das Wort einen allgemeineren Sinn. –

21

Maven organisiert seine Projekte.

Ein artifact in Maven ist eine Ressource, die von einem Maven-Projekt generiert wird. Jedes Maven-Projekt kann genau eine artifact wie eine jar, war, ear, etc. haben. Die Konfigurationsdatei des Projekts "pom.xml" beschreibt, wie das Artefakt erstellt wird, wie Unit Tests ausgeführt werden, etc. Üblicherweise besteht ein mit maven erstelltes Software-Projekt aus vielen Maven-Projekten das baut Artefakte (zB Gläser) auf, die das Produkt ausmachen.
Zum Beispiel

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 benötigte Ressource generieren. Z.B. Dokumentation, Projekt-Site, Zip-Archive, Native-Libraries etc.

Jedes Maven-Projekt hat eine eindeutige Kennung, bestehend aus [groupId, artifactId, version]. Wenn ein Maven-Projekt Ressourcen eines anderen Projekts benötigt, wird eine Abhängigkeit in seiner pom.xml mit dem oben genannten Bezeichner konfiguriert. Maven löst dann automatisch die Abhängigkeiten auf, wenn ein Build ausgelöst wird.Die Artefakte der erforderlichen Projekte werden dann entweder vom lokalen repository geladen, einem einfachen Verzeichnis im Heim Ihres Benutzers, oder von anderen (Remote-) Repositorys, die in Ihnen pom.xml angegeben sind.

20

Ich weiß, das ist ein uralter Thread, aber ich wollte ein paar Nuancen hinzufügen.

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

Ein Maven-Artefakt ist genau so, wie andere Kommentatoren/Responder sagen: Es ist eine Sache, die durch den Aufbau eines Maven-Projekts ausgespuckt wird. Das könnte eine .jar Datei sein, oder eine .war Datei oder eine .zip Datei, oder eine .dll, oder was hast du.

Ein Repository-Manager-Artefakt ist eine Sache, die von einem Repository-Manager verwaltet wird. Ein Repository-Manager ist im Grunde ein hochperformanter Namensdienst für ausführbare Software und Bibliotheken. Ein Repository-Manager kümmert sich nicht darum, woher seine Artefakte kommen (vielleicht stammten sie von einem Maven-Build oder einer lokalen Datei oder einem Ant-Build oder einer Hand-Kompilierung ...).

Ein Maven Artifact ist eine Java-Klasse, die die Art von "Name" darstellt, die von einem Repository-Manager in ein Repository-Manager-Artefakt dereferenziert wird. In diesem Sinne ist ein Artifact nur ein verklärter Name, der aus Teilen wie groupId, artifactId, version, scope, classifier und so weiter besteht.

Um es alle zusammen:

  • Ihr Maven Projekt hängt wahrscheinlich von mehreren Artifact s durch seine <dependency> Elemente.
  • Maven interagiert mit einem Repository-Manager, um diese Artifact s in Dateien aufzulösen, indem der Repository-Manager angewiesen wird, ihm einige Repository-Manager-Artefakte zu senden, die dem internen Artifact entsprechen.
  • Schließlich, nach der Auflösung, Maven baut Ihr Projekt und produziert ein Maven-Artefakt. Sie können sich dazu entschließen, ein Repository-Manager-Artefakt daraus zu machen, indem Sie wiederum das gewünschte Tool verwenden und es an den Repository-Manager mit genügend koordinierenden Informationen senden, so dass andere es finden können, wenn sie den Repository-Manager nach dem fragen .

Hoffe, dass hilft.

+0

+1 für neue Informationen über alten Thread Danke! Fix Tippfehler "repoository" obwohl manchmal poo könnte das richtige Wort sein haha ​​... jeder sagt, das "Artefakt" ist das eigentliche Glas, könnte hilfreich sein, um Ihre Antwort zu aktualisieren, um darauf hinzuweisen, dass, wenn Sie zum Beispiel 'mvn installieren ', Leute versuchen herauszufinden, was sie in diesen Eintrag schreiben sollen.Also ist der vollständige Name des Jars, was für '-DartifactId = YOUR_ARTIFACT_ID' einzugeben ist, ist das richtig? Der vollständige JAR-Dateiname mit Version und .jar? Scheint zu sein, was Sie sagen, aber würde einigen helfen, wirklich ausdrücklich zu sein. Andere Antworten kommen dem nahe, aber ich dachte, dein bestes. – JimLohse

3

in der Regel sprechen wir Maven Terminologie über Gruppen-ID, Artifact Id und Snapshot-Version

Gruppe Id: Identität der Gruppe des Projekts Artifact ID: Identität des Projekts Snapshot-Version: die Version des Projekts verwendet .

Artifact ist nichts anderes als einige resultierende Datei wie Jar, Krieg, Ohr ....

sagt einfach Artefakte sind nichts anderes als Pakete.

12

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

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

Frage: Warum Maven sie brauchen.
Antwort: Maven wird verwendet, um sie für unsere Anwendungen verfügbar zu machen.

einfache Antwort auf eine einfache Frage :)

+0

Schöne Antwort, wie ich [andere Antwort] (http://stackoverflow.com/a/20984861/3255525) kommentierte, machen Sie es explizit, was wir in '-DartifactId = YOUR_ARTIFACT_ID' eingeben sollen, wenn Sie mvn install ausführen ein Vorschlag :) – JimLohse

+0

@JimLohse danke, bitte zögern Sie nicht mit "bearbeiten" Titel hinzufügen :) – VedX

0

Artefakte werden in Artefakt-Repositories untergebracht. Diese Repositories enthalten nicht nur die Artefakte, sondern organisieren auch die Artefakte für den einfachen Zugriff. Dies umfasst auch die Organisation nach Version, so dass Sie eine bestimmte Version eines Artefakts anfordern können, anstatt eine ältere (oder möglicherweise neuere) Version desselben Artefakts.

ist ein Artefakt in der Regel in Form von zwei Dateien dargestellt:

  • der eigentlichen Inhalt, wie eine JAR
  • Eine Metadatendatei, mit der JAR gepaart, die Informationen über „transitive Abhängigkeiten (Dh die anderen Artefakte, von denen dieses Artefakt abhängt)

Maven wird verwendet, um sie für unsere Anwendungen verfügbar zu machen.