

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Uso de instantáneas de Maven
<a name="maven-snapshots"></a>

 Una *instantánea* de Maven es una versión especial de un paquete de Maven que hace referencia al código de rama de producción más reciente. Es una versión de desarrollo que precede a la versión de lanzamiento final. Puede identificar una versión instantánea de un paquete de Maven por el sufijo `SNAPSHOT` que se adjunta a la versión del paquete. Por ejemplo, la instantánea de la versión `1.1` es `1.1-SNAPSHOT`. Para obtener más información, consulte [What is a SNAPSHOT version?](https://maven.apache.org/guides/getting-started/index.html#What_is_a_SNAPSHOT_version) en el sitio web del Proyecto Apache Maven. 

 AWS CodeArtifact admite la publicación y el consumo de instantáneas de Maven. Las instantáneas únicas que utilizan un número de versión basado en el tiempo son las únicas instantáneas compatibles. CodeArtifact no admite las instantáneas no únicas generadas por los clientes de Maven 2. Puedes publicar una instantánea de Maven compatible en cualquier repositorio. CodeArtifact 

**Topics**
+ [Publicación de instantáneas en CodeArtifact](#maven-snapshot-publishing)
+ [Consumo de versiones de instantánea](#maven-consuming-snapshot-versions)
+ [Eliminación de versiones de instantánea](#maven-deleting-snapshot-versions)
+ [Publicación de instantáneas con curl](#maven-snapshot-publishing-curl)
+ [Instantáneas y conexiones externas](#maven-snapshot-external-connections)
+ [Instantáneas y repositorios originales](#maven-snapshot-upstream-repositories)

## Publicación de instantáneas en CodeArtifact
<a name="maven-snapshot-publishing"></a>

AWS CodeArtifact admite los patrones de solicitud que los clientes, por ejemplo`mvn`, utilizan al publicar instantáneas. Por eso, puede seguir la documentación de su herramienta de compilación o administrador de paquetes sin tener una comprensión detallada de cómo se publican las instantáneas de Maven. Si está haciendo algo más complejo, en esta sección se describe en detalle cómo CodeArtifact gestiona las instantáneas. 

 Cuando se publica una instantánea de Maven en un CodeArtifact repositorio, su versión anterior se conserva en una nueva versión denominada compilación. Cada vez que se publica una instantánea de Maven, se crea una nueva versión de compilación. Todas las versiones anteriores de una instantánea se mantienen en sus versiones de compilación. Cuando se publica una instantánea de Maven, el estado de la versión del paquete se establece en `Published` y el estado de la compilación que contiene la versión anterior se establece en `Unlisted`. Este comportamiento solo se aplica a las versiones del paquete de Maven en las que la versión del paquete tiene un sufijo `-SNAPSHOT`. 

Por ejemplo, las versiones instantáneas de un paquete maven denominado se `com.mycompany.myapp:pkg-1` cargan en un CodeArtifact repositorio denominado. `my-maven-repo` La versión de instantánea es `1.0-SNAPSHOT`. Hasta el momento, no se ha publicado ninguna versión de `com.mycompany.myapp:pkg-1`. En primer lugar, los activos de la versión inicial se publican en las siguientes rutas:

```
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
```

Tenga en cuenta que la marca de tiempo `20210728.194552-1` la genera el cliente que publica las compilaciones instantáneas.

Una vez cargados los archivos .pom y .jar, la única versión de `com.mycompany.myapp:pkg-1` que existe en el repositorio es `1.0-20210728.194552-1`. Esto ocurre aunque lo sea la versión especificada en la ruta anterior sea `1.0-SNAPSHOT`. El estado de la versión del paquete en este momento es `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"
}
```

A continuación, el cliente carga el archivo `maven-metadata.xml` de la versión del paquete:

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

Cuando el archivo maven-metadata.xml se carga correctamente, CodeArtifact crea la versión `1.0-SNAPSHOT` del paquete y establece la `1.0-20210728.194552-1` versión en. `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"
}
```

En este punto, la versión de instantánea `1.0-SNAPSHOT` se puede consumir en una compilación. Si bien hay dos versiones de `com.mycompany.myapp:pkg-1` en el repositorio `my-maven-repo`, ambas contienen los mismos activos.

```
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"
]
```

Ejecutar el mismo comando `list-package-version-assets` como se mostró anteriormente con el parámetro `--package-version` cambiado a `1.0-20210728.194552-1` da como resultado una salida idéntica.

A medida que se añaden compilaciones adicionales de `1.0-SNAPSHOT` al repositorio, se crea una nueva versión del paquete `Unlisted` para cada nueva compilación. Los activos de la versión `1.0-SNAPSHOT` se actualizan cada vez para que la versión siempre haga referencia a la última compilación de esa versión. La actualización de `1.0-SNAPSHOT` con los activos más recientes se inicia cargando el archivo `maven-metadata.xml` de la nueva compilación. 

## Consumo de versiones de instantánea
<a name="maven-consuming-snapshot-versions"></a>

Si solicita una instantánea, se devuelve la versión con el estado `Published`. Esta es siempre la versión más reciente de la instantánea de Maven. También puede solicitar una compilación concreta de una instantánea utilizando el número de versión de la compilación (por ejemplo, `1.0-20210728.194552-1`) en lugar de la versión de la instantánea (por ejemplo, `1.0-SNAPSHOT`) en la ruta URL. Para ver las versiones compiladas de una instantánea de Maven, usa la [ListPackageVersions ](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListPackageVersions.html)API de la *Guía de CodeArtifact API* y establece el parámetro de estado en. `Unlisted`

## Eliminación de versiones de instantánea
<a name="maven-deleting-snapshot-versions"></a>

Para eliminar todas las versiones compiladas de una instantánea de Maven, usa la [DeletePackageVersions](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DeletePackageVersions.html)API y especifica las versiones que deseas eliminar.

## Publicación de instantáneas con curl
<a name="maven-snapshot-publishing-curl"></a>

Si tiene versiones instantáneas existentes almacenadas en Amazon Simple Storage Service (Amazon S3) o en otro producto de repositorio de artefactos, puede que desee volver a publicarlas en. AWS CodeArtifact Debido a la compatibilidad CodeArtifact con las instantáneas de Maven (consulte[Publicación de instantáneas en CodeArtifact](#maven-snapshot-publishing)), publicar las instantáneas con un cliente HTTP genérico, por ejemplo, `curl` es más complejo que publicar las versiones de lanzamiento de Maven, tal como se describe en. [Publicación con curl](maven-curl.md) Tenga en cuenta que esta sección no es relevante si está creando e implementando versiones instantáneas con un cliente Maven como `mvn` o `gradle`. Debe seguir la documentación de ese cliente.

La publicación de una versión instantánea implica publicar una o más compilaciones de una versión instantánea. Si hay *n* compilaciones de una versión instantánea, habrá *n \+ 1 CodeArtifact versiones: *n** versiones de compilación, todas con el estado de`Unlisted`, y una versión instantánea (la última compilación publicada) con el estado de. CodeArtifact `Published` La versión instantánea (es decir, la versión con una cadena de versión que contiene «-SNAPSHOT») contiene un conjunto de activos idéntico al de la última compilación publicada. La forma más sencilla de crear esta estructura usando `curl` es la siguiente:

1. Publique todos los activos de todas las compilaciones utilizando `curl`. 

1. Publique el archivo `maven-metadata.xml` de la última compilación (es decir, la compilación con la marca de fecha y hora más reciente) con `curl`. Esto creará una versión con «`-SNAPSHOT`» en la cadena de la versión y con el conjunto correcto de activos.

1. Usa la [UpdatePackageVersionsStatus](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html)API para establecer el estado de todas las versiones de compilación que no sean las más recientes. `Unlisted` 

 Use los siguientes comandos `curl` para publicar activos de instantáneas (como archivos.jar y .pom) para la versión `1.0-SNAPSHOT` de instantánea de un paquete `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}}
```

Al usar estos ejemplos:
+ {{my\_domain}}Sustitúyalo por tu nombre CodeArtifact de dominio.
+ {{111122223333}}Sustitúyelo por el Cuenta de AWS ID del propietario de su CodeArtifact dominio.
+ {{us-west-2}}Sustitúyalo por el nombre Región de AWS en el que se encuentra tu CodeArtifact dominio.
+ {{my\_maven\_repo}}Sustitúyalo por el nombre de tu CodeArtifact repositorio.

**importante**  
Debe anteponer el valor del parámetro `--data-binary` con el carácter `@`. Al escribir el valor entre comillas, `@` debe incluirse dentro de las comillas.

Es posible que tenga que cargar más de dos recursos para cada compilación. Por ejemplo, puede haber archivos Javadoc y JAR de origen además del JAR principal y `pom.xml`. No es necesario publicar archivos de suma de verificación para los activos de la versión del paquete, ya que genera CodeArtifact automáticamente sumas de verificación para cada activo cargado. Para verificar que los activos se cargaron correctamente, busque las sumas de verificación generadas mediante el comando `list-package-version-assets` y compárelas con las sumas de verificación originales. Para obtener más información sobre cómo se gestionan CodeArtifact las sumas de comprobación de Maven, consulte. [Uso de sumas de comprobación de Maven](maven-checksums.md)

Utilice el siguiente comando curl para publicar el archivo `maven-metadata.xml` de la última versión de compilación:

```
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
```

El archivo `maven-metadata.xml` debe hacer referencia al menos a uno de los activos de la última versión de compilación del elemento `<snapshotVersions>`. Además, el valor `<timestamp>` debe estar presente y debe coincidir con la marca de tiempo de los nombres de los archivos de los activos. Por ejemplo, para la compilación `20210729.171330-2` publicada anteriormente, el contenido de `maven-metadata.xml` sería: 

```
<?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>
```

Una vez publicada `maven-metadata.xml`, el último paso consiste en configurar todas las demás versiones de compilación (es decir, todas las versiones de compilación excepto la última) para que tengan un estado de versión de paquete de `Unlisted`. Por ejemplo, si la versión `1.0-SNAPSHOT` tiene dos compilaciones, siendo la primera compilación `20210728.194552-1`, el comando para configurar esa compilación en `Unlisted` es:

```
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
```

## Instantáneas y conexiones externas
<a name="maven-snapshot-external-connections"></a>

Las instantáneas de Maven no se pueden obtener de un repositorio público de Maven a través de una conexión externa. AWS CodeArtifact solo admite la importación de versiones de lanzamiento de Maven.

## Instantáneas y repositorios originales
<a name="maven-snapshot-upstream-repositories"></a>

En general, las instantáneas de Maven funcionan de la misma manera que las versiones de lanzamiento de Maven cuando se utilizan con repositorios originales, pero existe una limitación si planea publicar instantáneas de la misma versión de paquete en dos repositorios que tienen una relación ascendente. Por ejemplo, supongamos que hay dos repositorios en un AWS CodeArtifact dominio `R` y`U`, donde `U` hay un upstream de. `R` Si publicas una nueva versión`R`, cuando un cliente de Maven solicite la última compilación de esa versión instantánea, CodeArtifact devolverá la última versión de. `U` Esto puede chocar, porque la última versión ya está disponible en `R`, no en `U`. Hay dos formas de evitar esto:

1. No publique compilaciones de una versión de instantánea como, por ejemplo, `1.0-SNAPSHOT` en `R` si existe `1.0-SNAPSHOT` en `U`.

1. Usa los controles de origen CodeArtifact del paquete para deshabilitar las secuencias ascendentes de ese paquete. `R` Esto último le va a permitir publicar compilaciones propias de `1.0-SNAPSHOT` en `R`, pero también evitará que `R` obtenga otras versiones de dicho paquete desde `U` que ya no se conserven.