Usar snapshot do Maven - CodeArtifact

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar snapshot do Maven

Um snapshot do Maven é uma versão especial de um pacote do Maven que se refere ao código de ramificação de produção mais recente. É uma versão de desenvolvimento que precede a versão final de lançamento. Você pode identificar a versão de snapshot de um pacote do Maven pelo sufixo SNAPSHOT anexado à versão do pacote. Por exemplo, o snapshot da versão 1.1 é 1.1-SNAPSHOT. Para obter mais informações, consulte O que é uma SNAPSHOT versão? no site do Projeto Apache Maven.

AWS CodeArtifact suporta a publicação e o consumo de instantâneos do Maven. Instantâneos exclusivos que usam um número de versão baseado em tempo são os únicos instantâneos compatíveis. CodeArtifact não suporta instantâneos não exclusivos que são gerados por clientes Maven 2. Você pode publicar um snapshot compatível do Maven em qualquer CodeArtifact repositório.

Publicação de instantâneos em CodeArtifact

AWS CodeArtifact suporta os padrões de solicitação que os clientes, por exemplomvn, usam ao publicar instantâneos. Por isso, você pode seguir a documentação da sua ferramenta de compilação ou gerenciador de pacotes sem ter uma compreensão detalhada de como os snapshots do Maven são publicados. Se você estiver fazendo algo mais complexo, esta seção descreve em detalhes como CodeArtifact lidar com instantâneos.

Quando um snapshot do Maven é publicado em um CodeArtifact repositório, sua versão anterior é preservada em uma nova versão chamada compilação. Cada vez que um snapshot do Maven é publicado, uma nova versão de compilação é criada. Todas as versões anteriores de um snapshot são mantidas em suas versões de compilação. Quando um snapshot do Maven é publicado, o status da versão do pacote é definido como Published e o status da compilação que contém a versão anterior é definido como Unlisted. Esse comportamento se aplica somente às versões do pacote Maven onde o sufixo é -SNAPSHOT.

Por exemplo, versões instantâneas de um pacote maven chamado com.mycompany.myapp:pkg-1 são enviadas para um CodeArtifact repositório chamado. my-maven-repo A versão de snapshot é 1.0-SNAPSHOT. Até o momento, nenhuma versão do com.mycompany.myapp:pkg-1 foi publicada. Primeiro, os ativos da compilação inicial são publicados nos seguintes caminhos:

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

Observe que o timestamp 20210728.194552-1 é gerado pelo cliente que publica as compilações do snapshot.

Depois que os arquivos .pom e .jar forem carregados, a única versão do com.mycompany.myapp:pkg-1 presente no repositório será 1.0-20210728.194552-1. Isso acontece mesmo que a versão especificada no caminho anterior seja 1.0-SNAPSHOT. O status da versão do pacote nesse momento é 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" }

Em seguida, o cliente faz o upload do arquivo maven-metadata.xml para a versão do pacote:

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

Quando o arquivo maven-metadata.xml é carregado com sucesso, CodeArtifact cria a versão do 1.0-SNAPSHOT pacote e define a 1.0-20210728.194552-1 versão comoUnlisted.

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" }

Nesse ponto, a versão de snapshot 1.0-SNAPSHOT pode ser consumida em uma compilação. Embora existam duas versões do com.mycompany.myapp:pkg-1 no repositório my-maven-repo, ambas contêm os mesmos ativos.

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

Executar o mesmo comando list-package-version-assets mostrado anteriormente com o parâmetro --package-version alterado para 1.0-20210728.194552-1 resulta em uma saída idêntica.

À medida que outras compilações do 1.0-SNAPSHOT são adicionadas ao repositório, uma nova versão Unlisted do pacote é criada para cada nova compilação. Os ativos da versão 1.0-SNAPSHOT são atualizados todas as vezes, para que a versão sempre se refira à compilação mais recente. A atualização do 1.0-SNAPSHOT com os ativos mais recentes é iniciada com o upload do arquivo maven-metadata.xml para a nova compilação.

Consumir versões de snapshot

Se você solicitar um snapshot, a versão com o status Published será retornada. É sempre a versão mais recente de snapshot do Maven. Você também pode solicitar uma compilação específica de um snapshot usando o número da versão da compilação (por exemplo,1.0-20210728.194552-1) em vez da versão do snapshot (por exemplo,1.0-SNAPSHOT) no URL caminho. Para ver as versões de compilação de um snapshot do Maven, use o ListPackageVersions APIno CodeArtifact APIGuia e defina o parâmetro de status como. Unlisted

Excluir versões de snapshot

Para excluir todas as versões de compilação de um snapshot do Maven, use o DeletePackageVersionsAPI, especificando as versões que você deseja excluir.

Publicação de snapshot com curl

