

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

# Menggunakan snapshot Maven
<a name="maven-snapshots"></a>

 *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?](https://maven.apache.org/guides/getting-started/index.html#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 

**Topics**
+ [Penerbitan snapshot di CodeArtifact](#maven-snapshot-publishing)
+ [Mengkonsumsi versi snapshot](#maven-consuming-snapshot-versions)
+ [Menghapus versi snapshot](#maven-deleting-snapshot-versions)
+ [Penerbitan snapshot dengan curl](#maven-snapshot-publishing-curl)
+ [Snapshot dan koneksi eksternal](#maven-snapshot-external-connections)
+ [Snapshot dan repositori upstream](#maven-snapshot-upstream-repositories)

## Penerbitan snapshot di CodeArtifact
<a name="maven-snapshot-publishing"></a>

AWS CodeArtifact mendukung pola permintaan yang digunakan klien, seperti`mvn`, 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 adalah`1.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 adalah`Unfinished`.

```
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 repositori`my-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
<a name="maven-consuming-snapshot-versions"></a>

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 ](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListPackageVersions.html)API di *Panduan CodeArtifact API* dan setel parameter status ke. `Unlisted`

## Menghapus versi snapshot
<a name="maven-deleting-snapshot-versions"></a>

Untuk menghapus semua versi build snapshot Maven, gunakan [DeletePackageVersions](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DeletePackageVersions.html)API, tentukan versi yang ingin Anda hapus.

## Penerbitan snapshot dengan curl
<a name="maven-snapshot-publishing-curl"></a>

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 (lihat[Penerbitan snapshot di CodeArtifact](#maven-snapshot-publishing)), menerbitkan snapshot dengan klien HTTP generik seperti lebih kompleks daripada menerbitkan versi rilis `curl` Maven seperti yang dijelaskan dalam. [Publikasi dengan curl](maven-curl.md) 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 status`Unlisted`, 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 menggunakan`curl`. 

1. 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.

1. Gunakan [UpdatePackageVersionsStatus](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html)API 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 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}} AWS Region dengan 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 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. [Gunakan checksum Maven](maven-checksums.md)

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 paket`Unlisted`. Misalnya, jika `1.0-SNAPSHOT` versi memiliki dua build, dengan build pertama`20210728.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
<a name="maven-snapshot-external-connections"></a>

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

## Snapshot dan repositori upstream
<a name="maven-snapshot-upstream-repositories"></a>

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 sebuah AWS CodeArtifact domain, `R` dan`U`, di mana `U` adalah hulu. `R` Jika Anda memublikasikan build baru`R`, saat klien Maven meminta build terbaru dari versi snapshot tersebut, CodeArtifact mengembalikan versi terbaru dari. `U` Ini bisa tidak terduga karena versi terbaru sekarang masuk`R`, tidak`U`. Ada dua cara untuk menghindari hal ini:

1. Jangan mempublikasikan build versi snapshot seperti `1.0-SNAPSHOT` in`R`, jika `1.0-SNAPSHOT` ada di. `U`

1. Gunakan kontrol asal CodeArtifact paket untuk menonaktifkan upstream pada paket itu di. `R` Yang terakhir akan memungkinkan Anda untuk mempublikasikan build `1.0-SNAPSHOT` in`R`, tetapi juga akan mencegah `R` versi lain dari paket itu dari `U` yang belum dipertahankan.