Что такое артефакт Maven?


342

Что такое артефакт и зачем он нужен Maven?


3
Подробнее о концепциях Maven можно прочитать
Жером Верстринж,

1
Кстати, вы можете увидеть официальный глоссарий Apache Maven для определения Артефакта
informatik01

1
Ни один из этих ответов не является полным. Вы можете увидеть это, просто просмотрев репозиторий Maven . По-видимому, артефакт - это каталог, удовлетворяющий некоторым ограничениям, например, он должен содержать файл с именем maven-metadata.xmlи файл с именем <artifactId>-<version>.pom. Оба этих файла имеют недокументированную схему и семантику.
jameshfisher

Ответы:


303

Артефакт - это файл, обычно JAR, который развертывается в репозитории Maven.

Сборка Maven создает один или несколько артефактов, таких как скомпилированный JAR и «исходный» JAR.

Каждый артефакт имеет идентификатор группы (обычно обратное имя домена, например com.example.foo), идентификатор артефакта (просто имя) и строку версии. Три вместе однозначно идентифицируют артефакт.

Зависимости проекта указываются как артефакты.


5
Является ли артефакт в основном файлом JAR? Итак, файл joda time jar можно назвать артефактом joda, jibernate jar можно назвать артефактом hibernate и т. Д.?
Дэвид Блейн

47
Подумайте, что на самом деле артефакт. Египтяне создали замечательные артефакты, такие как керамика. Но если бы вы держали в руке египетскую чашу, вы бы не назвали ее «артефактом», если бы вы не обсуждали тот факт, что это артефакт (факт). Вы бы назвали это миской. Они ели из чаши. Они не ели из артефакта.
cbmeeks

3
Я думаю, что @cbmeeks стремится к тому, что «артефакт» - это не имя для «вещи», это роль в процессе сборки. Все, что может быть классифицировано как «артефакт», если Maven производит это, и ему дают специальные координаты Maven, чтобы идентифицировать это.
Гаррет Уилсон

Если у меня есть что-то под названием «com.example: mylibrary: 1.0.0» (groupId: artifactId: version), которое состоит из jar, pom и jar с исходным кодом, что из перечисленного является артефактом: 1. каждый файл (pom, jar, source jar) - это отдельный артефакт; 2. набор файлов с одинаковым (groupId: artifactId: version) составляет один артефакт; 3. что-то еще?
Лоуренс Гонсалвес

Вы не объясняете, как получить groupid и artifactid с именем класса. Downvote
Филипп Рего

114

В общих терминах программного обеспечения « артефакт » - это нечто, создаваемое процессом разработки программного обеспечения, будь то документация, связанная с программным обеспечением, или исполняемый файл.

В терминологии Maven, артефакт в результате выхода из Maven сборки, как правило, jarили warили другой исполняемый файл. Артефакты в maven идентифицируются системой координат groupId, artifactId и version. Maven использует groupId, artifactIdи versionдля выявления зависимостей (обычно другие JAR - файлы) , необходимых для сборки и запуска кода.


В моей книге говорится, что «основным артефактом этого онлайн-приложения будет Java-класс с именем User, который будет» ... Это то же самое, что и упомянутый вами артефакт?
Дэвид Блейн

@davidblaine - не совсем, это предложение использует слово в более общем смысле.
Кен Лю

27

Я знаю, что это древняя тема, но я хотел добавить несколько нюансов.

Есть артефакты Maven, артефакты менеджера хранилища, а затем есть Maven Artifacts.

Артефакт Maven так же, как говорят другие комментаторы / респонденты: это то, что выплевывается при создании проекта Maven. Это может быть .jarфайл, или .warфайл, или .zipфайл, или a .dll, или что у вас есть.

Артефакт менеджера хранилища - это вещь, которой, в общем-то, управляет менеджер хранилища. Менеджер хранилища - это, по сути, высокопроизводительный сервис именования для программных исполняемых файлов и библиотек. Менеджеру хранилища не важно, откуда берутся его артефакты (может быть, они получены из сборки Maven, или из локального файла, или сборки Ant, или ручной компиляции ...).

Maven Artifact- это Java-класс, представляющий своего рода «имя», которое разыменовывается менеджером хранилища в артефакт менеджера хранилища. При использовании в этом смысле, Artifactэто просто прославил имя из таких частей , как groupId, artifactId, version, scope, classifierи так далее.

