Uso de instantáneas de Maven - CodeArtifact

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

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 ¿Qué es una versión de SNAPSHOT? 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

Publicación de instantáneas en CodeArtifact

AWS CodeArtifact admite los patrones de solicitud que los clientes, por ejemplomvn, 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

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 API de la Guía de CodeArtifact API y establece el parámetro de estado en. Unlisted

Eliminación de versiones de instantánea

Para eliminar todas las versiones compiladas de una instantánea de Maven, usa la DeletePackageVersionsAPI y especifica las versiones que deseas eliminar.

Publicación de instantáneas con curl

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 (consultePublicación de instantáneas en CodeArtifact), 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 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 deUnlisted, 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.

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

  3. Usa la UpdatePackageVersionsStatusAPI 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:

  • Sustituye my_domain por tu CodeArtifact nombre de dominio.

  • Sustituye 111122223333 por el Cuenta de AWS ID del propietario de tu dominio. CodeArtifact

  • Sustituya us-west-2 por el lugar en Región de AWS el que se encuentra CodeArtifact su dominio.

  • Sustituye my_maven_repo por el nombre de tu repositorio. CodeArtifact

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 comprobación para los activos de la versión del paquete, ya que genera CodeArtifact automáticamente sumas de comprobació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

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

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

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. Por ejemplo, supongamos que hay dos repositorios en un AWS CodeArtifact dominio R yU, donde U hay un upstream de. R En este caso, puede publicar libremente compilaciones instantáneas de un paquete determinado (por ejemplo, 1.0-SNAPSHOT de com.mycompany.app:pkg-1) tanto en R como en U. Sin embargo, hay algunos comportamientos importantes que hay que tener en cuenta a la hora de consumir compilaciones instantáneas desde R (el repositorio descendente).

Un diagrama de cómo funcionan las instantáneas de Maven.
  1. Si 1.0-SNAPSHOT está presente en R, solo se pueden recuperar los activos de 1.0-SNAPSHOT en R con un administrador de paquetes configurado para extraer paquetes de R. No se puede recuperar un activo de 1.0-SNAPSHOT en U a través de R. Esto se debe a que la versión instantánea de U aparece sombreada por la versión de R. Este comportamiento es idéntico al de las versiones de lanzamiento de Maven y al comportamiento de otros formatos de paquetes. En el diagrama, un GET de /maven/R/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20221231.002230-3.jar devolverá un código de respuesta HTTP 200 (OK), pero un GET de /maven/R/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20221220.150959-1.jar devolverá un código de respuesta HTTP 404 (no encontrado).

  2. Si 1.0-SNAPSHOT está presente en U pero no en R, puede extraer activos 1.0-SNAPSHOT de R. Esto hará que 1.0-SNAPSHOT se conserve en R, al igual que en una versión de lanzamiento.

  3. Una vez retenido 1.0-SNAPSHOT en R, puede publicar compilaciones adicionales de 1.0-SNAPSHOT en U. Sin embargo, no se podrá acceder a ellas desde R debido al comportamiento descrito en el punto (1). Esto significa que la razón estándar para usar versiones instantáneas, es decir, consumir la última versión de una dependencia a través de una versión instantánea específica, no funciona como se esperaba en una relación anterior. Aunque se publiquen nuevas versiones de 1.0-SNAPSHOT en U, los consumidores no pueden acceder a la versión más reciente de 1.0-SNAPSHOT de R. Para solucionar este problema, elimine periódicamente la versión 1.0-SNAPSHOT en R o configure el cliente para que extraiga versiones de 1.0-SNAPSHOT de U.

  4. Se puede acceder a las versiones de compilación de la instantánea Unlisted desde el repositorio posterior. En el diagrama, un GET de /maven/R/com/mycompany/myapp/pkg-1/1.0-20221220.150959-1/pkg-1-1.0-20221220.150959-1.jar devolverá un código de respuesta de 200 (OK). Aunque esto solicite un activo presente en el repositorio original, dado que la versión se direcciona mediante la cadena de versión compilada (1.0-20221220.150959-1), el activo se puede recuperar a través del repositorio descendente. Este GET también hará que la versión 1.0-20221220.150959-1 se conserve en R, con un estado de versión del paquete de Unlisted.