Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
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 Apa itu SNAPSHOT versi?
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
Topik
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 pengelola paket Anda tanpa memiliki pemahaman mendetail tentang bagaimana snapshot Maven dipublikasikan. 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 URL jalur. Untuk melihat versi build snapshot Maven, gunakan ListPackageVersions APIdi CodeArtifact APIPanduan dan atur parameter status ke. Unlisted
Menghapus versi snapshot
Untuk menghapus semua versi build snapshot Maven, gunakan DeletePackageVersionsAPI, yang menentukan 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 HTTP klien 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:
-
Publikasikan semua aset dari semua build menggunakan
curl
. -
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. -
Gunakan UpdatePackageVersionsStatusAPIuntuk 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 dari sebuah 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 CodeArtifact domain Anda. -
Ganti
us-west-2
dengan Wilayah AWS tempat CodeArtifact domain Anda berada. -
Ganti
my_maven_repo
dengan nama CodeArtifact repositori Anda.
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 Javadoc dan JAR file sumber selain file utama JAR 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.xml
File 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.xml
Setelah 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, tetapi ada batasan jika Anda berencana menerbitkan snapshot dari versi paket yang sama ke dua repositori yang memiliki hubungan hulu. Misalnya, katakan bahwa ada dua repositori dalam AWS CodeArtifact domain, R
danU
, di U
mana hulu. R
Jika Anda memublikasikan build baruR
, saat klien Maven meminta build terbaru dari versi snapshot tersebut, CodeArtifact mengembalikan versi terbaru dari. U
Ini bisa tidak terduga karena versi terbaru sekarang masukR
, tidakU
. Ada dua cara untuk menghindari hal ini:
-
Jangan mempublikasikan build versi snapshot seperti
1.0-SNAPSHOT
inR
, jika1.0-SNAPSHOT
ada di.U
-
Gunakan kontrol asal CodeArtifact paket untuk menonaktifkan upstream pada paket itu di.
R
Yang terakhir akan memungkinkan Anda untuk mempublikasikan build1.0-SNAPSHOT
inR
, tetapi juga akan mencegahR
versi lain dari paket itu dariU
yang belum dipertahankan.