O que é um artefato Maven?

342

O que é um artefato e por que o Maven precisa?

Maxim Veksler
fonte
3
Mais sobre os conceitos do Maven aqui: tshikatshikaaa.blogspot.nl/2012/05/…
Jérôme Verstrynge
11
btw Você pode ver o glossário oficial do Apache Maven para a definição de um artefato
informatik01
11
Nenhuma dessas respostas está completa. Você pode ver isso apenas navegando no repositório Maven . Um artefato é aparentemente um diretório que satisfaz algumas restrições, por exemplo, deve conter um arquivo chamado maven-metadata.xmle um arquivo chamado <artifactId>-<version>.pom. Ambos os arquivos têm algum esquema e semântica não documentados.
Jameshfisher

Respostas:

303

Um artefato é um arquivo, geralmente um JAR, que é implementado em um repositório Maven.

Uma construção do Maven produz um ou mais artefatos, como um JAR compilado e um JAR de "origem".

Cada artefato possui um ID de grupo (geralmente um nome de domínio invertido, como com.example.foo), um ID de artefato (apenas um nome) e uma sequência de versões. Os três juntos identificam exclusivamente o artefato.

As dependências de um projeto são especificadas como artefatos.

Stuart Sierra
fonte
5
Um artefato é basicamente um arquivo JAR? Então, o arquivo jar do tempo do joda pode ser chamado de artefato joda, o jar do hibernate pode ser chamado de artefato do hibernate, etc?
David blaine
47
Pense no que realmente é um artefato. Os egípcios criaram artefatos maravilhosos, como cerâmica. Mas, se você estivesse segurando uma tigela egípcia na mão, não a referiria como um "artefato", a menos que estivesse discutindo o fato de que é um artefato (fato). Você se referiria a ele como uma tigela. Eles comeram fora da tigela. Eles não comeram fora do artefato.
cbmeeks
3
Eu acho que o @cbmeeks está chegando é que "artefato" não é um nome para uma "coisa", é um papel no processo de compilação. Qualquer coisa pode ser classificada como um "artefato" se o Maven o produzir e receber coordenadas especiais do Maven para identificá-lo.
Garret Wilson
Se eu tiver algo chamado "com.example: mylibrary: 1.0.0" (groupId: artifactId: version), que consiste em um jar, um pom e um jar de origem, qual dos seguintes itens é um artefato: 1. cada arquivo (pom, jar, jar de origem) é um artefato separado; 2. o conjunto de arquivos que compartilham o mesmo (groupId: artifactId: version) compõe um único artefato; 3. algo mais?
Laurence Gonsalves
Você não explica como obter o groupid e o artefato com o nome da classe. Downvote
Philip Rego
114

Em termos gerais de software, um " artefato " é algo produzido pelo processo de desenvolvimento de software, seja uma documentação relacionada ao software ou um arquivo executável.

Na terminologia Maven, o artefato é a saída resultante da compilação Maven, geralmente uma jarou wararquivo ou outro executável. Os artefatos no maven são identificados por um sistema de coordenadas de groupId, artifactId e version. Maven usa o groupId, artifactIde versionpara identificar dependências (geralmente outros arquivos JAR) necessários para construir e executar o seu código.

Ken Liu
fonte
Meu livro diz que "o artefato principal desse aplicativo online será uma classe Java chamada Usuário, que será" ... É o mesmo que o artefato que você mencionou?
David blaine
@davidblaine - não exatamente, essa frase usa a palavra em um sentido mais geral.
Ken Liu
27

Eu sei que esse é um tópico antigo, mas eu queria adicionar algumas nuances.

Existem artefatos do Maven, artefatos do gerenciador de repositório e outros Artifact.

Um artefato do Maven é exatamente o que outros comentadores / respondentes dizem: é algo que é cuspido na construção de um projeto do Maven. Pode ser um .jararquivo, ou um .wararquivo, ou um .ziparquivo, ou um .dll, ou o que você tem.

Um artefato do gerenciador de repositório é algo que é, bem, gerenciado por um gerenciador de repositório. Um gerenciador de repositório é basicamente um serviço de nomeação de alto desempenho para executáveis ​​e bibliotecas de software. Um gerenciador de repositório não se importa de onde vêm seus artefatos (talvez eles venham de uma compilação Maven, ou um arquivo local, ou uma compilação Ant, ou uma compilação manual ...).

Um Maven Artifacté uma classe Java que representa o tipo de "nome" desreferenciado por um gerenciador de repositório em um artefato do gerenciador de repositório. Quando usado neste sentido, um Artifacté apenas um nome glorificado composta de peças como groupId, artifactId, version, scope, classifiere assim por diante.

