Menggunakan snapshot Maven - CodeArtifact

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan snapshot Maven

Snapshot Maven adalah versi khusus dari paket Maven yang mengacu pada kode cabang produksi terbaru. Ini adalah versi pengembangan sebelum versi rilis akhir. Anda dapat mengidentifikasi versi snapshot dari paket Maven dengan akhiran SNAPSHOT yang ditambahkan ke versi paket. Sebagai contoh, snapshot versi 1.1 adalah 1.1-SNAPSHOT. Untuk informasi selengkapnya, lihat What is a SNAPSHOT version? di situs Apache Maven Project.

AWS CodeArtifact mendukung penerbitan dan penggunaan snapshot Maven. Snapshot unik yang menggunakan nomor versi berbasis waktu adalah satu-satunya snapshot yang didukung. CodeArtifact tidak mendukung snapshot non-unik yang dihasilkan oleh klien Maven 2. Anda dapat mempublikasikan snapshot Maven yang didukung ke repositori apa pun. CodeArtifact

Penerbitan snapshot di CodeArtifact

AWS CodeArtifact mendukung pola permintaan yang digunakan klien, sepertimvn, saat menerbitkan snapshot. Karena itu, Anda dapat mengikuti dokumentasi untuk alat build atau manajer paket Anda tanpa memiliki pemahaman mendetail tentang bagaimana snapshot Maven diterbitkan. Jika Anda melakukan sesuatu yang lebih kompleks, bagian ini menjelaskan secara rinci bagaimana CodeArtifact menangani snapshot.

Ketika snapshot Maven dipublikasikan ke CodeArtifact repositori, versi sebelumnya dipertahankan dalam versi baru yang disebut build. Setiap kali snapshot Maven dipublikasikan, versi build baru dibuat. Semua versi snapshot sebelumnya dipertahankan dalam versi build. Saat snapshot Maven diterbitkan, status versi paketnya disetel ke Published dan status build yang berisi versi sebelumnya disetel ke. Unlisted Perilaku ini hanya berlaku untuk versi paket Maven di mana versi paket memiliki -SNAPSHOT akhiran.

Misalnya, versi snapshot dari paket maven yang dipanggil diunggah ke com.mycompany.myapp:pkg-1 repositori yang dipanggil. CodeArtifact my-maven-repo Versi snapshot adalah1.0-SNAPSHOT. Sejauh ini, com.mycompany.myapp:pkg-1 belum ada versi yang diterbitkan. Pertama, aset build awal dipublikasikan di jalur ini:

PUT maven/my-maven-repo/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210728.194552-1.jar PUT maven/my-maven-repo/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210728.194552-1.pom

Perhatikan bahwa stempel waktu 20210728.194552-1 dihasilkan oleh klien yang menerbitkan build snapshot.

Setelah file.pom dan .jar diunggah, satu-satunya versi com.mycompany.myapp:pkg-1 yang ada di repositori adalah. 1.0-20210728.194552-1 Ini terjadi meskipun versi yang ditentukan di jalur sebelumnya adalah. 1.0-SNAPSHOT Status versi paket pada saat ini adalahUnfinished.

aws codeartifact list-package-versions --domain my-domain --repository \ my-maven-repo --package pkg-1 --namespace com.mycompany.myapp --format maven { "versions": [ { "version": "1.0-20210728.194552-1", "revision": "GipMW+599JmwTcTLaXo9YvDsVQ2bcrrk/02rWJhoKUU=", "status": "Unfinished" } ], "defaultDisplayVersion": null, "format": "maven", "package": "pkg-1", "namespace": "com.mycompany.myapp" }

Selanjutnya, klien mengunggah maven-metadata.xml file untuk versi paket:

PUT my-maven-repo/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/maven-metadata.xml

Ketika file maven-metadata.xml berhasil diunggah, CodeArtifact buat versi 1.0-SNAPSHOT paket dan atur 1.0-20210728.194552-1 versinya. Unlisted

