2010-03-21 38 views
247

Cos'è un artefatto e perché Maven ne ha bisogno?Che cos'è un artefatto Maven?

+3

Ulteriori informazioni sui concetti di Maven qui: http://tshikatshikaaa.blogspot.nl/2012/05/introduction-to-maven-concepts-crash.html – JVerstry

+1

btw È possibile visualizzare il glossario ufficiale di Apache Maven per la definizione di [ * Artefatto *] (http://maven.apache.org/glossary.html#Artifact) – informatik01

+1

Nessuna di queste risposte è completa. Puoi vedere questo solo [sfogliando un repository Maven] (http://search.maven.org/#browse|842264825). Un artefatto è apparentemente una * directory * che soddisfa alcuni vincoli, ad es. deve contenere un file chiamato 'maven-metadata.xml' e un file chiamato' - .pom'. Entrambi questi file hanno uno schema e una semantica non documentati. – jameshfisher

risposta

235

Un artefatto è un file, in genere un JAR, che viene distribuito in un repository Maven.

Un build Maven produce uno o più artefatti, come un JAR compilato e un JAR "fonti".

Ogni elemento ha un ID di gruppo (in genere un nome di dominio invertito, come com.example.foo), un ID oggetto (solo un nome) e una stringa di versione. I tre insieme identificano univocamente l'artefatto.

Le dipendenze di un progetto sono specificate come artefatti.

+4

Fondamentalmente un artefatto è un file JAR? Quindi, il file jar joda time può essere chiamato un artefatto di joda, il vaso di ibernazione può essere chiamato artefatto di ibernazione ecc.? –

+2

@davidblaine: non direi così. La procedura di generazione genera artefatti. Questo può essere un file jar, sì. Il file jar è quindi un artefatto di build. Ma non parleresti mai di un es. "Artefatto di Joda" (a meno che non ci si occupi di una discussione sulla procedura di creazione di Joda). La dicitura è piuttosto "vaso di joda". Quando ci si riferisce a Joda in un progetto, si parla piuttosto di una "dipendenza da Joda". – sorencito

+35

Pensa a cosa sia veramente un artefatto. Gli egiziani hanno creato meravigliosi artefatti come la ceramica. Ma se tu avessi in mano una ciotola egiziana, non ti riferiresti ad essa come un "artefatto" a meno che tu non stia discutendo sul fatto che si tratta di un artefatto (fatto). Ti riferiresti come una ciotola. Hanno mangiato fuori dalla ciotola. Non hanno mangiato fuori dal manufatto. – cbmeeks

8

Un artefatto è un JAR o qualcosa che si archivia in un repository. Maven li tira fuori e costruisce il tuo codice.

7

Per fare ciò, il processo di compilazione è organizzato come un insieme di risorse. Gli artefatti includono:

  1. I plugin che costituiscono lo stesso Maven.
  2. Dipendenze da cui dipende il vostro codice.
  3. Tutto ciò che la tua build produce può, a sua volta, essere consumato da qualcos'altro.

Gli artefatti vivono nei repository.

84

In termini generali di software, uno "artifact" è qualcosa prodotto dal processo di sviluppo del software, che si tratti di documentazione relativa al software o di un file eseguibile.

Nella terminologia Maven, l'artefatto è l'output risultante della generazione di maven, in genere uno jar o war o altro file eseguibile. Gli artefatti di esperti sono identificati da un sistema di coordinate di groupId, artefatto e versione. Maven utilizza groupId, artifactId e version per identificare le dipendenze (in genere altri file jar) necessarie per creare ed eseguire il codice.

+0

Il mio libro dice "il principale artefatto di questa applicazione online sarà una classe Java chiamata User, che" ... è la stessa cosa che hai menzionato? –

+0

@davidblaine - non esattamente, quella frase usa la parola in un senso più generale. –

21

Maven organizza la sua costruzione in progetti.

Un codice fiscale artifact in Maven è una risorsa generata da un progetto Maven. Ogni progetto Maven può avere esattamente un artifact come un jar, war, ear, ecc
file di configurazione del progetto "pom.xml" descrive come il manufatto è costruito, come unit test vengono eseguiti, ecc Comunemente un progetto software costruire con Maven consiste di molte Maven-progetti che costruiscono artefatti (es. barattoli) che costituiscono il prodotto.
E.g.

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 

Gli artefatti di Maven non sono limitati alle risorse java. Puoi generare qualsiasi risorsa tu abbia bisogno. Per esempio. documentazione, sito del progetto, archivi zip, librerie native, ecc.

Ogni progetto di maven ha un identificatore univoco costituito da [groupId, artifactId, version]. Quando un progetto Maven richiede risorse di un altro progetto, viene configurata una dipendenza nel suo pom.xml utilizzando l'identificatore sopra menzionato. Maven risolve automaticamente le dipendenze quando viene avviata una build.Le risorse dei progetti richiesti vengono quindi caricate dal locale repository, che è una semplice directory nell'abitazione dell'utente o da altri repository (remoti) specificati in voi pom.xml.

20

So che questo è un thread antico ma volevo aggiungere qualche sfumatura.

Ci sono artefatti Maven, artefatti di repository manager e poi ci sono Maven Artifact s.

Un artefatto Maven è proprio come dicono altri commentatori/risponditori: è una cosa che si sparge costruendo un progetto Maven. Potrebbe trattarsi di un file .jar o di un file .war o di un file .zip o di uno .dll o di quello che hai.

Un artefatto del repository manager è una cosa che è, beh, gestita da un gestore di repository. Un gestore di repository è fondamentalmente un servizio di denominazione altamente performante per file eseguibili e librerie software. Un gestore di repository non si cura di dove provengano i suoi artefatti (forse provengono da una build di Maven, o da un file locale, o da una build di Ant o da una compilazione di mano ...).

A Maven Artifact è una classe Java che rappresenta il tipo di "nome" che viene sottoposto a dereferenziazione da un gestore di repository in un artefatto del gestore di repository. Se utilizzato in questo senso, un Artifact è solo un nome glorificato costituito da parti quali groupId, artifactId, version, scope, classifier e così via.

Per mettere tutto insieme:

  • Il vostro progetto Maven probabilmente dipende da diversi Artifact s attraverso i suoi <dependency> elementi.
  • Maven interagisce con un gestore di repository per risolvere i file Artifact nei file istruendo il gestore del repository per inviarlo alcune risorse utente del repository che corrispondono agli interni Artifact s.
  • Infine, dopo la risoluzione, Maven crea il tuo progetto e produce un artefatto Maven. Puoi scegliere di "trasformare questo in" un artefatto del repository usando, a turno, qualunque strumento tu voglia, inviandolo al gestore del repository con informazioni di coordinamento sufficienti che gli altri possono trovare quando loro chiedono al gestore del repository .

Spero che questo aiuti.

+0

+1 per nuove informazioni sul thread precedente, grazie! Correggere l'errore "repository" anche se a volte cacca potrebbe essere la parola giusta haha ​​... tutti dicono che "l'artefatto" è il vero barattolo, potrebbe essere utile aggiornare la tua risposta per far notare che quando si usa, ad esempio, 'mvn install ', le persone stanno cercando di capire cosa mettere in quella voce.Quindi il nome completo del barattolo è l'elemento da inserire per "-DartifactId = YOUR_ARTIFACT_ID", giusto? Il nome del file jar completo con versione e .jar? Sembra essere quello che stai dicendo, ma aiuterebbe qualcuno ad essere davvero esplicito. Altre risposte si avvicinano a questo ma ho pensato che fosse il tuo migliore. – JimLohse

3

solito stiamo parlando Maven Terminologia su ID gruppo, Artefatto Id e Snapshot versione

Gruppo Id: identità del gruppo di progetto Artefatto Id: l'identità della versione Snapshot progetto : la versione utilizzata dal progetto .

Artefatto non è altro che un po 'di file risultante come Jar, Guerra, Orecchio ....

dice semplicemente artefatti non sono altro che i pacchetti.

12

Q. Che cos'è Artifact in Maven?
ANS: ARTIFACT è un JAR, (WAR o EAR), ma potrebbe anche essere qualcos'altro.Ogni artefatto ha,

  • un ID di gruppo (come com.your.package),
  • un ID artefatto (solo un nome), e
  • una stringa di versione.
    I tre insieme identificano univocamente l'artefatto.

D.Perché Maven ha bisogno di loro.
Ans: Maven viene utilizzato per renderli disponibili per le nostre applicazioni.

semplice risposta a una semplice domanda :)

+0

Risposta piacevole, come ho commentato [altra risposta] (http://stackoverflow.com/a/20984861/3255525), rendere esplicito ciò che dovremmo digitare in '-DartifactId = YOUR_ARTIFACT_ID' quando si esegue mvn install, solo un suggerimento :) – JimLohse

+0

@JimLohse grazie, sentiti libero di aggiungere con il titolo "modifica" :) – VedX

0

artefatti sono alloggiati in repository artefatto. Questi repository non solo contengono gli artefatti, ma organizzano gli artefatti per un facile accesso. Ciò include l'organizzazione per versione, quindi è possibile richiedere una versione specifica di un artefatto e ottenerla, invece di una versione precedente (o possibilmente nuova) dello stesso artefatto.

Un artefatto è di solito rappresentato sotto forma di due file:

  • Il contenuto effettivo, come ad esempio un JAR
  • un file di metadati, in coppia con il JAR, che contiene informazioni su “dipendenze transitive ”(vale a dire, gli altri manufatti che questo artefatto dipende)”

Maven è usato per renderli disponibili per le nostre applicazioni.

Problemi correlati