Para juntar tudo:

  • Seu projeto Maven provavelmente depende de vários Artifacts por meio de seus <dependency>elementos.
  • O Maven interage com um gerenciador de repositório para resolver esses Artifacts em arquivos, instruindo o gerenciador de repositório a enviar alguns artefatos do gerenciador de repositório que correspondam aos Artifacts internos .
  • Finalmente, após a resolução, o Maven cria seu projeto e produz um artefato do Maven. Você pode optar por "transformar isso em" um artefato gerente de repositório, por sua vez, usando qualquer ferramenta que você gosta, enviá-lo para o gerente de repositório com informação de coordenação suficiente para que outras pessoas possam encontrá-lo quando eles pedir ao gerente repositório para ele.

Espero que ajude.

Laird Nelson
fonte
+1 para novas informações sobre tópicos antigos, obrigado! Corrija o erro de digitação "repoository", embora às vezes cocô possa ser a palavra certa haha ​​... todo mundo está dizendo que "artefato" é o jar real, pode ser útil atualizar sua resposta para mostrar que, ao usar, por exemplo mvn install, as pessoas são tentando descobrir o que colocar nessa entrada. Portanto, o nome completo do jar é o que você deve digitar -DartifactId=YOUR_ARTIFACT_ID, certo? O nome completo do arquivo jar com a versão e .jar? Parece ser o que você está dizendo, mas ajudaria alguns a serem realmente explícitos. Outras respostas se aproximam disso, mas achei a sua melhor.
JimLohse
23

Maven organiza sua construção em projetos.

Um artifactmaven é um recurso gerado por um projeto maven. Cada projeto maven pode ter exatamente um artifactcomo um jar, war, ear, etc.
O arquivo de configuração do projeto "pom.xml"descreve como o artefato é construído, como os testes de unidade são executados etc. Geralmente, uma construção de projeto de software com maven consiste em muitos projetos de maven que constroem artefatos (por exemplo, jarros ) que constituem o produto.
Por exemplo

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

Os artefatos do Maven não se limitam aos recursos java. Você pode gerar qualquer recurso necessário. Por exemplo, documentação, site do projeto, arquivos zip, bibliotecas nativas, etc.

Cada projeto maven possui um identificador exclusivo constituído por [groupId, artifactId, version]. Quando um projeto maven requer recursos de outro projeto, uma dependência é configurada, pom.xmlusando o identificador mencionado acima. O Maven resolve automaticamente as dependências quando uma compilação é acionada. Os artefatos dos projetos necessários são carregados do local repository, que é um diretório simples na página inicial do usuário ou de outros repositórios (remotos) especificados em você pom.xml.

Marc-Christian Schulze
fonte
19

P. O que é Artefato no maven?
ANS: ARTIFACT é um JAR (WAR ou EAR), mas também pode ser outra coisa. Cada artefato possui,

  • um ID de grupo (como com.your.package),
  • um ID de artefato (apenas um nome) e
  • uma string de versão.
    Os três juntos identificam exclusivamente o artefato.

P. Por que o Maven precisa deles?
Resp: Maven é usado para disponibilizá-los para nossos aplicativos.

VdeX
fonte
Resposta agradável, como eu comentei em outra resposta , torná-lo explícito o que devemos digitar em -DartifactId=YOUR_ARTIFACT_IDquando executar mvn instalar, apenas uma sugestão :)
JimLohse
@ JimLohse obrigado, por favor, sinta-se livre para adicionar o título "edit" :)
VdeX 17/17/17
9

Um artefato é um JAR ou algo que você armazena em um repositório. Maven os tira e cria seu código.

duffymo
fonte
8

Para preparar, o processo de construção é organizado como um conjunto de artefatos. Os artefatos incluem:

  1. Os plugins que compõem o próprio Maven.
  2. Dependências das quais seu código depende.
  3. Qualquer coisa que sua compilação produz que pode, por sua vez, ser consumida por outra coisa.

Os artefatos vivem em repositórios.

bmargulies
fonte
4

normalmente estamos falando da terminologia do Maven sobre o ID do grupo, o ID do artefato e a versão do instantâneo

ID do grupo: identidade do grupo do projeto ID do artefato: identidade do projeto Versão da captura instantânea: a versão usada pelo projeto.

O artefato nada mais é do que um arquivo resultante como Jar, War, Ear ....

simplesmente diz que Artefatos nada mais são que pacotes.

Venky Vungarala
fonte