aws codeartifact list-package-versions --domain my-domain --repository \ my-maven-repo --package pkg-1 --namespace com.mycompany.myapp --format maven { "versions": [ { "version": "1.0-20210728.194552-1", "revision": "GipMW+599JmwTcTLaXo9YvDsVQ2bcrrk/02rWJhoKUU=", "status": "Unlisted" }, { "version": "1.0-SNAPSHOT", "revision": "tWu8n3IX5HR82vzVZQAxlwcvvA4U/+S80edWNAkil24=", "status": "Published" } ], "defaultDisplayVersion": "1.0-SNAPSHOT", "format": "maven", "package": "pkg-1", "namespace": "com.mycompany.myapp" }

Pada titik ini, versi snapshot 1.0-SNAPSHOT dapat dikonsumsi dalam build. Meskipun ada dua versi com.mycompany.myapp:pkg-1 dalam repositorimy-maven-repo, keduanya mengandung aset yang sama.

aws codeartifact list-package-version-assets --domain my-domain --repository \ my-maven-repo --format maven --namespace com.mycompany.myapp \ --package pkg-1 --package-version 1.0-SNAPSHOT--query 'assets[*].name' [ "pkg-1-1.0-20210728.194552-1.jar", "pkg-1-1.0-20210728.194552-1.pom" ]

Menjalankan list-package-version-assets perintah yang sama seperti yang ditunjukkan sebelumnya dengan --package-version parameter diubah untuk 1.0-20210728.194552-1 menghasilkan output yang identik.

Karena build tambahan 1.0-SNAPSHOT ditambahkan ke repositori, versi Unlisted paket baru dibuat untuk setiap build baru. Aset versi 1.0-SNAPSHOT diperbarui setiap kali sehingga versi selalu mengacu pada versi terbaru untuk versi tersebut. Memperbarui 1.0-SNAPSHOT dengan aset terbaru dimulai dengan mengunggah maven-metadata.xml file untuk build baru.

Mengkonsumsi versi snapshot

Jika Anda meminta snapshot, versi dengan status Published dikembalikan. Ini selalu merupakan versi terbaru snapshot Maven. Anda juga dapat meminta build snapshot tertentu menggunakan nomor versi build (misalnya,1.0-20210728.194552-1) alih-alih versi snapshot (misalnya,1.0-SNAPSHOT) di jalur URL. Untuk melihat versi build snapshot Maven, gunakan ListPackageVersions API di Panduan CodeArtifact API dan setel parameter status ke. Unlisted

Menghapus versi snapshot

Untuk menghapus semua versi build snapshot Maven, gunakan DeletePackageVersionsAPI, tentukan versi yang ingin Anda hapus.

Penerbitan snapshot dengan curl

Jika Anda memiliki versi snapshot yang disimpan di Amazon Simple Storage Service (Amazon S3) atau produk repositori artefak lainnya, Anda mungkin ingin mempublikasikannya kembali. AWS CodeArtifact Karena cara CodeArtifact mendukung snapshot Maven (lihatPenerbitan snapshot di CodeArtifact), menerbitkan snapshot dengan klien HTTP generik seperti lebih kompleks daripada menerbitkan versi rilis curl Maven seperti yang dijelaskan dalam. Publikasi dengan curl Perhatikan bahwa bagian ini tidak relevan jika Anda membuat dan menerapkan versi snapshot dengan klien Maven seperti atau. mvn gradle Anda harus mengikuti dokumentasi untuk klien itu.