Se você tiver versões de snapshots existentes armazenadas no Amazon Simple Storage Service (Amazon S3) ou em outro produto de repositório de artefatos, talvez queira republicá-las no. AWS CodeArtifact Por causa da forma como CodeArtifact suporta instantâneos do Maven (consultePublicação de instantâneos em CodeArtifact), publicar instantâneos com um HTTP cliente genérico como o curl é mais complexo do que publicar versões de lançamento do Maven, conforme descrito em. Publicar com curl Observe que esta seção não será relevante se você estiver criando e implantando versões de snapshot com um cliente Maven como mvn ou gradle. É preciso seguir a documentação desse cliente.

Publicar uma versão de snapshot envolve a publicação de uma ou mais compilações. Em CodeArtifact, se houver n compilações de uma versão de instantâneo, haverá n + 1 CodeArtifact versões: n versões de compilação, todas com um status deUnlisted, e uma versão de instantâneo (a última compilação publicada) com um status de. Published A versão do snapshot (ou seja, a versão com uma string de versão que contém “-SNAPSHOT”) contém um conjunto de ativos idêntico ao da última compilação publicada. A forma mais fácil de criar essa estrutura usando curl é a seguinte:

  1. Publique todos os ativos de todas as compilações usando curl.

  2. Publique o arquivo maven-metadata.xml da compilação mais recente (ou seja, a compilação com a marca de data e hora mais recente) com curl. Isso criará uma versão com “-SNAPSHOT” na string da versão e com o conjunto correto de ativos.

  3. Use o UpdatePackageVersionsStatusAPIpara definir o status de todas as versões de compilação não mais recentes comoUnlisted.

Use os comandos curl a seguir para publicar ativos de snapshots (como arquivos. jar e .pom) para a versão 1.0-SNAPSHOT de snapshot de um pacote 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

Ao usar esses exemplos:

  • Substituir my_domain com seu nome CodeArtifact de domínio.

  • Substituir 111122223333 com o Conta da AWS ID do proprietário do seu CodeArtifact domínio.

  • Substituir us-west-2 com o local Região da AWS em que seu CodeArtifact domínio está localizado.

  • Substituir my_maven_repo com o nome CodeArtifact do seu repositório.

Importante

Será preciso prefixar o valor do parâmetro --data-binary com o caractere @. Ao colocar o valor entre aspas, @ deve ser incluído entre aspas.

Você pode ter mais de dois ativos para carregar em cada compilação. Por exemplo, pode haver JAR arquivos Javadoc e de origem, além do principal e. JAR pom.xml Não é necessário publicar arquivos de soma de verificação para os ativos da versão do pacote porque gera CodeArtifact automaticamente somas de verificação para cada ativo carregado. Para verificar se os ativos foram carregados corretamente, busque as somas de verificação geradas usando o comando list-package-version-assets e compare-as com as originais. Para obter mais informações sobre como CodeArtifact manipula as somas de verificação do Maven, consulte. Usar somas de verificação do Maven

Use o comando curl a seguir para publicar o arquivo maven-metadata.xml para a versão de compilação mais recente:

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

O arquivo maven-metadata.xml deve fazer referência a pelo menos um dos ativos na versão de compilação mais recente do elemento <snapshotVersions>. Além disso, o valor <timestamp> deve estar presente e corresponder ao timestamp nos nomes dos arquivos do ativo. Por exemplo, para a compilação de 20210729.171330-2 publicada anteriormente, o conteúdo de maven-metadata.xml deve ser:

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

Depois da publicação de maven-metadata.xml, a última etapa é definir que todas as outras versões de compilação (ou seja, todas as versões de compilação, exceto a compilação mais recente) tenham o status de versão do pacote de Unlisted. Por exemplo, se a versão 1.0-SNAPSHOT tiver duas compilações, sendo a primeira compilação 20210728.194552-1, o comando para definir essa compilação como Unlisted será:

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

Snapshots e conexões externas

Os instantâneos do Maven não podem ser obtidos de um repositório público do Maven por meio de uma conexão externa. AWS CodeArtifact só suporta a importação de versões de lançamento do Maven.

Snapshots e repositórios upstream

Em geral, os instantâneos do Maven funcionam da mesma forma que as versões de lançamento do Maven quando usados com repositórios upstream, mas há uma limitação se você planeja publicar instantâneos da mesma versão do pacote em dois repositórios que tenham um relacionamento upstream. Por exemplo, digamos que há dois repositórios em um AWS CodeArtifact domínio R eU, onde U está um upstream de. R Se você publicar uma nova compilaçãoR, quando um cliente Maven solicitar a compilação mais recente dessa versão de snapshot, CodeArtifact retornará a versão mais recente de. U Isso pode ser inesperado, já que a versão mais recente já está R disponível, nãoU. Há duas maneiras de evitar isso:

  1. Não publique compilações de uma versão de instantâneo, como 1.0-SNAPSHOT emR, se 1.0-SNAPSHOT existir em. U

  2. Use os controles de origem CodeArtifact do pacote para desativar os upstreams desse pacote em. R O último permitirá que você publique compilações do 1.0-SNAPSHOT inR, mas também R impedirá a obtenção de outras versões desse pacote que ainda não U tenham sido mantidas.