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 SNAPSHOT versión? 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 ejemplo1.0-20210728.194552-1) en lugar de la versión instantánea (por ejemplo,1.0-SNAPSHOT) de la URL ruta. Para ver las versiones compiladas de una instantánea de Maven, usa las de la CodeArtifact APIGuía y establece el parámetro de estado ListPackageVersions APIen. Unlisted

Eliminación de versiones de instantánea

Para eliminar todas las versiones compiladas de una instantánea de Maven, utilice la DeletePackageVersionsAPI, especificando las versiones que desea 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 HTTP cliente genérico, por ejemplo, curl es más complejo que publicar las versiones 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. Utilice el UpdatePackageVersionsStatusAPIpara 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:

  • Reemplazar my_domain con tu nombre CodeArtifact de dominio.

  • Reemplazar 111122223333 con el Cuenta de AWS ID del propietario de tu CodeArtifact dominio.

  • Reemplazar us-west-2 con el nombre Región de AWS en el que se encuentra tu CodeArtifact dominio.

  • Reemplazar my_maven_repo con 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, es posible que haya Javadoc y JAR archivos fuente además del archivo principal JAR 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 recurso 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 publicadas de Maven cuando se utilizan con repositorios originales, pero existe una limitación si se planea publicar instantáneas de la misma versión del paquete en dos repositorios que tengan una relación ascendente. Por ejemplo, supongamos que hay dos repositorios en un AWS CodeArtifact dominio y, ¿dónde está un repositorio ascendente de? R U U R Si publicas una nueva versiónR, 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 ser inesperado, ya que la última versión ya está disponibleR, noU. Hay dos formas de evitarlo:

  1. No publique compilaciones de una versión instantánea como, por ejemploR, 1.0-SNAPSHOT en, si 1.0-SNAPSHOT existe enU.

  2. Usa los controles de origen CodeArtifact del paquete para deshabilitar las secuencias ascendentes de ese paquete enR. Esto último te permitirá publicar versiones de 1.0-SNAPSHOT inR, pero también R evitará que obtengas otras versiones de ese paquete que aún no estén conservadas. U