Menerbitkan versi snapshot melibatkan penerbitan satu atau beberapa build versi snapshot. Di CodeArtifact, jika ada n build dari versi snapshot, akan ada n + 1 CodeArtifact versi: n versi build semua dengan statusUnlisted, dan satu versi snapshot (build terbaru yang diterbitkan) dengan status. Published Versi snapshot (yaitu, versi dengan string versi yang berisi “-SNAPSHOT”) berisi kumpulan aset yang identik dengan build terbaru yang diterbitkan. Cara paling sederhana untuk membuat struktur ini menggunakan curl adalah sebagai berikut:

  1. Publikasikan semua aset dari semua build menggunakancurl.

  2. Publikasikan maven-metadata.xml file build terakhir (yaitu, build dengan stempel tanggal-waktu terbaru) dengan. curl Ini akan membuat versi dengan “-SNAPSHOT” dalam string versi dan dengan set aset yang benar.

  3. Gunakan UpdatePackageVersionsStatusAPI untuk menyetel status semua versi build yang tidak terbaru. Unlisted

Gunakan curl perintah berikut untuk mempublikasikan aset snapshot (seperti file.jar dan .pom) untuk versi snapshot paket: 1.0-SNAPSHOT com.mycompany.app:pkg-1

curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210729.171330-2.jar \ --data-binary @pkg-1-1.0-20210728.194552-1.jar
curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210729.171330-2.pom \ --data-binary @pkg-1-1.0-20210728.194552-1.pom

Saat menggunakan contoh-contoh ini:

  • Ganti my_domain dengan nama CodeArtifact domain Anda.

  • Ganti 111122223333 dengan Akun AWS ID pemilik domain Anda. CodeArtifact

  • Ganti us-west-2 dengan Wilayah AWS tempat domain Anda berada. CodeArtifact

  • Ganti my_maven_repo dengan nama repositori Anda. CodeArtifact

penting

Anda harus mengawali nilai --data-binary parameter dengan @ karakter. Saat memasukkan nilai dalam tanda kutip, @ harus disertakan di dalam tanda kutip.

Anda mungkin memiliki lebih dari dua aset untuk diunggah untuk setiap build. Misalnya, mungkin ada file Javadoc dan sumber JAR selain JAR utama dan. pom.xml Tidak perlu mempublikasikan file checksum untuk aset versi paket karena CodeArtifact secara otomatis menghasilkan checksum untuk setiap aset yang diunggah. Untuk memverifikasi aset telah diunggah dengan benar, ambil checksum yang dihasilkan menggunakan list-package-version-assets perintah dan bandingkan dengan checksum asli. Untuk informasi selengkapnya tentang cara CodeArtifact menangani checksum Maven, lihat. Menggunakan checksum Maven

Gunakan perintah curl berikut untuk memublikasikan maven-metadata.xml file untuk versi build terbaru:

curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/maven-metadata.xml \ --data-binary @maven-metadata.xml

maven-metadata.xmlFile harus mereferensikan setidaknya satu aset dalam versi build terbaru dalam <snapshotVersions> elemen. Selain itu, <timestamp> nilainya harus ada dan harus sesuai dengan stempel waktu dalam nama file aset. Misalnya, untuk 20210729.171330-2 build yang diterbitkan sebelumnya, isinya maven-metadata.xml adalah:

<?xml version="1.0" encoding="UTF-8"?> <metadata> <groupId>com.mycompany.app</groupId> <artifactId>pkg-1</artifactId> <version>1.0-SNAPSHOT</version> <versioning> <snapshot> <timestamp>20210729.171330</timestamp> <buildNumber>2</buildNumber> </snapshot> <lastUpdated>20210729171330</lastUpdated> <snapshotVersions> <snapshotVersion> <extension>jar</extension> <value>1.0-20210729.171330-2</value> <updated>20210729171330</updated> </snapshotVersion> <snapshotVersion> <extension>pom</extension> <value>1.0-20210729.171330-2</value> <updated>20210729171330</updated> </snapshotVersion> </snapshotVersions> </versioning> </metadata>

