Apa itu artefak Maven?

342

Apa itu artefak dan mengapa Maven membutuhkannya?

Maxim Veksler
sumber
3
Lebih lanjut tentang konsep Maven di sini: tshikatshikaaa.blogspot.nl/2012/05/…
Jérôme Verstrynge
1
btw Anda dapat melihat glosarium resmi Apache Maven untuk definisi Artifact
informatik01
1
Tidak satu pun dari jawaban ini yang lengkap. Anda dapat melihat ini hanya dengan menelusuri repositori Maven . Artefak tampaknya adalah direktori yang memenuhi beberapa kendala, misalnya harus mengandung file yang dipanggil maven-metadata.xmldan file yang dipanggil <artifactId>-<version>.pom. Kedua file tersebut memiliki beberapa skema dan semantik tidak berdokumen.
jameshfisher

Jawaban:

303

Artefak adalah file, biasanya JAR, yang akan ditempatkan ke repositori Maven.

Build Maven menghasilkan satu atau lebih artefak, seperti JAR yang dikompilasi dan JAR "sumber".

Setiap artefak memiliki ID grup (biasanya nama domain terbalik, seperti com.example.foo), ID artefak (hanya nama), dan string versi. Ketiganya bersama-sama mengidentifikasi artefak secara unik.

Ketergantungan proyek ditentukan sebagai artefak.

Stuart Sierra
sumber
5
Apakah artefak pada dasarnya adalah file JAR? Jadi, file jar waktu joda dapat disebut artefak joda, stoples hibernasi dapat disebut artefak hibernasi dll?
david blaine
47
Pikirkan apa sebenarnya artefak itu. Orang Mesir menciptakan artefak yang indah seperti tembikar. Tetapi, jika Anda memegang mangkuk Mesir di tangan Anda, Anda tidak akan menyebutnya sebagai "artefak" kecuali jika Anda mendiskusikan fakta bahwa itu ADALAH artefak (fakta). Anda akan menyebutnya sebagai mangkuk. Mereka makan dari mangkuk. Mereka tidak makan keluar dari artefak.
cbmeeks
3
Saya pikir apa yang dilakukan oleh @ cbmeeks adalah bahwa "artefak" bukanlah nama untuk "sesuatu", itu adalah peran dalam proses pembangunan. Apa pun dapat digolongkan sebagai "artefak" jika Maven memproduksinya dan diberi koordinat Maven khusus untuk mengidentifikasinya.
Garret Wilson
Jika saya memiliki sesuatu yang disebut "com.example: mylibrary: 1.0.0" (groupId: artifactId: version), yang terdiri dari toples, pom, dan toples sumber, yang dari yang berikut adalah artefak: 1. setiap file (pom, toples, toples sumber) adalah artefak yang terpisah; 2. kumpulan file yang berbagi sama (groupId: artifactId: versi) membuat satu artefak; 3. sesuatu yang lain?
Laurence Gonsalves
Anda tidak menjelaskan bagaimana cara mendapatkan groupid dan artifactid diberi nama kelas. Downvote
Philip Rego
114

Dalam istilah perangkat lunak umum, " artefak " adalah sesuatu yang dihasilkan oleh proses pengembangan perangkat lunak, apakah itu dokumentasi terkait perangkat lunak atau file yang dapat dieksekusi.

Dalam terminologi Maven, artefak adalah output yang dihasilkan dari maven membangun, umumnya jaratau waratau lainnya file eksekusi. Artefak dalam pakar diidentifikasi oleh sistem koordinat groupId, artifactId, dan versi. Maven menggunakan groupId, artifactIddan versionuntuk mengidentifikasi dependensi (biasanya file jar lainnya) yang diperlukan untuk membangun dan menjalankan kode Anda.

Ken Liu
sumber
Buku saya mengatakan "artifak inti dari aplikasi online ini adalah kelas Java yang bernama Pengguna, yang akan" ... Apakah ini sama dengan artefak yang Anda sebutkan?
david blaine
@davidblaine - tidak persis, kalimat itu menggunakan kata yang lebih umum.
Ken Liu
27

Saya tahu ini adalah utas kuno tetapi saya ingin menambahkan beberapa nuansa.

Ada artefak Maven, artefak manajer repositori dan kemudian ada Maven Artifacts.

Artefak Maven sama seperti komentator / responden lain mengatakan: itu adalah hal yang diludahkan dengan membangun proyek Maven. Itu bisa berupa .jarfile, atau .warfile, atau .zipfile .dll, atau apa pun yang Anda miliki.

Artefak manajer repositori adalah hal yang dikelola oleh manajer repositori. Manajer repositori pada dasarnya adalah layanan penamaan yang sangat berkinerja untuk perangkat lunak dan perpustakaan yang dapat dieksekusi. Manajer repositori tidak peduli dari mana artefaknya berasal (mungkin berasal dari build Maven, atau file lokal, atau build Ant, atau kompilasi dengan tangan ...).

A Maven Artifactadalah kelas Java yang mewakili jenis "nama" yang akan direferensikan oleh manajer repositori menjadi artefak manajer repositori. Ketika digunakan dalam pengertian ini, sebuah Artifacthanya nama dimuliakan terdiri dari bagian seperti groupId, artifactId, version, scope, classifierdan sebagainya.