Чтобы сложить все вместе:

  • Ваш проект Maven , вероятно , зависит от нескольких Artifactсекунд путем его <dependency>элементов.
  • Maven взаимодействует с менеджером хранилища, чтобы Artifactпреобразовать эти файлы в файлы, приказывая менеджеру хранилища отправить ему некоторые артефакты менеджера хранилища, которые соответствуют внутренним файлам Artifact.
  • Наконец, после разрешения Maven создает ваш проект и создает артефакт Maven. Вы можете выбрать «превратить это в» Репозиторное менеджер артефакта посредством, в свою очередь, используя любой инструмент , который вам нравится, и отправить его менеджеру хранилища достаточно информации , координирующей , что другие люди могут найти его , когда они спрашивают менеджер хранилища для него.

Надеюсь, это поможет.


+1 за новую информацию по старой теме спасибо! Исправьте опечатку "repoository", хотя иногда poo может быть правильным словом, ха-ха ... все говорят, что "артефакт" - это фактический jar, может быть полезно обновить ваш ответ, чтобы указать, что при использовании, например mvn install, люди пытаясь понять, что добавить в эту запись. Таким образом, полное название банки - это то, что нужно вводить -DartifactId=YOUR_ARTIFACT_ID, верно? Полное имя файла JAR с версией и .jar? Кажется, это то, что вы говорите, но поможет некоторым быть действительно откровенным. Другие ответы близки к этому, но я думал, что ваш лучше.
JimLohse

23

Maven организует его сборку в проектах.

artifactВ мавена является ресурсом , порожденным проектом Maven. У каждого проекта maven может быть ровно один artifactтакой jar, war, ear, как a и т. Д.
Файл конфигурации проекта "pom.xml"описывает, как создается артефакт, как выполняются модульные тесты и т. Д. Обычно сборка программного проекта с maven состоит из многих maven-проектов, которые создают артефакты (например, jars ) которые составляют продукт.
Например

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 артефакты не ограничиваются ресурсами Java. Вы можете создать любой ресурс, который вам нужен. Например, документация, проект-сайт, zip-архивы, native-библиотеки и т. Д.

Каждый проект maven имеет уникальный идентификатор [groupId, artifactId, version]. Когда для проекта maven требуются ресурсы другого проекта, в нем настраивается зависимость с pom.xmlиспользованием вышеуказанного идентификатора. Затем Maven автоматически разрешает зависимости при запуске сборки. Затем артефакты требуемых проектов загружаются либо из локального repositoryкаталога, который является простым каталогом в доме вашего пользователя, либо из других (удаленных) репозиториев, указанных вами pom.xml.


19

Q. Что такое Артефакт в Maven?
ОТВЕТ: ARTIFACT - это JAR (WAR или EAR), но это может быть и что-то еще. Каждый артефакт имеет,

  • идентификатор группы (например, com.your.package),
  • идентификатор артефакта (просто имя) и
  • строка версии.
    Три вместе однозначно идентифицируют артефакт.

В. Почему Мейвен нуждается в них?
Ответ: Maven используется, чтобы сделать их доступными для наших приложений.


Хороший ответ, поскольку я прокомментировал другой ответ , сделайте явным то, во что мы должны печатать -DartifactId=YOUR_ARTIFACT_IDпри запуске mvn install, просто предложение :)
JimLohse

@JimLohse спасибо, пожалуйста, не стесняйтесь добавлять с заголовком "изменить" :)
VdeX

9

Артефакт - это JAR или что-то, что вы храните в репозитории. Maven получает их и создает ваш код.


8

Для maven, процесс сборки организован как набор артефактов. Артефакты включают в себя:

  1. Плагины, которые составляют сам Maven.
  2. Зависимости, от которых зависит ваш код.
  3. Все, что создает ваша сборка, может, в свою очередь, быть использовано другим.

Артефакты живут в репозиториях.


4

обычно мы говорим о терминологии Maven о идентификаторе группы, идентификаторе артефакта и версии моментального снимка

Идентификатор группы: идентификация группы проекта. Идентификатор артефакта: идентификация проекта. Снимок версии: версия, используемая проектом.

Артефакт - это не что иное, как результирующий файл, такой как Jar, War, Ear ....

просто говорит, что артефакты - это не что иное, как пакеты.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.