maven-metadata.xmlSetelah diterbitkan, langkah terakhir adalah mengatur semua versi build lainnya (yaitu, semua versi build terpisah dari build terbaru) agar memiliki status versi paketUnlisted. Misalnya, jika 1.0-SNAPSHOT versi memiliki dua build, dengan build pertama20210728.194552-1, perintah untuk menyetel build tersebut Unlisted adalah:

aws codeartifact update-package-versions-status --domain my-domain --domain-owner 111122223333 \ --repository my-maven-repo --format maven --namespace com.mycompany.app --package pkg-1 \ --versions 1.0-20210728.194552-1 --target-status Unlisted

Snapshot dan koneksi eksternal

Snapshot Maven tidak dapat diambil dari repositori publik Maven melalui koneksi eksternal. AWS CodeArtifact hanya mendukung mengimpor versi rilis Maven.

Snapshot dan repositori upstream

Secara umum, snapshot Maven bekerja dengan cara yang sama seperti versi rilis Maven saat digunakan dengan repositori upstream. Misalnya, katakan bahwa ada dua repositori dalam AWS CodeArtifact domain, R danU, di U mana hulu. R Dalam situasi ini, Anda dapat dengan bebas mempublikasikan build snapshot dari paket tertentu (seperti 1.0-SNAPSHOT daricom.mycompany.app:pkg-1) ke keduanya danR. U Namun, ada beberapa perilaku penting yang perlu dipahami saat mengonsumsi build snapshot dari R (repositori hilir).

Diagram tentang cara kerja snapshot Maven.
  1. Jika 1.0-SNAPSHOT ada diR, maka hanya aset 1.0-SNAPSHOT in yang R dapat diambil dengan manajer paket yang dikonfigurasi untuk mengambil paket dari. R Anda tidak dapat mengambil aset 1.0-SNAPSHOT masuk U melaluiR. Ini karena versi snapshot di U dibayangi oleh versi di. R Perilaku ini identik dengan versi rilis Maven dan perilaku format paket lainnya. Dalam diagram, a GET of /maven/R/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20221231.002230-3.jar akan mengembalikan kode respons HTTP 200 (OK), tetapi a GET of /maven/R/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20221220.150959-1.jar akan mengembalikan kode respons HTTP 404 (Tidak Ditemukan).

  2. Jika 1.0-SNAPSHOT ada di U tetapi tidak diR, Anda dapat menarik aset 1.0-SNAPSHOT dariR. Ini akan 1.0-SNAPSHOT menyebabkan dipertahankanR, sama seperti dengan versi rilis.

  3. Setelah 1.0-SNAPSHOT dipertahankanR, Anda dapat mempublikasikan build tambahan dari 1.0-SNAPSHOT in. U Namun, ini tidak akan dapat diakses R karena perilaku yang dijelaskan dalam poin (1). Ini berarti alasan standar untuk menggunakan versi snapshot, yaitu, menggunakan build dependensi terbaru melalui versi snapshot tertentu, tidak berfungsi seperti yang diharapkan di seluruh hubungan hulu. Meskipun versi baru diterbitkanU, konsumen tidak dapat mengakses versi terbaru dari 1.0-SNAPSHOT dariR. 1.0-SNAPSHOT Untuk mengatasinya, hapus versi 1.0-SNAPSHOT secara berkala R atau konfigurasikan klien untuk menarik versi 1.0-SNAPSHOT dariU.

  4. Versi build Unlisted snapshot dapat diakses dari repositori hilir. Dalam diagram, a GET of /maven/R/com/mycompany/myapp/pkg-1/1.0-20221220.150959-1/pkg-1-1.0-20221220.150959-1.jar akan mengembalikan kode respons 200 (OK). Meskipun ini meminta aset yang ada di repositori upstream, karena versi tersebut ditangani menggunakan build version string (1.0-20221220.150959-1), aset tersebut dapat diambil melalui repositori hilir. Ini juga GET akan 1.0-20221220.150959-1 menyebabkan versi dipertahankanR, dengan status versi paket. Unlisted