Untuk menyatukan semuanya:

  • Proyek Maven Anda mungkin tergantung pada beberapa Artifacts melalui <dependency>unsur - unsurnya.
  • Maven berinteraksi dengan manajer repositori untuk menyelesaikannya Artifactke dalam file dengan menginstruksikan manajer repositori untuk mengirimkannya beberapa artefak manajer repositori yang sesuai dengan internal Artifact.
  • Akhirnya, setelah resolusi, Maven membangun proyek Anda dan menghasilkan artefak Maven. Anda dapat memilih untuk "mengubah ini menjadi" artefak manajer repositori dengan, pada gilirannya, menggunakan alat apa pun yang Anda suka, mengirimkannya ke manajer repositori dengan informasi koordinasi yang cukup sehingga orang lain dapat menemukannya ketika mereka meminta manajer repositori untuk itu.

Semoga itu bisa membantu.

Laird Nelson
sumber
+1 untuk info baru di utas lama, terima kasih! Perbaiki kesalahan ketik "repoositori" meskipun terkadang kotoran mungkin kata yang tepat haha ​​... semua orang mengatakan "artefak" adalah toples yang sebenarnya, mungkin membantu untuk memperbarui jawaban Anda untuk menunjukkan bahwa ketika menggunakan, misalnya mvn install, orang mencoba mencari tahu apa yang harus dimasukkan dalam entri itu. Jadi nama lengkap guci itu untuk apa -DartifactId=YOUR_ARTIFACT_ID, apakah itu benar? Nama file jar lengkap dengan versi dan .jar? Tampaknya apa yang Anda katakan tetapi akan membantu beberapa orang menjadi sangat eksplisit. Jawaban lain mendekati ini tapi saya pikir Anda yang terbaik.
JimLohse
23

Maven mengelola proyeknya.

Seorang artifactpakar adalah sumber daya yang dihasilkan oleh proyek pakar. Setiap proyek pakar dapat memiliki persis satu artifactseperti jar, war, ear, dll
. File konfigurasi proyek "pom.xml"menjelaskan bagaimana artefak dibangun, bagaimana tes unit dijalankan, dll. Umumnya proyek perangkat lunak yang dibangun dengan pakar terdiri dari banyak proyek pakar yang membangun artefak (misalnya toples) ) yang merupakan produk.
Misalnya

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

Artefak Maven tidak terbatas pada sumber daya java. Anda dapat menghasilkan sumber daya apa pun yang Anda butuhkan. Misalnya dokumentasi, situs proyek, arsip zip, perpustakaan asli, dll.

Setiap proyek pakar memiliki pengidentifikasi unik yang terdiri dari [groupId, artifactId, version]. Ketika proyek pakar membutuhkan sumber daya dari proyek lain, ketergantungan dikonfigurasi di dalamnya pom.xmlmenggunakan pengidentifikasi yang disebutkan di atas. Maven kemudian secara otomatis menyelesaikan dependensi ketika membangun dipicu. Artefak dari proyek yang diperlukan kemudian dimuat baik dari lokal repository, yang merupakan direktori sederhana di rumah pengguna Anda, atau dari repositori (jauh) lain yang ditentukan dalam Anda pom.xml.

Marc-Christian Schulze
sumber
19

Q. Apa Artefak pada pakar?
ANS: ARTIFACT adalah JAR, (PERANG atau TELINGA), tetapi bisa juga sesuatu yang lain. Setiap artefak memiliki,

  • ID grup (seperti com.your.package),
  • ID artefak (hanya nama), dan
  • string versi.
    Ketiganya bersama-sama mengidentifikasi artefak secara unik.

Q. Mengapa Maven membutuhkannya?
Jawab: Maven digunakan untuk membuatnya tersedia untuk aplikasi kita.

VdeX
sumber
Jawaban yang bagus, seperti yang saya komentari pada jawaban lain , buat secara eksplisit apa yang seharusnya kita ketik -DartifactId=YOUR_ARTIFACT_IDketika menjalankan mvn install, hanya sebuah saran :)
JimLohse
@JimLohse terima kasih, silakan tambahkan dengan judul "edit" :)
VdeX
9

Artefak adalah JAR atau sesuatu yang Anda simpan di repositori. Maven mengeluarkannya dan membuat kode Anda.

Duffymo
sumber
8

Untuk pakar, proses membangun diatur sebagai satu set artefak. Artefak meliputi:

  1. Plugin yang membentuk Maven itu sendiri.
  2. Ketergantungan yang bergantung pada kode Anda.
  3. Apa pun yang Anda hasilkan yang dapat, pada gilirannya dikonsumsi oleh sesuatu yang lain.

Artefak hidup dalam repositori.

bmargulies
sumber
4

biasanya kita berbicara Terminologi Maven tentang ID Grup, Artefak Id dan Versi Snapshot

Id Grup: identitas grup proyek Id Artifact: identitas proyek Versi snapshot: versi yang digunakan oleh proyek.

Artefak hanyalah beberapa file yang dihasilkan seperti Jar, War, Ear ....

hanya mengatakan Artefak hanyalah paket.

Venky Vungarala
sumber