

A Amazon não CodeCatalyst está mais aberta a novos clientes. Os clientes atuais podem continuar usando o serviço normalmente. Para obter mais informações, consulte [Como migrar do CodeCatalyst](migration.md).

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

# Publique e compartilhe pacotes de software no CodeCatalyst
<a name="packages"></a>

A Amazon CodeCatalyst contém um serviço de repositório de pacotes totalmente gerenciado que facilita para sua equipe de desenvolvimento armazenar e compartilhar com segurança pacotes de software usados para desenvolvimento de aplicativos. Esses pacotes são armazenados em repositórios de pacotes, que são criados e organizados em projetos em CodeCatalyst.

Um único repositório de pacotes pode armazenar pacotes de todos os tipos de pacotes compatíveis. CodeCatalyst suporta os seguintes formatos de pacote:
+ npm
+ Maven
+ NuGet
+ Python

Os pacotes em um repositório de pacotes podem ser descobertos e compartilhados entre os membros do projeto que contém o repositório.

Para publicar pacotes e consumir pacotes de um repositório para outro, configure um gerenciador de pacotes para usar o endpoint do repositório (URL). Em seguida, você pode usar o gerenciador de pacotes para publicar pacotes no repositório. Você pode usar gerenciadores de pacotes, como Maven, Gradle, npm, yarn, nuget, dotnet, pip e twine.

Você também pode configurar CodeCatalyst fluxos de trabalho para usar repositórios de CodeCatalyst pacotes. Para ter mais informações sobre o uso de pacotes em fluxos de trabalho, consulte [Conectar repositórios de pacotes a fluxos de trabalho](workflows-packages.md).

Você pode disponibilizar pacotes de um repositório para outro no mesmo projeto. Para isso, adicione-os como um repositório upstream. Todas as versões do pacote disponíveis para o repositório upstream também estão disponíveis para o repositório downstream. Para obter mais informações, consulte [Configuração e uso de repositórios upstream](packages-upstream-repositories.md).

**Você pode disponibilizar pacotes de código aberto para seu CodeCatalyst repositório criando um tipo especial de repositório chamado gateway.** O upstreaming para um repositório de gateway permite que você consuma pacotes de repositórios públicos populares, como npmjs.com e pypi.org, e os armazene automaticamente em seu repositório. CodeCatalyst Para obter mais informações, consulte [Conexão a repositórios externos públicos](packages-connect-external.md).

**Topics**
+ [Conceitos dos pacotes](packages-concepts.md)
+ [Configuração e uso de repositórios de pacotes](packages-repositories.md)
+ [Configuração e uso de repositórios upstream](packages-upstream-repositories.md)
+ [Conexão a repositórios externos públicos](packages-connect-external.md)
+ [Publicação e modificação de pacotes](working-with-packages.md)
+ [Uso de npm](packages-npm.md)
+ [Usando o Maven](packages-maven.md)
+ [Usando NuGet](packages-nuget.md)
+ [Usar o Python](packages-python.md)
+ [Cotas para pacotes](packages-quotas.md)

# Conceitos dos pacotes
<a name="packages-concepts"></a>

Aqui estão alguns conceitos e termos que você deve conhecer ao gerenciar, publicar ou consumir pacotes CodeCatalyst.

## Pacotes
<a name="packages-concepts-packages"></a>

Um *pacote* é um pacote que inclui o software e os metadados necessários para instalar o software e resolver quaisquer dependências. CodeCatalyst suporta o formato de pacote npm.

Um pacote consiste em:
+ Um nome (por exemplo, `webpack` é o nome de um pacote npm conhecido)
+ Um [namespace](#packages-concepts-package-namespaces) opcional (por exemplo, `@types` em `@types/node`)
+ Um conjunto de [versões](#packages-concepts-package-versions) (por exemplo, `1.0.0`, `1.0.1`, `1.0.2`)
+ Metadados em nível de pacote (por exemplo, tags npm dist)

## Namespaces de pacote
<a name="packages-concepts-package-namespaces"></a>

Alguns formatos de pacotes permitem a utilização de nomes de pacotes hierárquicos para organizar os pacotes em grupos lógicos e ajudar a evitar colisões de nomes. Pacotes com o mesmo nome podem ser armazenados em namespaces diferentes. Por exemplo, o npm suporta escopos, e o pacote npm `@types/node` tem um escopo `@types` e um nome `node`. Há vários outros nomes de pacotes no escopo `@types`. Em CodeCatalyst, o escopo (“tipos”) é chamado de namespace do pacote e o nome (“nó”) é chamado de nome do pacote. Para pacotes do Maven, o namespace do pacote corresponde ao groupID do Maven. O pacote `org.apache.logging.log4j:log4j` do Maven tem o groupID (namespace do pacote) `org.apache.logging.log4j` e o artifactID (nome do pacote) `log4j`. Alguns formatos de pacotes, como do Python, não permitem a utilização de nomes hierárquicos com um conceito semelhante ao escopo do npm ou ao groupID do Maven. Se não houver nenhuma maneira de agrupar nomes de pacotes, evitar colisões de nomes pode ser mais difícil.

## Versões do pacote
<a name="packages-concepts-package-versions"></a>

A *versão do pacote* identifica a versão específica de um pacote, como `@types/node@12.6.9`. O formato e a semântica do número da versão variam conforme os diferentes formatos de pacote. Por exemplo, as versões dos pacotes do npm devem estar em conformidade com a [especificação de Versionamento semântico](https://semver.org/). Em CodeCatalyst, uma versão do pacote consiste no identificador da versão, nos package-version-level metadados e em um conjunto de ativos.

## Ativos
<a name="packages-concepts-assets"></a>

Um *ativo* é um arquivo individual armazenado CodeCatalyst que está associado a uma versão do pacote, como um arquivo npm ou um `.tgz` arquivo Maven POM ou JAR.

## Repositórios de pacotes
<a name="packages-concepts-repository"></a>

Um *repositório de CodeCatalyst pacotes* contém um conjunto de [pacotes](#packages-concepts-packages), que contêm [versões de pacotes](#packages-concepts-package-versions), cada uma delas mapeada para um conjunto de [ativos](#packages-concepts-assets). Os repositórios de pacotes são poliglotas, o que significa que um único repositório pode conter pacotes de qualquer tipo compatível. Cada repositório de pacotes expõe endpoints para buscar e publicar pacotes usando ferramentas como NuGet CLIs (`nuget`,), a CLI`dotnet`, a `npm` CLI do Maven () e o Python (e`mvn`). CLIs `pip` `twine` Para obter informações sobre cotas de pacotes em CodeCatalyst, incluindo quantos repositórios de pacotes podem ser criados em cada espaço, consulte. [Cotas para pacotes](packages-quotas.md)

Você pode vincular um repositório de pacotes a outro definindo-o como upstream. Quando um repositório é definido como upstream, você pode usar qualquer pacote do upstream, bem como quaisquer repositórios upstream adicionais na cadeia. Para obter mais informações, consulte [Repositórios upstream](#packages-concepts-upstream-repositories).

Os repositórios de gateway são um tipo especial de repositório de pacotes que extrai e armazena pacotes de autoridades externas oficiais de pacotes. Para obter mais informações, consulte [Repositórios de gateway](#packages-concepts-gateway-repositories).

## Repositórios upstream
<a name="packages-concepts-upstream-repositories"></a>

Você pode usar CodeCatalyst para criar um relacionamento upstream entre dois repositórios de pacotes. Um repositório de pacotes é *upstream* quando as versões do pacote contidas nele podem ser acessadas a partir do endpoint do repositório de pacotes downstream. Com um relacionamento inicial, o conteúdo dos dois repositórios de pacotes é mesclado com eficácia do ponto de vista de um cliente.

Por exemplo, se um gerenciador de pacotes solicitar uma versão de pacote que não existe em um repositório, CodeCatalyst pesquisará a versão do pacote nos repositórios upstream configurados. Os repositórios upstream são pesquisados na ordem em que estão configurados e, quando um pacote é encontrado, CodeCatalyst a pesquisa é interrompida. 

## Repositórios de gateway
<a name="packages-concepts-gateway-repositories"></a>

Um *repositório de gateway* é um tipo especial de repositório de pacotes conectado a uma autoridade de pacotes oficial e externa compatível. Ao adicionar um repositório de gateway como [repositório upstream](#packages-concepts-upstream-repositories), você pode consumir pacotes da autoridade oficial de pacotes correspondente. Seu repositório downstream não se comunica com o repositório público; em vez disso, tudo é intermediado pelo repositório de gateway. Os pacotes consumidos dessa maneira são armazenados no repositório de gateway e no repositório downstream que recebeu a solicitação original.

Os repositórios de gateway são predefinidos, mas devem ser criados em cada projeto para serem usados. A lista a seguir contém todos os repositórios de gateway que podem ser criados CodeCatalyst e a autoridade do pacote à qual eles estão conectados.
+ **npm-public-registry-gateway**fornece pacotes npm de npmjs.com.
+ **maven-central-gateway**fornece pacotes Maven do repositório Maven Central.
+ **google-android-gateway**fornece pacotes Maven do Google Android.
+ **commonsware-gateway** fornece pacotes Maven de. CommonsWare
+ **gradle-plugins-gateway**fornece pacotes Maven dos plug-ins do Gradle.
+ **nuget-gallery-gateway**fornece NuGet pacotes da NuGet Galeria.
+ **pypi-gateway** fornece pacotes Python do Python Package Index.

# Configuração e uso de repositórios de pacotes
<a name="packages-repositories"></a>

Em CodeCatalyst, os pacotes são armazenados e gerenciados dentro dos repositórios de pacotes. Para publicar pacotes CodeCatalyst ou consumir pacotes de um CodeCatalyst (ou de qualquer repositório de pacotes público compatível), você deve criar um repositório de pacotes e conectar seu gerenciador de pacotes a ele.

**Topics**
+ [Criação de um repositório de pacotes](packages-repositories-create.md)
+ [Conexão a um repositório de pacotes](packages-repositories-connect.md)
+ [Exclusão de um repositório de pacotes](packages-repositories-delete.md)

# Criação de um repositório de pacotes
<a name="packages-repositories-create"></a>

Execute as etapas a seguir para criar um repositório de pacotes no CodeCatalyst.

**Para criar um repositório de pacotes**

1. Abra o CodeCatalyst console em [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Navegue até o projeto onde você deseja criar um repositório de pacotes.

1. No painel de navegação, selecione **Pacotes**.

1. Na página **Repositórios de pacotes**, selecione **Criar repositório de pacotes**.

1. Na seção **Detalhes do repositório de pacotes**, adicione o seguinte:

   1. **Nome do repositório**. Considere usar um nome descritivo com detalhes como o nome do projeto ou da equipe, ou como o repositório será usado.

   1. (Opcional) **Descrição**. Uma descrição do repositório é especialmente útil quando você tem vários repositórios em várias equipes em um projeto.

1. Na seção **Repositórios upstream, escolha Selecionar repositórios** **upstream para adicionar qualquer repositório** de pacotes que você queira acessar por meio do seu repositório de pacotes. CodeCatalyst **Você pode adicionar **repositórios do Gateway** para se conectar a repositórios de pacotes externos ou outros CodeCatalyst repositórios.**

   1. Quando um pacote é solicitado em um repositório de pacotes, os repositórios upstream são pesquisados na ordem em que aparecem nessa lista. Quando um pacote for encontrado, CodeCatalyst ele deixará de pesquisar. Para alterar a ordem dos repositórios upstream, você pode arrastar e soltar os repositórios na lista.

1. Selecione **Criar** para criar seu repositório de pacotes.

# Conexão a um repositório de pacotes
<a name="packages-repositories-connect"></a>

Para publicar ou consumir pacotes de CodeCatalyst, você deve configurar seu gerenciador de pacotes com as informações e CodeCatalyst credenciais do endpoint do repositório de pacotes. Se você não criou um repositório, pode fazer isso seguindo as instruções em [Criação de um repositório de pacotes](packages-repositories-create.md).

Para obter instruções sobre como conectar um gerenciador de pacotes a um repositório de CodeCatalyst pacotes, consulte a documentação a seguir.
+ [Configuração e uso do Gradle Groovy](packages-maven-gradle.md)
+ [Configuração e uso de mvn](packages-maven-mvn.md)
+ [Configuração e uso da CLI nuget ou dotnet](packages-nuget-cli.md)
+ [Configuração e uso de npm](packages-npm-use.md)
+ [Configurar pip e instalação de pacotes Python](packages-python-pip.md)
+ [Configuração do Twine e publicação de pacotes Python](packages-python-twine.md)

# Exclusão de um repositório de pacotes
<a name="packages-repositories-delete"></a>

Execute as etapas a seguir para excluir um repositório de pacotes no CodeCatalyst.

**Para excluir um repositório de pacotes**

1. Abra o CodeCatalyst console em [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Navegue até o projeto que contém o repositório de pacotes que deseja excluir.

1. No painel de navegação, selecione **Pacotes**.

1. Na página **Repositórios de pacotes**, escolha o repositório que deseja excluir.

1. Escolha **Excluir**.

1. Analise as informações fornecidas sobre os efeitos da exclusão de um repositório de pacotes.

1. Insira `delete` no campo de entrada e selecione **Excluir**.

# Configuração e uso de repositórios upstream
<a name="packages-upstream-repositories"></a>

Você pode conectar os repositórios de gateway e outros repositórios de CodeCatalyst pacotes como upstreams aos seus repositórios de pacotes. Isso permite que um cliente gerenciador de pacotes acesse os pacotes contidos em mais de um repositório de pacotes usando um único endpoint de repositório de pacotes. Confira a seguir os principais benefícios do uso de repositórios upstream:
+ Você só precisa configurar o gerenciador de pacotes com um único endpoint de repositório para extrair de várias fontes.
+ Os pacotes consumidos de um repositório upstream são armazenados em seu repositório downstream, o que garante que seus pacotes estejam disponíveis mesmo que o repositório upstream sofra interrupções inesperadas ou que os pacotes no repositório upstream sejam excluídos.

Você pode adicionar repositórios upstream ao criar um repositório de pacotes. Você também pode adicionar ou remover repositórios upstream dos repositórios de pacotes existentes no console. CodeCatalyst 

Quando você adiciona um repositório de gateway como repositório upstream, o repositório de pacotes é conectado ao repositório de pacotes público correspondente do repositório de gateway. Para ver uma lista dos repositórios de pacotes públicos compatíveis, consulte [Repositórios de pacotes externos compatíveis e repositórios de gateway](packages-connect-external.md#packages-upstream-repositories-supported-external).

Você pode vincular vários repositórios como repositórios upstream. Por exemplo, suponha que sua equipe crie um repositório chamado `project-repo` e já esteja usando outro repositório chamado `team-repo` que foi **npm-public-registry-gateway**adicionado como um repositório upstream, que está conectado ao repositório npm público,. `npmjs.com` Você pode adicionar `team-repo` como um repositório upstream a `project-repo`. Nesse caso, você só precisa configurar o gerenciador de pacotes para usar `project-repo` para extrair pacotes de `project-repo`, `team-repo`, `npm-public-registry-gateway` e `npmjs.com`.

**Topics**
+ [Adição de um repositório upstream](packages-upstream-repositories-add.md)
+ [Edição da ordem de pesquisa dos repositórios upstream](packages-upstream-repositories-search-order.md)
+ [Solicitar uma versão do pacote com repositórios upstream](packages-upstream-repositories-request.md)
+ [Remoção de um repositório upstream](packages-upstream-repositories-remove.md)

# Adição de um repositório upstream
<a name="packages-upstream-repositories-add"></a>

Adicionar um repositório de pacotes público ou outro repositório de CodeCatalyst pacotes como repositório upstream ao seu repositório downstream disponibiliza todos os pacotes no repositório upstream para gerenciadores de pacotes conectados ao repositório downstream.

**Para adicionar um repositório upstream**

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Na página **Repositórios de pacotes**, escolha o repositório de pacotes ao qual deseja adicionar um repositório upstream.

1. No nome do repositório de pacotes, selecione **Upstreams** e **Selecionar repositórios upstream**.

1. Em **Selecionar tipo upstream**, escolha uma das seguintes opções:
   + **Repositórios de gateway**

     É possível escolher em uma lista de repositórios de gateway disponíveis.
**nota**  
Para se conectar a autoridades públicas externas de pacotes, como Maven Central, npmjs.com ou Nuget Gallery, CodeCatalyst use repositórios de gateway como repositórios intermediários que pesquisam e armazenam pacotes retirados de repositórios externos. Isso economiza tempo e transferência de dados, pois todos os repositórios de pacotes em um projeto usarão pacotes do repositório intermediário do gateway. Para obter mais informações, consulte [Conexão a repositórios externos públicos](packages-connect-external.md).
   + **CodeCatalyst repositórios**

     Você pode escolher entre uma lista de repositórios de CodeCatalyst pacotes disponíveis em seu projeto.

1. Depois de selecionar todos os repositórios que você deseja adicionar como repositórios upstream, selecione **Selecionar** e **Salvar**.

   Para ter mais informações sobre como alterar a ordem de pesquisa de repositórios upstream, consulte [Edição da ordem de pesquisa dos repositórios upstream](packages-upstream-repositories-search-order.md).

Depois de adicionar um repositório upstream, você pode usar um gerenciador de pacotes conectado ao seu repositório local para buscar pacotes do repositório upstream. Você não precisa atualizar a configuração do gerenciador de pacotes. Para ter mais informações sobre como solicitar versões de pacotes de um repositório upstream, consulte [Solicitar uma versão do pacote com repositórios upstream](packages-upstream-repositories-request.md).

# Edição da ordem de pesquisa dos repositórios upstream
<a name="packages-upstream-repositories-search-order"></a>

CodeCatalyst pesquisa repositórios upstream em sua ordem de pesquisa configurada. Quando um pacote é encontrado, CodeCatalyst interrompe a pesquisa. Você pode alterar a ordem na qual os repositórios upstream são pesquisados por pacotes.

**Para editar a ordem de pesquisa dos repositórios upstream**

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Na página **Repositórios de pacotes**, escolha o repositório de pacotes cuja ordem de pesquisa do repositório upstream você deseja editar.

1. Abaixo do nome do repositório de pacotes, selecione **Upstreams**.

1. Na seção **Repositórios upstream**, você pode ver os repositórios upstream e a ordem de pesquisa. Para alterar a ordem de pesquisa, arraste e solte os repositórios na lista.

1. Quando terminar de editar a ordem de pesquisa dos repositórios upstream, escolha **Salvar**.

# Solicitar uma versão do pacote com repositórios upstream
<a name="packages-upstream-repositories-request"></a>

O exemplo a seguir mostra os cenários possíveis quando um gerenciador de pacotes solicita um pacote de um repositório de CodeCatalyst pacotes que tenha repositórios upstream.

Neste exemplo, um gerenciador de pacotes, como `npm`, solicita uma versão de pacote de um repositório de pacotes chamado `downstream` que tem vários repositórios upstream. Quando o pacote é solicitado, o seguinte pode ocorrer:
+  Se `downstream` contiver a versão do pacote solicitada, ela será devolvida ao cliente. 
+  Se `downstream` não contiver a versão do pacote solicitada, CodeCatalyst procurará por ela nos `downstream` repositórios upstream, na ordem de pesquisa configurada. Se a versão do pacote for encontrada, uma referência a ela será copiada para `downstream` e a versão do pacote será devolvida ao cliente. 
+  Se `downstream` nem seus repositórios upstream contiverem a versão do pacote, uma resposta HTTP 404 de `Not Found` será exibida ao cliente.

 A quantidade máxima de repositórios upstream diretos permitidos para um repositório é dez. O número máximo de CodeCatalyst pesquisas nos repositórios quando uma versão do pacote é solicitada é 25. 

## Retenção de pacotes de repositórios upstream
<a name="package-retention-upstream-repos"></a>

Se uma versão de pacote solicitada for encontrada em um repositório upstream, uma referência a ela será retida e estará sempre disponível no repositório que a solicitou. Isso garante que você tenha acesso aos seus pacotes se houver uma interrupção inesperada do repositório upstream. A versão retida do pacote não é afetada por nenhum das seguintes ações: 
+  Excluir o repositório upstream. 
+  Desconectar o repositório upstream do repositório downstream. 
+  Excluir a versão do pacote do repositório upstream. 
+  Editar a versão do pacote no repositório upstream (por exemplo, adicionar um novo ativo a ele). 

## Busca de pacotes por meio de uma relação upstream
<a name="fetching-packages-through-an-upstream-relationship"></a>

CodeCatalyst pode buscar pacotes por meio de vários repositórios vinculados chamados repositórios upstream. Se um repositório de CodeCatalyst pacotes tiver uma conexão upstream com outro repositório de CodeCatalyst pacotes que tenha uma conexão upstream com um repositório gateway, as solicitações de pacotes que não estão no repositório upstream serão copiadas do repositório externo. Por exemplo, considere a seguinte configuração: um repositório chamado `repo-A` tem uma conexão upstream com o repositório do gateway,. `npm-public-registry-gateway` `npm-public-registry-gateway`tem uma conexão upstream com o repositório público de pacotes,. [https://npmjs.com](https://npmjs.com)

![\[Diagrama de repositório upstream simples mostrando três repositórios encadeados.\]](http://docs.aws.amazon.com/pt_br/codecatalyst/latest/userguide/images/packages/upstream-with-external.png)


Se `npm` estiver configurado para usar o `repo-A` repositório, a execução `npm install` inicia a cópia dos pacotes de [https://npmjs.com](https://npmjs.com)dentro. `npm-public-registry-gateway` As versões instaladas também são incorporadas em `repo-A`. O exemplo a seguir instala o `lodash`.

```
$ npm config get registry
https://packages.region.codecatalyst.aws/npm/space-name/proj-name/repo-name/
$ npm install lodash
+ lodash@4.17.20
added 1 package from 2 contributors in 6.933s
```

Depois de executar `npm install`, `repo-A` contém apenas a versão mais recente (`lodash 4.17.20`) porque essa é a versão que foi obtida por `npm` de `repo-A`.

 Como `npm-public-registry-gateway` tem uma conexão upstream externa com [https://npmjs.com](https://npmjs.com), todas as versões do pacote importadas [https://npmjs.com](https://npmjs.com)são armazenadas em`npm-public-registry-gateway`. Essas versões do pacote poderiam ter sido obtidas por qualquer repositório downstream com uma conexão upstream que leva a `npm-public-registry-gateway`. 

O conteúdo de `npm-public-registry-gateway` fornece uma maneira de você ver todos os pacotes e versões de pacotes importados [https://npmjs.com](https://npmjs.com)ao longo do tempo.

## Retenção de pacotes em repositórios intermediários
<a name="package-retention-intermediate-repositories"></a>

 CodeCatalyst permite encadear repositórios upstream. Por exemplo, `repo-A` pode ter `repo-B` como repositório upstream e `repo-B` pode ter `repo-C` como repositório upstream. Essa configuração faz com que as versões do pacote sejam inseridas no `repo-B` e `repo-C` disponíveis do `repo-A`. 

![\[Diagrama de repositório upstream simples mostrando três repositórios encadeados.\]](http://docs.aws.amazon.com/pt_br/codecatalyst/latest/userguide/images/packages/upstream-chaining.png)


 Quando um gerenciador de pacotes se conecta ao repositório `repo-A` e busca uma versão do pacote no repositório `repo-C`, a versão do pacote não será retida no repositório `repo-B`. A versão do pacote só será retida no repositório mais downstream, que, neste exemplo, é `repo-A`. Ela não será retida em nenhum repositório intermediário. Isso também vale para cadeias mais longas. Por exemplo, se houvesse quatro repositórios: `repo-A`, `repo-B`, `repo-C` e `repo-D` e um gerenciador de pacotes conectado ao `repo-A` buscasse uma versão do pacote no `repo-D`, a versão do pacote seria retida em `repo-A`, mas não em `repo-B` ou `repo-C`. 

O comportamento de retenção do pacote é semelhante ao extrair uma versão do pacote de um repositório de pacotes público, exceto que a versão do pacote é sempre retida no repositório de gateway que tem a conexão upstream direta com o repositório público. Por exemplo, `repo-A` tem `repo-B` como repositório upstream. `repo-B` tem `npm-public-registry-gateway` como um repositório upstream, que tem uma conexão upstream com o repositório público, **npmjs.com**; veja o diagrama abaixo.

![\[Diagrama do repositório upstream mostrando três repositórios encadeados com uma conexão upstream externa com npmjs.com.\]](http://docs.aws.amazon.com/pt_br/codecatalyst/latest/userguide/images/packages/upstream-chaining-external.png)


 **Se um gerenciador de pacotes conectado ao `repo-A` solicitar uma versão de pacote específica, por exemplo, *lodash 4.17.20*, e a versão do pacote não estiver presente em nenhum dos três repositórios, ela será obtida em npmjs.com.** Quando o *lodash 4.17.20* for obtido, ele será retido no `repo-A`, pois é o repositório mais downstream, e no `npm-public-registry-gateway`, pois tem a conexão upstream com o repositório externo público **npmjs.com**. O *lodash 4.17.20* não será retido no `repo-B`, pois é um repositório intermediário. 

# Remoção de um repositório upstream
<a name="packages-upstream-repositories-remove"></a>

Se você não quiser mais acessar os pacotes em um repositório upstream, poderá remover o repositório upstream de um repositório de pacotes.

**Atenção**  
Ao remover um repositório upstream, você pode quebrar cadeias de relacionamento upstream, o que pode quebrar seus projetos ou compilações.

**Para remover um repositório upstream**

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Na página **Repositórios de pacotes**, escolha o repositório de pacotes do qual você deseja remover um repositório upstream.

1. Abaixo do nome do repositório de pacotes, selecione **Upstreams**.

1. Em **Editar repositórios upstream**, localize o repositório upstream que você deseja remover e escolha ![\[Remove\]](http://docs.aws.amazon.com/pt_br/codecatalyst/latest/userguide/images/packages/remove.png).

1. Ao concluir a remoção dos repositórios upstream, selecione **Salvar**.

# Conexão a repositórios externos públicos
<a name="packages-connect-external"></a>

Você pode conectar repositórios de CodeCatalyst pacotes a repositórios externos públicos compatíveis adicionando o repositório de gateway correspondente como um repositório upstream. Os repositórios de gateway atuam como repositórios intermediários que pesquisam e armazenam pacotes extraídos de repositórios externos. Isso economiza tempo e transferência de dados porque todos os repositórios de pacotes em um projeto podem usar pacotes armazenados no repositório de gateway.

**Para se conectar a um repositório público usando repositórios de gateway**

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Em **Pacotes**, escolha a página **Repositórios do gateway**. Você pode ver uma lista dos repositórios de gateway compatíveis e das respectivas descrições. 

1. Para usar um repositório de gateway, primeiro você deve criá-lo. Se o repositório de gateway tiver sido criado, a data e a hora em que ele foi criado serão mostradas. Caso contrário, selecione **Criar** para criá-lo.

1. Para usar pacotes do repositório do gateway, você deve definir uma conexão upstream com ele a partir de um CodeCatalyst repositório. Selecione **Repositórios de pacotes** e escolha o repositório de pacotes ao qual você deseja se conectar.

1. Para se conectar ao repositório público, selecione **Upstreams** e **Selecionar repositórios upstream**.

1. Selecione **Repositórios de gateway** e selecione o repositório de gateway que corresponde ao repositório público ao qual você deseja se conectar como um repositório upstream.

1. Depois de selecionar todos os repositórios de gateway que você deseja adicionar como repositórios upstream, escolha **Selecionar**.

1. Ao concluir o pedido dos repositórios upstream, selecione **Salvar**.

Para obter mais informações sobre como repositórios upstream, consulte [Configuração e uso de repositórios upstream](packages-upstream-repositories.md).

Depois de adicionar um repositório de gateway como repositório upstream, você pode usar um gerenciador de pacotes conectado ao repositório local para buscar pacotes do repositório de pacotes externo público que corresponde a ele. Você não precisa atualizar a configuração do gerenciador de pacotes. Os pacotes consumidos dessa maneira são armazenados no repositório de gateway e no repositório de pacotes local. Para ter mais informações sobre como solicitar versões de pacotes de um repositório upstream, consulte [Solicitar uma versão do pacote com repositórios upstream](packages-upstream-repositories-request.md).

## Repositórios de pacotes externos compatíveis e repositórios de gateway
<a name="packages-upstream-repositories-supported-external"></a>

CodeCatalyst suporta a adição de uma conexão upstream às seguintes autoridades oficiais de pacotes com repositórios de gateway.


| Tipo de pacote do repositório | Description | Nome do repositório de gateway | 
| --- | --- | --- | 
| npm | Registro npm público | npm-public-registry-gateway | 
| Python | Python Package Index | pypi-gateway | 
| Maven | Maven Central | maven-central-gateway | 
| Maven | Repositório do Google Android | google-android-gateway | 
| Maven | CommonsWare | commonsware-gateway | 
| Maven | Repositório de plug-ins do Gradle | gradle-plugins-gateway | 
| NuGet | NuGet Galeria | nuget-gallery-gateway | 

# Publicação e modificação de pacotes
<a name="working-with-packages"></a>

Um *pacote* CodeCatalyst é um pacote de software e os metadados necessários para resolver dependências e instalar o software. Para obter uma lista dos formatos de pacote compatíveis em CodeCatalyst, consulte[Publique e compartilhe pacotes de software no CodeCatalyst](packages.md). Esta seção fornece informações sobre publicação, visualização, exclusão de pacotes e atualização do status da versão de um pacote.

**Topics**
+ [Publicando pacotes em um repositório de CodeCatalyst pacotes](package-publishing.md)
+ [Visualização de detalhes da versão de pacote](working-with-packages-view.md)
+ [Exclusão de uma versão de pacote](working-with-packages-delete.md)
+ [Atualização do status da versão do pacote](working-with-packages-update-version-status.md)
+ [Editar controles de origem do pacote](package-origin-controls.md)

# Publicando pacotes em um repositório de CodeCatalyst pacotes
<a name="package-publishing"></a>

 Você pode publicar versões de qualquer tipo de pacote compatível em um repositório de CodeCatalyst pacotes usando as ferramentas do gerenciador de pacotes. As etapas para publicar uma versão do pacote são as seguintes:

**Para publicar uma versão de pacote em um repositório de CodeCatalyst pacotes**

1. Caso contrário, [crie um repositório de pacotes](packages-repositories-create.md).

1. Conecte o gerenciador de pacotes ao repositório de pacotes. Para obter instruções sobre como conectar o gerenciador de pacotes npm a um repositório de CodeCatalyst pacotes, consulte. [Configuração e uso de npm](packages-npm-use.md)

1. Use o gerenciador de pacotes conectado para publicar as versões de pacotes.

**Contents**
+ [Repositórios de publicação e upstream](#package-publishing-upstreams)
+ [Pacotes privados e repositórios públicos](#package-publishing-upstreams-direct)
+ [Substituindo ativos do pacote](#package-publishing-overwrite-assets)

## Repositórios de publicação e upstream
<a name="package-publishing-upstreams"></a>

Em CodeCatalyst, você não pode publicar versões de pacotes que estejam presentes em repositórios upstream acessíveis ou em repositórios públicos. Por exemplo, suponha que você queira publicar um pacote npm, `lodash@1.0`, em um repositório de pacotes, `myrepo`, e `myrepo` esteja conectado a npmjs.com por meio de um repositório de gateway configurado como um repositório upstream. Se `lodash@1.0` estiver presente no repositório upstream ou em npmjs.com, CodeCatalyst rejeita qualquer tentativa de publicar nele emitindo um erro de conflito 409. `myrepo` Isso ajuda a evitar que você publique acidentalmente um pacote com o mesmo nome e a mesma versão de um pacote em um repositório upstream, o que pode resultar em um comportamento inesperado. 

Você ainda pode publicar versões diferentes de um nome de pacote que existam em um repositório upstream. Por exemplo, se `lodash@1.0` estiver presente em um repositório upstream, mas `lodash@1.1` não estiver, você poderá publicar `lodash@1.1` no repositório downstream.

## Pacotes privados e repositórios públicos
<a name="package-publishing-upstreams-direct"></a>

 CodeCatalyst não publica pacotes armazenados em CodeCatalyst repositórios em repositórios públicos, como npmjs.com ou Maven Central. CodeCatalyst importa pacotes de repositórios públicos para um CodeCatalyst repositório, mas não move pacotes na direção oposta. Os pacotes que você publica CodeCatalyst nos repositórios permanecem privados e só estão disponíveis para o CodeCatalyst projeto ao qual o repositório pertence.

## Substituindo ativos do pacote
<a name="package-publishing-overwrite-assets"></a>

 Você não pode republicar um ativo de pacote que já existe com conteúdo diferente. Por exemplo, suponha que você já tenha publicado um pacote Maven com um ativo `mypackage-1.0.jar` JAR. Você só poderá publicar esse ativo outra vez se a soma de verificação dos ativos antigos e novos for idêntica. Para republicar o mesmo ativo com novo conteúdo, primeiro exclua a versão do pacote. Tentar republicar o mesmo nome de ativo com conteúdo diferente resultará em um erro de conflito HTTP 409. 

Para formatos de pacote compatíveis com vários ativos (Python e Maven), você pode adicionar novos ativos com nomes diferentes a uma versão de pacote existente a qualquer momento, supondo que você tenha as permissões necessárias. Como o npm suporta NuGet apenas um único ativo por versão do pacote, para modificar uma versão publicada do pacote, você deve primeiro excluí-la. 

 Se você tentar republicar um ativo que já existe (por exemplo, `mypackage-1.0.jar`) e o conteúdo do ativo publicado e o do novo ativo forem idênticos, a operação será bem-sucedida porque é idempotente. 

# Visualização de detalhes da versão de pacote
<a name="working-with-packages-view"></a>

Você pode usar o CodeCatalyst console para ver detalhes sobre uma versão específica do pacote.

**Para visualizar detalhes da versão de pacote**

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Na página **Repositórios de pacotes**, selecione o repositório que contém a versão do pacote cujos detalhes você deseja visualizar.

1. Pesquise a versão do pacote na tabela **Pacotes**. Você pode usar a barra de pesquisa para filtrar pacotes por nome e formato de pacote. Escolha o pacote na lista.

1. Na página **Detalhes do pacote**, selecione **Versões** e então selecione a versão que você deseja visualizar.

# Exclusão de uma versão de pacote
<a name="working-with-packages-delete"></a>

Você pode excluir uma versão do **pacote na página de detalhes da versão** do pacote no CodeCatalyst console.

**Para excluir uma versão de pacote**

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Na página **Repositórios de pacotes**, selecione o repositório que contém a versão do pacote que você deseja excluir.

1. Pesquise e selecione o pacote na tabela.

1. Na página **Detalhes do pacote**, selecione **Versões** e selecione a versão que deseja excluir.

1. Na página **Detalhes da versão do pacote**, selecione **Ações da versão** e **Excluir**.

1. Insira *excluir* no campo de texto e selecione **Excluir**.

# Atualização do status da versão do pacote
<a name="working-with-packages-update-version-status"></a>

Cada versão do pacote CodeCatalyst tem um status que descreve o estado atual e a disponibilidade da versão do pacote. Você pode alterar o status da versão do pacote no CodeCatalyst console. Para ter mais informações sobre os possíveis valores de status das versões do pacote e seus significados, consulte [Satus da versão do pacote](#package-version-status).

**Como atualizar o status da versão do pacote**

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Na página **Repositórios de pacotes**, selecione o repositório que contém a versão do pacote cujo status você deseja atualizar.

1. Pesquise e selecione o pacote na tabela.

1. Na página **Detalhes do pacote**, selecione **Versões** e então selecione a versão que você deseja visualizar.

1. Na página **Detalhes da versão do pacote**, selecione **Ações** e selecione **Remover da lista**, **Arquivar** ou **Descartar**. Para ter mais informações sobre o status da versão do pacote, consulte [Satus da versão do pacote](#package-version-status).

1. Insira o texto de confirmação no campo de texto e selecione **Remover da lista**, **Arquivar** ou **Descartar**, dependendo do status para o qual você está atualizando.

## Satus da versão do pacote
<a name="package-version-status"></a>

Os seguintes valores de status da versão do pacote são possíveis. Você pode alterar o status da versão do pacote no console. Para obter mais informações, consulte [Atualização do status da versão do pacote](#working-with-packages-update-version-status).
+  **Publicado**: a versão do pacote foi publicada com sucesso e pode ser solicitada por um gerenciador de pacotes. A versão do pacote será incluída nas listas de versões de pacotes retornadas aos gerentes de pacotes, por exemplo, na saída de `npm view <package-name> versions`. Todos os ativos da versão do pacote estão disponíveis no repositório. 
+  **Não concluído**: a última tentativa de publicação não foi concluída. No momento, apenas as versões do pacote Maven podem ter o status de **Não concluído**. Isso pode ocorrer quando o cliente carrega um ou mais ativos para uma versão do pacote, mas não publica um arquivo `maven-metadata.xml` para o pacote que inclui essa versão. 
+  **Não listado**: os ativos da versão do pacote estão disponíveis para download no repositório, mas a versão do pacote não está incluída na lista de versões retornadas aos gerenciadores de pacotes. Por exemplo, para um pacote npm, a saída de `npm view <package-name> versions` não inclui a versão do pacote. Isso significa que a lógica de resolução de dependências do npm não seleciona a versão do pacote porque a versão não aparece na lista de versões disponíveis. No entanto, se a versão do pacote **Não listado** já estiver referenciada em um arquivo `npm package-lock.json`, ela ainda poderá ser baixada e instalada, por exemplo, durante a execução de `npm ci`. 
+  **Arquivado**: os ativos da versão do pacote não podem ser baixados. A versão do pacote não será incluída na lista de versões retornada aos gerenciadores de pacotes. Como os ativos não estão disponíveis, o consumo da versão do pacote pelos clientes é bloqueado. Se a compilação da aplicação depender de uma versão atualizada para **Arquivado**, a compilação falhará, a menos que a versão do pacote tenha sido armazenada em cache localmente. Você não pode usar um gerenciador de pacotes ou uma ferramenta de criação para republicar uma versão de pacote **Arquivado** porque ela ainda está presente no repositório. No entanto, você pode alterar o status da versão do pacote de volta para **Não listado** ou **Publicado** no console. 
+  **Descartada**: a versão do pacote não aparece nas listagens e os ativos não podem ser baixados do repositório. A principal diferença entre **descartado** e **arquivado** é que, com o status de **descartado**, os ativos da versão do pacote são excluídos permanentemente pelo. CodeCatalyst Por esse motivo, você não pode mover uma versão de pacote de **Descartada** para **Arquivada**, **Não Listada** ou **Publicada**. A versão do pacote não pode ser usada porque os ativos foram excluídos. Quando uma versão do pacote for marcada como **Descartada**, você não será cobrado pelo armazenamento dos ativos do pacote. 

 Além dos status na lista anterior, uma versão do pacote também pode ser excluída. Depois de ser excluída, uma versão do pacote não está no repositório e você pode republicá-la livremente usando um gerenciador de pacotes ou uma ferramenta de compilação. 

## Normalização do nome e da versão do pacote e do nome do ativo
<a name="package-name-normalization"></a>

CodeCatalyst normaliza nomes de pacotes, versões de pacotes e nomes de ativos antes de armazená-los, o que significa que os nomes ou versões CodeCatalyst podem ser diferentes do nome ou versão fornecidos quando o pacote foi publicado. Para obter mais informações sobre como os nomes e as versões são normalizados CodeCatalyst para cada tipo de pacote, consulte a documentação a seguir.
+ [Normalização do nome do pacote Python](python-name-normalization.md)
+ [NuGet normalização do nome do pacote, versão e nome do ativo](nuget-name-normalization.md)

CodeCatalyst não executa a normalização em outros formatos de pacote.

# Editar controles de origem do pacote
<a name="package-origin-controls"></a>

Na Amazon CodeCatalyst, as versões de pacotes podem ser adicionadas a um repositório de pacotes publicando-as diretamente, retirando-as de um repositório upstream ou ingerindo-as de um repositório público externo por meio de um gateway. Se você permitir que versões de um pacote sejam adicionadas por publicação direta e ingestão de repositórios públicos, ficará vulnerável a um ataque de substituição de dependências. Para obter mais informações, consulte [Ataques de substituição de dependências](#dependency-substitution-attacks). Para se proteger contra um ataque de substituição de dependência, configure os controles de origem do pacote em um pacote em um repositório para limitar como as versões desse pacote podem ser adicionadas ao repositório.

Considere a possibilidade de configurar os controles de origem do pacote para permitir que novas versões de pacotes diferentes venham tanto de fontes internas, como publicação direta, quanto de fontes externas, como repositórios públicos. Por padrão, os controles de origem do pacote são configurados com base em como a primeira versão de um pacote é adicionada ao repositório.

## Configurações de controle de origem do pacote
<a name="package-origin-control-settings"></a>

Com os controles de origem do pacote, você pode configurar como as versões do pacote podem ser adicionadas a um repositório. As listas a seguir incluem as configurações e os valores disponíveis do controle de origem do pacote.

**Publicar**

Essa configuração define se as versões do pacote podem ser publicadas diretamente no repositório usando gerenciadores de pacotes ou ferramentas similares.
+ **PERMITIR**: as versões do pacote podem ser publicadas diretamente.
+ **BLOCK**: as versões do pacote não podem ser publicadas diretamente.

**Upstream**

Essa configuração define se as versões do pacote podem ser ingeridas de repositórios externos públicos ou retidas de repositórios upstream quando solicitadas por um gerenciador de pacotes.
+ **PERMITIR**: Qualquer versão do pacote pode ser retida de outros CodeCatalyst repositórios configurados como repositórios upstream ou ingerida de uma fonte pública com uma conexão externa.
+ **BLOCO**: As versões do pacote não podem ser retidas de outros CodeCatalyst repositórios configurados como repositórios upstream ou ingeridas de uma fonte pública com uma conexão externa.

### Configurações de controle de origem do pacote padrão
<a name="default-package-origin-control-settings"></a>

Os controles de origem do pacote padrão de um pacote serão baseados em como a primeira versão desse pacote é adicionada ao repositório de pacotes.
+ Se a primeira versão do pacote for publicada diretamente por um gerenciador de pacotes, as configurações serão **Publicação: PERMITIR** e **Upstream: BLOQUEAR**.
+ Se a primeira versão do pacote for ingerida de uma fonte pública, as configurações serão **Publicação: BLOQUEAR** e **Upstream: PERMITIR**.

## Cenários comuns de controle de acesso a pacotes
<a name="package-origin-control-scenarios"></a>

Esta seção descreve alguns cenários comuns de quando uma versão de pacote é adicionada a um repositório de CodeCatalyst pacotes. As configurações de controle de origem do pacote são definidas para novos pacotes, dependendo de como a primeira versão do pacote for adicionada.

Nos cenários a seguir, um *pacote interno* é publicado de um gerenciador de pacotes no seu repositório, como um pacote que você mantém. Um *pacote externo* é um pacote que existe em um repositório público que pode ser ingerido em seu repositório por meio de um repositório de gateway upstream.

**Uma versão de pacote externo é publicada para um pacote interno existente**

Nesse cenário, considere um pacote interno, *packageA*. Sua equipe publica a primeira versão do pacote do *PackageA em um repositório* de pacotes. CodeCatalyst Como essa é a primeira versão desse pacote, as configurações de controle de origem do pacote são automaticamente definidas como **Publicar: Permitir** e **Upstream: Bloquear**. Depois que o pacote é publicado no seu repositório, um pacote com o mesmo nome é publicado em um repositório público conectado ao seu repositório de CodeCatalyst pacotes. Isso pode ser uma tentativa de ataque de substituição de dependência contra o pacote interno ou pode ser uma coincidência. Independentemente disso, os controles de origem do pacote são configurados para bloquear a ingestão da nova versão externa para se protegerem contra um possível ataque.

Na imagem a seguir, o *RepoA* é seu repositório de CodeCatalyst pacotes com uma conexão upstream com o repositório. `npm-public-registry-gateway` Seu repositório contém as versões 1.1 e 2.1 de *packageA*, mas a versão 3.0 é publicada no repositório público. Normalmente, *repoA* poderia ingerir a versão 3.0 depois que o pacote fosse solicitado por um gerenciador de pacotes. Como a ingestão de pacotes está definida como **Bloquear**, a versão 3.0 não é ingerida em seu repositório de CodeCatalyst pacotes e não está disponível para gerenciadores de pacotes conectados a ele.

![\[Gráfico simples mostrando uma nova versão de pacote externo sendo bloqueada de um repositório público.\]](http://docs.aws.amazon.com/pt_br/codecatalyst/latest/userguide/images/packages/package-origin-controls-one.png)


**Uma versão de pacote interno é publicada para um pacote externo existente**

Nesse cenário, um pacote, *packageB*, existe externamente em um repositório público que você conectou ao seu repositório. Quando um gerenciador de pacotes conectado ao seu repositório solicita *packageB*, a versão do pacote é ingerida no seu repositório a partir do repositório público. Como esta é a primeira versão do pacote de *packageB* adicionada ao seu repositório, as configurações de origem do pacote são definidas como **Publicação: BLOQUEAR** e **Upstream: PERMITIR**. Mais tarde, você tenta publicar uma versão com o mesmo nome de pacote no repositório. Você pode não estar ciente do pacote público e estar tentando publicar um pacote não relacionado com o mesmo nome, ou pode estar tentando publicar uma versão corrigida ou pode estar tentando publicar diretamente a versão exata do pacote que já existe externamente. CodeCatalyst rejeita a versão que você está tentando publicar, mas você pode explicitamente substituir a rejeição e publicar a versão, se necessário.

Na imagem a seguir, o *RepoA* é seu repositório de CodeCatalyst pacotes com uma conexão upstream com o repositório. `npm-public-registry-gateway` Seu repositório de pacotes contém a versão 3.0 que foi ingerida do repositório público. Você deseja publicar a versão 1.2 no seu repositório de pacotes. Normalmente, você poderia publicar a versão 1.2 em *repoA*, mas como a publicação está definida como **Bloquear**, a versão 1.2 não pode ser publicada.

![\[Gráfico simples mostrando a publicação de pacotes bloqueada.\]](http://docs.aws.amazon.com/pt_br/codecatalyst/latest/userguide/images/packages/package-origin-controls-two.png)


**Publicar uma versão corrigida de um pacote externo existente**

Nesse cenário, um pacote, *packageB*, existe externamente em um repositório público que você conectou ao seu repositório de pacotes. Quando um gerenciador de pacotes conectado ao seu repositório solicita *packageB*, a versão do pacote é ingerida no seu repositório a partir do repositório público. Como esta é a primeira versão do pacote de *packageB* adicionada ao seu repositório, as configurações de origem do pacote são definidas como **Publicação: BLOQUEAR** e **Upstream: PERMITIR**. Sua equipe decide publicar versões corrigidas desse pacote no repositório. Para poder publicar versões de pacotes diretamente, sua equipe altera as configurações de controle de origem do pacote para **Publicação: PERMITIR** e **Upstream: BLOQUEAR**. Agora, as versões desse pacote podem ser publicadas diretamente no seu repositório e ingeridas de repositórios públicos. Depois que sua equipe publica as versões corrigidas do pacote, ela reverte as configurações de origem do pacote para **Publicação: BLOQUEAR** e **Upstream: PERMITIR**.

## Editar controles de origem do pacote
<a name="edit-package-origin-controls"></a>

Os controles de origem do pacote são configurados automaticamente com base em como a primeira versão de um pacote é adicionada ao repositório de pacotes. Para obter mais informações, consulte [Configurações de controle de origem do pacote padrão](#default-package-origin-control-settings). Para adicionar ou editar controles de origem de pacote para um pacote em um repositório de CodeCatalyst pacotes, execute as etapas no procedimento a seguir.

**Como adicionar ou editar controles de origem do pacote**

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Escolha o repositório de pacotes que contém o pacote que você deseja editar. 

1. Na tabela **Pacotes**, procure e selecione o pacote que você deseja editar.

1. Na página de resumo do pacote, selecione **Controles de origem**.

1. Em **Controles de origem**, escolha os controles de origem do pacote que deseja definir para esse pacote. As duas configurações de controle de origem do pacote, **Publicar** e **Upstream**, devem ser definidas ao mesmo tempo.
   + Para permitir a publicação direta de versões do pacote, em **Publicação**, escolha **Permitir**. Para bloquear a publicação de versões do pacote, escolha **Bloquear**.
   + Para permitir a ingestão de pacotes de repositórios externos e a extração de pacotes de repositórios upstream, em **Fontes upstream**, escolha **Permitir**. Para bloquear toda a ingestão e extração de versões de pacotes de repositórios externos e upstream, escolha **Bloquear**.

1. Escolha **Salvar**.

## Repositórios de publicação e upstream
<a name="package-publishing-upstreams"></a>

Em CodeCatalyst, você não pode publicar versões de pacotes que estejam presentes em repositórios upstream acessíveis ou em repositórios públicos. Por exemplo, suponha que você queira publicar um pacote npm `lodash@1.0` em um repositório, `myrepo`, e `myrepo` tenha um repositório upstream com uma conexão externa com npmjs.com. Considere os seguintes cenários:

1. As configurações de controle de origem do pacote em `lodash` são **Publicação: PERMITIR** e **Upstream: PERMITIR**. Se `lodash@1.0` estiver presente no repositório upstream ou em npmjs.com, CodeCatalyst rejeita qualquer tentativa de publicar nele emitindo um erro de conflito 409. `myrepo` Você ainda pode publicar uma versão diferente, como `lodash@1.1`.

1. As configurações de controle de origem do pacote em `lodash` são **Publicação: PERMITIR** e **Upstream: BLOQUEAR**. Você pode publicar qualquer versão do `lodash` no seu repositório que ainda não exista porque as versões do pacote não estão acessíveis.

1. As configurações de controle de origem do pacote em `lodash` são **Publicação: BLOQUEAR** e **Upstream: PERMITIR**. Você não pode publicar nenhuma versão do pacote diretamente no seu repositório.

## Ataques de substituição de dependências
<a name="dependency-substitution-attacks"></a>

Os gerenciadores de pacotes simplificam o processo de criação de pacotes e compartilhamento do código reutilizável. Esses pacotes podem ser pacotes privados desenvolvidos por uma organização para uso em seus aplicativos ou públicos, geralmente pacotes de código aberto, desenvolvidos fora de uma organização e distribuídos por repositórios públicos de pacotes. Quando solicitam pacotes, os desenvolvedores dependem do gerenciador de pacotes para buscar novas versões de suas dependências. Os ataques de substituição de dependência, também conhecidos como ataques de confusão de dependência, exploram o fato de que um gerenciador de pacotes normalmente não tem como distinguir as versões legítimas de um pacote de versões maliciosas. 

Os ataques de substituição de dependência pertencem a um subconjunto de ataques conhecido como ataques à cadeia de suprimentos de software. Um ataque à cadeia de suprimentos de software é um ataque que tira proveito de vulnerabilidades em qualquer ponto da cadeia de suprimentos de software.

Um ataque de substituição de dependência pode ter como alvo qualquer pessoa que use tanto pacotes desenvolvidos internamente quanto aqueles obtidos de repositórios públicos. Os invasores identificam nomes de pacotes internos e, depois, colocam estrategicamente códigos maliciosos com o mesmo nome em repositórios públicos de pacotes. Normalmente, o código malicioso é publicado em um pacote com um número de versão alto. Os gerenciadores de pacotes buscam o código malicioso desses feeds públicos porque acreditam que os pacotes maliciosos são as versões mais recentes do pacote. Isso causa uma “substituição” ou “confusão” entre o pacote desejado e o pacote malicioso, fazendo com que o código seja comprometido.

Para evitar ataques de substituição de dependências, a Amazon CodeCatalyst fornece controles de origem de pacotes. Os controles de origem de pacote são configurações que controlam como os pacotes podem ser adicionados aos seus repositórios. Os controles são configurados automaticamente quando a primeira versão do pacote de um novo pacote é adicionada a um CodeCatalyst repositório. Os controles podem garantir que as versões do pacote não possam ser publicadas diretamente no seu repositório e ingeridas de fontes públicas, protegendo você contra ataques de substituição de dependência. Para obter mais informações sobre os controles de origem de pacotes e como alterá-los, consulte[Editar controles de origem do pacote](#package-origin-controls).

# Uso de npm
<a name="packages-npm"></a>

Esses tópicos descrevem como você pode usar `npm` o gerenciador de pacotes Node.js com CodeCatalyst.

**nota**  
CodeCatalyst suportes `node v4.9.1` e mais tarde `npm v5.0.0` e mais tarde.

**Topics**
+ [Configuração e uso de npm](packages-npm-use.md)
+ [Tratamento de tags npm](packages-npm-tags.md)

# Configuração e uso de npm
<a name="packages-npm-use"></a>

Para usar `npm` com CodeCatalyst, você deve se conectar `npm` ao seu repositório de pacotes e fornecer um token de acesso pessoal (PAT) para autenticação. Você pode ver as instruções para se conectar `npm` ao seu repositório de pacotes no CodeCatalyst console.

**Contents**
+ [Configurando o npm com CodeCatalyst](#npm-configure)
+ [Instalando pacotes npm a partir de um repositório de CodeCatalyst pacotes](#npm-install)
+ [Instalando pacotes npm do npmjs por meio de CodeCatalyst](#npm-install-npmjs)
+ [Publicando pacotes npm em seu repositório de CodeCatalyst pacotes](#npm-publish)
+ [Suporte para comandos npm](#npm-commands)
  + [Comandos compatíveis que interagem com um repositório de pacotes](#supported-commands-that-interact-with-a-repository)
  + [Comandos do lado do cliente compatíveis](#supported-client-side-commands)
  + [Comandos incompatíveis](#unsupported-commands)

## Configurando o npm com CodeCatalyst
<a name="npm-configure"></a>

As instruções a seguir explicam como se autenticar e se conectar `npm` ao seu repositório de CodeCatalyst pacotes. Para ter mais informações sobre o npm, consulte a [documentação oficial do npm](https://docs.npmjs.com/).

**Para se conectar `npm` ao seu repositório de CodeCatalyst pacotes**

1. Abra o CodeCatalyst console em [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Navegue até o projeto.

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Escolha o repositório de pacotes na lista.

1. Selecione **Conectar ao repositório**.

1. Em **Detalhes da configuração**, no **Cliente do Package Manager**, selecione **Cliente do npm**.

1. Escolha o sistema operacional para ver as etapas de configuração correspondentes.

1. É necessário um token de acesso pessoal (PAT) para autenticar o npm com. CodeCatalyst Se você já possui um token, poderá usá-lo. Caso contrário, você pode criar um usando as etapas a seguir.

   1. **(Opcional):** atualize o **Nome do PAT** e a **Data de expiração**.

   1. Selecione **Criar token**.

   1. Copie e guarde o PAT em um local seguro.
**Atenção**  
Você não poderá ver ou copiar seu PAT novamente depois de fechar a caixa de diálogo. As credenciais devem ser de curta duração para minimizar o tempo que um invasor pode usar as credenciais após usá-las indevidamente.

1. Execute os comandos a seguir no diretório raiz do projeto para configurar o npm com seu repositório de pacotes. Os comandos farão o seguinte:
   + Crie um arquivo `.npmrc` no nível do projeto se o seu projeto não tiver um.
   + Adicione as informações do endpoint do repositório de pacotes ao arquivo `.npmrc` no nível do projeto.
   + Adicione suas credenciais (PAT) ao arquivo `.npmrc` no nível do usuário.

   Substitua os valores a seguir.
**nota**  
Se você estiver copiando as instruções do console, os valores nos comandos a seguir serão atualizados e não precisarão ser alterados.
   + *username*Substitua CodeCatalyst pelo seu nome de usuário.
   + *PAT*Substitua por seu CodeCatalyst PAT.
   + *space\$1name*Substitua pelo nome do seu CodeCatalyst espaço.
   + *proj\$1name*Substitua pelo nome CodeCatalyst do seu projeto.
   + *repo\$1name*Substitua pelo nome CodeCatalyst do repositório do pacote.

   ```
   npm set registry=https://packages.region.codecatalyst.aws/npm/space-name/proj-name/repo-name/ --location project
   npm set //packages.region.codecatalyst.aws/npm/space-name/proj-name/repo-name/:_authToken=username:PAT
   ```

   **Para npm 6 ou inferior:** para fazer com que o npm sempre passe o token de autenticação para CodeCatalyst, mesmo para `GET` solicitações, defina a variável de configuração always-auth da seguinte forma. `npm config set`

   ```
   npm set //packages.region.codecatalyst.aws/npm/space-name/proj-name/repo-name/:always-auth=true --location project
   ```

## Instalando pacotes npm a partir de um repositório de CodeCatalyst pacotes
<a name="npm-install"></a>

Depois de conectar o npm ao seu repositório seguindo as etapas em [Configurando o npm com CodeCatalyst](#npm-configure), você pode executar comandos `npm` no seu repositório.

Você pode instalar um pacote npm que esteja no seu repositório de CodeCatalyst pacotes ou em um de seus repositórios upstream com o comando. `npm install`

```
npm install lodash
```

## Instalando pacotes npm do npmjs por meio de CodeCatalyst
<a name="npm-install-npmjs"></a>

Você pode instalar pacotes npm do [npmjs.com](https://www.npmjs.com/) por meio de um repositório configurando o CodeCatalyst repositório com uma conexão upstream com o repositório do gateway conectado ao npmjs.com,. **npm-public-registry-gateway** Os pacotes instalados em npmjs são ingeridos e armazenados no repositório de gateway e no repositório de pacotes downstream mais distante.

**Para instalar pacotes do npmjs**

1. Se você ainda não tiver feito isso, configure `npm` com seu repositório de CodeCatalyst pacotes seguindo as etapas em[Configurando o npm com CodeCatalyst](#npm-configure). 

1. Verifique se seu repositório adicionou o repositório do gateway, **npm-public-registry-gateway**, como uma conexão upstream. Você pode verificar quais fontes upstream foram adicionadas ou adicionadas **npm-public-registry-gateway**como fonte upstream seguindo as instruções [Adição de um repositório upstream](packages-upstream-repositories-add.md) e escolhendo o **npm-public-registry-gateway**repositório.

1. Instale pacotes com o comando `npm install`.

   ```
   npm install package_name
   ```

Para ter mais informações sobre como solicitar pacotes de repositórios upstream, consulte [Solicitar uma versão do pacote com repositórios upstream](packages-upstream-repositories-request.md).

## Publicando pacotes npm em seu repositório de CodeCatalyst pacotes
<a name="npm-publish"></a>

Depois de concluir [Configurando o npm com CodeCatalyst](#npm-configure), você pode executar comandos `npm`.

Você pode publicar um pacote npm em um repositório de CodeCatalyst pacotes com o `npm publish` comando.

```
npm publish
```

Para ter informações sobre como criar pacotes do npm, consulte [Criação de módulos Node.js](https://docs.npmjs.com/getting-started/creating-node-modules) no *Documento do npm*.

## Suporte para comandos npm
<a name="npm-commands"></a>

As seções a seguir resumem os `npm` comandos que são suportados pelos repositórios de CodeCatalyst pacotes, além de listar comandos específicos que não são suportados.

**Topics**
+ [Comandos compatíveis que interagem com um repositório de pacotes](#supported-commands-that-interact-with-a-repository)
+ [Comandos do lado do cliente compatíveis](#supported-client-side-commands)
+ [Comandos incompatíveis](#unsupported-commands)

### Comandos compatíveis que interagem com um repositório de pacotes
<a name="supported-commands-that-interact-with-a-repository"></a>

Esta seção lista os comandos `npm` em que o cliente `npm` faz uma ou mais solicitações ao registro no qual foi configurado (por exemplo, `npm config set registry`). Verificou-se que esses comandos funcionam corretamente quando invocados em um repositório de CodeCatalyst pacotes.


****  

| Command | Description | 
| --- | --- | 
|   [bugs](https://docs.npmjs.com/cli/bugs)   |  Adivinha a localização do URL do rastreador de bugs de um pacote e, depois, tenta abri-lo.  | 
|   [ci](https://docs.npmjs.com/cli/ci)   |  Instala um projeto do zero.  | 
|   [deprecate](https://docs.npmjs.com/cli/deprecate)   |  Deprecia uma versão de um pacote.  | 
|   [dist-tag](https://docs.npmjs.com/cli/dist-tag)   |  Modifica as tags de distribuição do pacote.  | 
|   [docs](https://docs.npmjs.com/cli/docs)   |  Adivinha a localização do URL de documentação de um pacote e, depois, tenta abri-lo usando o parâmetro de configuração `--browser`.  | 
|   [doctor](https://docs.npmjs.com/cli/doctor)   |  Executa um conjunto de verificações para validar se sua instalação do npm pode gerenciar seus JavaScript pacotes.  | 
|   [install](https://docs.npmjs.com/cli/install)   |  Instala um pacote.  | 
|   [install-ci-test](https://docs.npmjs.com/cli/install-ci-test)   |  Instala um projeto do zero e executa testes. Alias: `npm cit`. Esse comando executa um `npm ci`, seguido imediatamente por um `npm test`.  | 
|   [install-test](https://docs.npmjs.com/cli/install-test)   |  Instala o pacote e executa testes. Executa um `npm install`, seguido imediatamente por um `npm test`.  | 
|   [outdated](https://docs.npmjs.com/cli/outdated)   |  Verifica o registro configurado para determinar se algum pacote instalado está desatualizado.  | 
|   [ping](https://docs.npmjs.com/cli/ping)   |  Faz ping no registro npm configurado ou fornecido e verifica a autenticação.  | 
|   [publish](https://docs.npmjs.com/cli/publish)   |  Publica uma versão do pacote no registro.  | 
|   [update](https://docs.npmjs.com/cli/update)   |  Adivinha a localização do URL do repositório de um pacote e, depois, tenta abri-lo usando o parâmetro de configuração `--browser`.  | 
|   [view](https://docs.npmjs.com/cli/view)   |  Exibe os metadados do pacote. Também pode ser usado para imprimir propriedades de metadados.  | 

### Comandos do lado do cliente compatíveis
<a name="supported-client-side-commands"></a>

Esses comandos não exigem nenhuma interação direta com um repositório de pacotes, portanto, CodeCatalyst não exigem nada para suportá-los.


****  

| Command | Description | 
| --- | --- | 
|   [bin (legado)](https://docs.npmjs.com/cli/v8/commands/npm-bin)   |  Exibe o diretório npm `bin`.  | 
|   [build](https://docs.npmjs.com/cli/v6/commands/npm-build)   |  Cria um pacote.  | 
|   [cache](https://docs.npmjs.com/cli/cache)   |  Manipula o cache de pacotes.  | 
|   [completion](https://docs.npmjs.com/cli/completion)   |  Ativa o preenchimento de guias em todos os comandos npm.  | 
|   [config](https://docs.npmjs.com/cli/config)   |  Atualiza o conteúdo do usuário e dos arquivos `npmrc` globais.  | 
|   [dedupe](https://docs.npmjs.com/cli/dedupe)   |  Pesquisa a árvore de pacotes local e tenta simplificar a estrutura movendo as dependências mais para cima na árvore, onde elas podem ser compartilhadas com mais eficiência por vários pacotes dependentes.  | 
|   [edit](https://docs.npmjs.com/cli/edit)   |  Edita um pacote instalado. Seleciona uma dependência no diretório de trabalho atual e abre o diretório do pacote no editor padrão.  | 
|   [explore](https://docs.npmjs.com/cli/explore)   |  Navega por um pacote instalado. Gera um subshell no diretório do pacote instalado especificado. Se um comando for especificado, ele será executado no subshell, que será encerrado imediatamente.  | 
|   [help](https://docs.npmjs.com/cli/help)   |  Recebe ajuda no npm.  | 
|   [help-search](https://docs.npmjs.com/cli/help-search)   |  Pesquisa a documentação de ajuda do npm.  | 
|   [init](https://docs.npmjs.com/cli/init)   |  Cria um arquivo `package.json`.  | 
|   [link](https://docs.npmjs.com/cli/link)   |  Vincula um diretório de pacotes.  | 
|   [ls](https://docs.npmjs.com/cli/ls)   |  Lista pacotes instalados.  | 
|   [pack](https://docs.npmjs.com/cli/pack)   |  Cria um tarball a partir de um pacote.  | 
|   [prefix](https://docs.npmjs.com/cli/prefix)   |  Exibe um prefixo. Esse é o diretório pai mais próximo que contém um arquivo `package.json`, a menos que `-g` também seja especificado.  | 
|   [prune](https://docs.npmjs.com/cli/prune)   |  Remove pacotes que não estão listados na lista de dependências do pacote pai.  | 
|   [rebuild](https://docs.npmjs.com/cli/rebuild)   |  Executa o comando `npm build` nas pastas correspondentes.  | 
|   [restart](https://docs.npmjs.com/cli/restart)   |  Executa os scripts de parada, reinicialização e inicialização de um pacote e os scripts anteriores e posteriores associados.  | 
|   [raiz](https://docs.npmjs.com/cli/root)   |  Imprime o diretório `node_modules` efetivo na saída padrão.  | 
|   [run-script](https://docs.npmjs.com/cli/run-script)   |  Executa scripts de pacotes arbitrários.  | 
|   [shrinkwrap](https://docs.npmjs.com/cli/shrinkwrap)   |  Bloqueia as versões de dependência para publicação.  | 
|   [uninstall](https://docs.npmjs.com/cli/uninstall)   |  Desinstala um pacote.  | 

### Comandos incompatíveis
<a name="unsupported-commands"></a>

Esses `npm` comandos não são compatíveis com repositórios de CodeCatalyst pacotes.


****  

| Command | Description | Observações | 
| --- | --- | --- | 
|   [access](https://docs.npmjs.com/cli/access)   |  Define o nível de acesso nos pacotes publicados.  |  CodeCatalyst usa um modelo de permissão diferente do repositório público npmjs.  | 
|   [adduser](https://docs.npmjs.com/cli/adduser)   |  Adiciona uma conta de usuário de registro  |  CodeCatalyst usa um modelo de usuário diferente do repositório público npmjs.  | 
|   [audit](https://docs.npmjs.com/cli/audit)   |  Executa uma auditoria de segurança.  |  CodeCatalyst atualmente não vende dados de vulnerabilidade de segurança.  | 
|   [hook](https://docs.npmjs.com/cli/v9/commands/npm-hook)   |  Gerencia hooks do npm, incluindo adição, remoção, listagem e atualização.  |  CodeCatalyst atualmente não oferece suporte a nenhum mecanismo de notificação de alterações.  | 
|   [login](https://docs.npmjs.com/cli-commands/adduser.html)   |  Autentica um usuário. Este é um alias para `npm adduser`.   |  CodeCatalyst usa um modelo de autenticação diferente do repositório público npmjs. Para mais informações, consulte [Configurando o npm com CodeCatalyst](#npm-configure).  | 
|   [logout](https://docs.npmjs.com/cli/logout)   |  Sai do registro.  |  CodeCatalyst usa um modelo de autenticação diferente do repositório público npmjs. Não há como sair de um CodeCatalyst repositório, mas os tokens de autenticação expiram após o tempo de expiração configurável. A duração padrão do token é de 12 horas.   | 
|   [owner](https://docs.npmjs.com/cli/owner)   |  Gerencia proprietários de pacotes.  |  CodeCatalyst usa um modelo de permissões diferente do repositório público npmjs.  | 
|   [profile](https://docs.npmjs.com/cli/profile)   |  Altera as configurações no seu perfil de registro.  |  CodeCatalyst usa um modelo de usuário diferente do repositório público npmjs.  | 
|   [pesquisa](https://docs.npmjs.com/cli/search)   |  Pesquisa no registro por pacotes que correspondam aos termos de pesquisa.  |  CodeCatalyst não suporta o `search` comando.  | 
|   [star](https://docs.npmjs.com/cli/star)   |  Marca seus pacotes favoritos.  |  CodeCatalyst atualmente não suporta nenhum mecanismo de favoritos.  | 
|   [stars](https://docs.npmjs.com/cli/stars)   |  Exibe pacotes marcados como favoritos.  |  CodeCatalyst atualmente não suporta nenhum mecanismo de favoritos.  | 
|   [team](https://docs.npmjs.com/cli/team)   |  Gerencia equipes e associações de equipes.  |  CodeCatalyst usa um modelo de associação de usuário e grupo diferente do repositório público npmjs.  | 
|   [token](https://docs.npmjs.com/cli/token)   |  Gerencia seus tokens de autenticação.  |  CodeCatalyst usa um modelo diferente para obter tokens de autenticação. Para mais informações, consulte [Configurando o npm com CodeCatalyst](#npm-configure).  | 
|   [unpublish](https://docs.npmjs.com/cli/unpublish)   |  Remove um pacote do registro.  |  CodeCatalyst não suporta a remoção de uma versão de pacote de um repositório usando o cliente npm. É possível excluir um pacote no console.  | 
|   [whoami](https://docs.npmjs.com/cli/whoami)   |  Exibe o nome do usuário npm.  |  CodeCatalyst usa um modelo de usuário diferente do repositório público npmjs.  | 

# Tratamento de tags npm
<a name="packages-npm-tags"></a>

Os registros npm são compatíveis com *tags*, que são aliases de string para versões de pacotes. Você pode usar tags para proporcionar um alias em vez de usar números de versão. Por exemplo, você tem um projeto com vários fluxos de desenvolvimento e usa uma tag diferente (por exemplo, `stable`, `beta`, `dev`, `canary`) para cada fluxo. Para ver mais informações, consulte [dist-tag](https://docs.npmjs.com/cli/dist-tag) no *Documento do npm*. 

Por padrão, o npm usa a tag `latest` para identificar a versão atual de um pacote. `npm install pkg` (sem especificador de `@version` ou `@tag`) instala a tag mais recente. Normalmente, os projetos usam a tag mais recente para versões de lançamento estáveis. Outras tags são usadas para versões instáveis ou de pré-lançamento. 

## Edição de tags com o cliente npm
<a name="editing-tags-with-the-npm-client"></a>

 Os três `npm dist-tag` comandos (`add`,`rm`, e`ls`) funcionam da mesma forma nos repositórios de CodeCatalyst pacotes e no registro [npm padrão](https://registry.npmjs.com/).

## Tags npm e repositórios upstream
<a name="packages-tags-and-upstreams"></a>

Quando `npm` solicita as tags de um pacote e as versões desse pacote também estão presentes em um repositório upstream, CodeCatalyst mescla as tags antes de devolvê-las ao cliente. Por exemplo, um repositório chamado `R` tem um repositório upstream chamado `U`. A tabela a seguir mostra as tags de um pacote chamado `web-helper` presente nos dois repositórios.


****  

| Repositório | Nome do pacote | Tags do pacote | 
| --- | --- | --- | 
|  R  |  `web-helper`  |   *latest* (alias para a versão 1.0.0)  | 
|  U  |  `web-helper`  |   *alpha* (alias para a versão 1.0.1)  | 

Nesse caso, quando o cliente npm busca as tags do pacote `web-helper` no repositório `R`, ele recebe as tags *latest* e *alpha*. As versões para as quais as tags apontam não mudarão.

Quando a mesma tag está presente no mesmo pacote no repositório upstream e local, CodeCatalyst usa a tag que foi atualizada *pela última vez*. Por exemplo, suponha que as tags no *webhelper* tenham sido modificadas para se parecerem com as seguintes.


****  

| Repositório | Nome do pacote | Tags do pacote | Última atualização | 
| --- | --- | --- | --- | 
|  R  |  `web-helper`  |   *latest* (alias para a versão 1.0.0)  |  1º de janeiro de 2023  | 
|  U  |  `web-helper`  |   *latest* (alias para a versão 1.0.1)  |  1º de junho de 2023  | 

Nesse caso, quando o cliente npm buscar as tags para o pacote *web-helper* do repositório `R`, a tag *latest* terá um alias para a versão *1.0.1*, pois ela foi atualizada na última vez. Isso facilita o consumo de novas versões de pacotes em um repositório upstream que ainda não estão presentes em um repositório local por meio da execução de `npm update`.

# Usando o Maven
<a name="packages-maven"></a>

O formato do repositório Maven é usado por várias linguagens diferentes, incluindo Java, Kotlin, Scala e Clojure. Ele é compatível com várias ferramentas de construção diferentes, incluindo Maven, Gradle, Scala SBT, Apache Ivy e Leiningen. 

Testamos e confirmamos a compatibilidade com CodeCatalyst as seguintes versões:
+ Versão mais recente do **Maven**: 3.6.3.
+ Versão mais recente do **Gradle**: 6.4.1. A versão 5.5.1 também foi testada.

**Topics**
+ [Configuração e uso do Gradle Groovy](packages-maven-gradle.md)
+ [Configuração e uso de mvn](packages-maven-mvn.md)
+ [Publicação de pacotes com curl](packages-maven-curl.md)
+ [Usar somas de verificação e instantâneos do Maven](packages-maven-checksums-snapshots.md)

# Configuração e uso do Gradle Groovy
<a name="packages-maven-gradle"></a>

Para usar o Gradle Groovy com CodeCatalyst, você deve conectar o Gradle Groovy ao seu repositório de pacotes e fornecer um token de acesso pessoal (PAT) para autenticação. Você pode ver as instruções para conectar o Gradle Groovy ao seu repositório de pacotes no console. CodeCatalyst 

**Contents**
+ [Buscando dependências de CodeCatalyst](#gradle-fetch-dependencies)
+ [Buscando plug-ins de CodeCatalyst](#gradle-fetch-plugins)
+ [Buscando pacotes de repositórios de pacotes externos por meio de CodeCatalyst](#gradle-install-public)
+ [Publicando pacotes em CodeCatalyst](#gradle-publish-packages)
+ [Execução de uma compilação do Gradle no IntelliJ IDEA](#gradle-intellij)
  + [Método 1: colocar o PAT em `gradle.properties`](#gradle-intellij-gradle-properties)
  + [Método 2: colocar o PAT em um arquivo separado](#gradle-intellij-file)

## Buscando dependências de CodeCatalyst
<a name="gradle-fetch-dependencies"></a>

As instruções a seguir explicam como configurar o Gradle Groovy para buscar dependências no seu repositório de pacotes. CodeCatalyst 

**Para usar o Gradle Groovy para buscar dependências do seu repositório de pacotes CodeCatalyst**

1. Abra o CodeCatalyst console em [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Navegue até o projeto.

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Escolha seu repositório de pacotes na lista de repositórios de pacotes.

1. Selecione **Conectar ao repositório**.

1. Na caixa de diálogo **Conectar ao repositório**, selecione **Gradle Groovy** na lista de clientes do gerenciador de pacotes.

1. Você precisará de um token de acesso pessoal (PAT) para autenticar o Gradle Groovy. CodeCatalyst Se você já tiver um, pode usá-lo. Caso contrário, você pode criar um aqui.

   1. Selecione **Criar token**.

   1. Para copiar o PAT, selecione **Copiar**.
**Atenção**  
Você não poderá ver ou copiar seu PAT novamente depois de fechar a caixa de diálogo.

1. Atualize o arquivo de propriedades do gradle com suas credenciais de acesso. *username*Substitua pelo seu CodeCatalyst nome de usuário e *PAT* substitua pelo seu token de acesso CodeCatalyst pessoal. Você pode usar qualquer valor durante *spaceUsername* e *spacePassword* desde que use os mesmos valores nas etapas a seguir.

   ```
   spaceUsername=username
   spacePassword=PAT
   ```

1. Para buscar dependências CodeCatalyst em uma versão do Gradle, copie o trecho de `maven` código e adicione-o à `repositories` seção no arquivo do seu projeto. `build.gradle` Substitua os valores a seguir. Você pode usar qualquer valor*spaceName*, desde que use os mesmos valores nas etapas a seguir.
**nota**  
Se estiver copiando as instruções do console, os valores a seguir devem ser atualizados para você e não devem ser alterados.
   + *space\$1name*Substitua pelo nome do seu CodeCatalyst espaço.
   + *proj\$1name*Substitua pelo nome CodeCatalyst do seu projeto.
   + *repo\$1name*Substitua pelo nome CodeCatalyst do repositório do pacote.

   ```
   maven {
     name = 'spaceName'
     url = uri('https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/')
     credentials(PasswordCredentials)
   }
   ```

1. (Opcional) Para usar o repositório de CodeCatalyst pacotes como a única fonte para as dependências do seu projeto, remova todas as outras seções nos repositórios do arquivo. `build.gradle` Se você tiver mais de um repositório, o Gradle pesquisará dependências em cada repositório, na ordem em que estão listadas.

## Buscando plug-ins de CodeCatalyst
<a name="gradle-fetch-plugins"></a>

Por padrão, o Gradle resolverá plug-ins do [Portal de plug-ins do Gradle](https://plugins.gradle.org/) público. As etapas a seguir configuram seu projeto Gradle para resolver plug-ins do seu repositório de CodeCatalyst pacotes.

**Para usar o Gradle para buscar plug-ins do seu repositório de pacotes CodeCatalyst**

1. Abra o CodeCatalyst console em [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Navegue até o projeto.

1. No painel de navegação, selecione **Packages (pacotes)**.

1. Escolha seu repositório de pacotes na lista de repositórios de pacotes.

1. Selecione **Conectar ao repositório**.

1. Na caixa de diálogo **Conectar ao repositório**, selecione **Gradle** na lista de clientes do gerenciador de pacotes.

1. Você precisará de um token de acesso pessoal (PAT) para autenticar o Gradle. CodeCatalyst Se você já tiver um, pode usá-lo. Caso contrário, você pode criar um aqui.

   1. Selecione **Criar token**.

   1. Para copiar o PAT, selecione **Copiar**.
**Atenção**  
Você não poderá ver ou copiar seu PAT novamente depois de fechar a caixa de diálogo.

1. Atualize o arquivo de propriedades do gradle com suas credenciais de acesso. *username*Substitua pelo seu CodeCatalyst nome de usuário e *PAT* substitua pelo seu token de acesso CodeCatalyst pessoal. Você pode usar qualquer valor durante *spaceUsername* e *spacePassword* desde que use os mesmos valores nas etapas a seguir.

   ```
   spaceUsername=username
   spacePassword=PAT
   ```

1. Adicione um bloco `pluginManagement` ao seu arquivo `settings.gradle`. O bloco `pluginManagement` deve aparecer antes de qualquer outra declaração em `settings.gradle`. Substitua os valores a seguir.
**nota**  
Se estiver copiando as instruções do console, os valores a seguir devem ser atualizados para você e não devem ser alterados.
   + *spaceName*Substitua pelo valor do nome usado na etapa anterior.
   + *space\$1name*Substitua pelo nome do seu CodeCatalyst espaço.
   + *proj\$1name*Substitua pelo nome CodeCatalyst do seu projeto.
   + *repo\$1name*Substitua pelo nome CodeCatalyst do repositório do pacote.

   ```
   pluginManagement {
       repositories {
           maven {
               name = 'spaceName'
               url = uri('https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/')
               credentials(PasswordCredentials)
           }
       }
   }
   ```

   Isso garantirá que o Gradle resolva plug-ins do repositório especificado. O repositório deve ter uma conexão upstream configurada com o Portal de plug-ins do Gradle (por exemplo, `gradle-plugins-store`) para que os plug-ins do Gradle normalmente exigidos estejam disponíveis para a compilação. Para obter mais informações, consulte a [documentação do Gradle](https://docs.gradle.org/current/userguide/plugins.html#sec:custom_plugin_repositories).

## Buscando pacotes de repositórios de pacotes externos por meio de CodeCatalyst
<a name="gradle-install-public"></a>

Você pode instalar pacotes Maven de repositórios públicos por meio de um CodeCatalyst repositório configurando-o com uma conexão upstream com o gateway que representa o repositório do gateway. Os pacotes instalados do repositório do gateway são ingeridos e armazenados no seu CodeCatalyst repositório.

CodeCatalyst suporta os seguintes repositórios públicos de pacotes Maven.
+ maven-central-gateway
+ google-android-gateway
+ gradle-plugins-gateway
+ commonsware-gateway

**Para instalar pacotes de repositórios de pacotes públicos do Maven**

1. Se você ainda não o fez, configure o Gradle com seu repositório de CodeCatalyst pacotes seguindo as etapas em [Buscando dependências de CodeCatalyst](#gradle-fetch-dependencies) ou. [Buscando plug-ins de CodeCatalyst](#gradle-fetch-plugins) 

1. Certifique-se de que seu repositório tenha adicionado o repositório de gateway a partir do qual você deseja instalar como uma conexão upstream. Você pode fazer isso seguindo as instruções em [Adição de um repositório upstream](packages-upstream-repositories-add.md) e escolhendo o repositório público de pacotes que deseja adicionar como upstream.

Para ter mais informações sobre como solicitar pacotes de repositórios upstream, consulte [Solicitar uma versão do pacote com repositórios upstream](packages-upstream-repositories-request.md).

## Publicando pacotes em CodeCatalyst
<a name="gradle-publish-packages"></a>

Esta seção descreve como publicar uma biblioteca Java criada com o Gradle Groovy em um repositório. CodeCatalyst

**Para usar o Gradle Groovy para publicar pacotes em um repositório de pacotes CodeCatalyst**

1. Abra o CodeCatalyst console em [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Na página de visão geral do projeto, selecione **Pacotes**.

1. Escolha seu repositório de pacotes na lista de repositórios de pacotes.

1. Selecione **Conectar ao repositório**.

1. Na caixa de diálogo **Conectar ao repositório**, selecione **Gradle Groovy** na lista de clientes do gerenciador de pacotes.

1. Você precisará de um token de acesso pessoal (PAT) para autenticar o Gradle. CodeCatalyst Se você já tiver um, pode usá-lo. Caso contrário, você pode criar um aqui.

   1. Selecione **Criar token**.

   1. Para copiar o PAT, selecione **Copiar**.
**Atenção**  
Você não poderá ver ou copiar seu PAT novamente depois de fechar a caixa de diálogo.

1. Atualize o arquivo de propriedades do gradle com suas credenciais de acesso. *username*Substitua pelo seu CodeCatalyst nome de usuário e *PAT* substitua pelo seu token de acesso CodeCatalyst pessoal. Você pode usar qualquer valor durante *spaceUsername* e *spacePassword* desde que use os mesmos valores nas etapas a seguir.

   ```
   spaceUsername=username
   spacePassword=PAT
   ```

1. Adicione o plug-in `maven-publish` à seção `plugins` do arquivo `build.gradle` do projeto.

   ```
   plugins {
       id 'java-library'
       id 'maven-publish'
   }
   ```

1. Em seguida, adicione uma seção `publishing` ao arquivo `build.gradle` do projeto. Substitua os valores a seguir.
**nota**  
Se estiver copiando as instruções do console, os valores a seguir devem ser atualizados para você e não devem ser alterados.
   + *space\$1name*Substitua pelo nome do seu CodeCatalyst espaço.
   + *proj\$1name*Substitua pelo nome CodeCatalyst do seu projeto.
   + *repo\$1name*Substitua pelo nome CodeCatalyst do repositório do pacote.

   ```
   publishing {
       publications {
           mavenJava(MavenPublication) {
               groupId = 'group-id'
               artifactId = 'artifact-id'
               version = 'version'
               from components.java
           }
       }
       repositories {
           maven {
               name = 'spaceName'
               url = uri('https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/')
               credentials(PasswordCredentials)
           }
       }
   }
   ```

   O plug-in `maven-publish` gera um arquivo POM com base no `groupId`, `artifactId` e `version` especificados na seção `publishing`.

1. Depois que essas alterações em `build.gradle` forem concluídas, execute o comando a seguir para criar o projeto e carregá-lo no repositório.

   ```
   ./gradlew publish
   ```

1. Navegue até o repositório de pacotes no CodeCatalyst console para verificar se o pacote foi publicado com sucesso. Você deve ver o pacote na lista **Pacotes** do seu repositório de pacotes.

Para obter mais informações, consulte os tópicos a seguir no site do Gradle:
+  [Criar bibliotecas Java](https://guides.gradle.org/building-java-libraries/) 
+  [Publicar um projeto como um módulo](https://docs.gradle.org/current/userguide/publishing_setup.html) 

## Execução de uma compilação do Gradle no IntelliJ IDEA
<a name="gradle-intellij"></a>

Você pode executar uma compilação do Gradle no IntelliJ IDEA que extrai dependências de. CodeCatalyst Para autenticar o Gradle com CodeCatalyst, você deve usar um token de acesso pessoal (PAT). Você pode armazenar seu CodeCatalyst PAT em `gradle.properties` um arquivo separado de sua escolha.

### Método 1: colocar o PAT em `gradle.properties`
<a name="gradle-intellij-gradle-properties"></a>

Use esse método se você não estiver usando o arquivo `gradle.properties` e puder substituir o conteúdo pelo PAT. Se você estiver usando `gradle.properties`, poderá modificar esse método para adicionar o PAT em vez de substituir o conteúdo do arquivo.

**nota**  
O exemplo mostra o arquivo `gradle.properties` localizado em `GRADLE_USER_HOME`.

Primeiro, crie um PAT se você não tiver um.

**Para criar um token de acesso pessoal (PAT)**

1. Na barra de menu superior, escolha seu selo de perfil e escolha **Minhas configurações**. 
**dica**  
Você também pode encontrar seu perfil de usuário acessando a página de membros de um projeto ou espaço e escolhendo seu nome na lista de membros.

1. Em **Nome do PAT**, insira um nome descritivo para o seu PAT.

1. Em **Data de expiração**, mantenha a data padrão ou escolha o ícone do calendário para selecionar uma data personalizada. A data de vencimento é padronizada para um ano a contar da data atual.

1. Escolha **Criar**.

   Você também pode criar esse token ao escolher **Clonar repositório** para um repositório de origem.

1. Salve o segredo do PAT em um local seguro. 
**Importante**  
O segredo do PAT só é exibido uma vez. Não é possível recuperá-lo depois de fechar a janela. 

Depois, atualize o arquivo `build.gradle` com o seguinte trecho:

```
repositories {
    maven {
        name = 'spaceName'
        url = uri('https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/')
        credentials(PasswordCredentials)
    }
}
```

### Método 2: colocar o PAT em um arquivo separado
<a name="gradle-intellij-file"></a>

Use esse método se você não quiser modificar o arquivo `gradle.properties`.

Primeiro, crie um PAT se você não tiver um.

**Para criar um token de acesso pessoal (PAT)**

1. Na barra de menu superior, escolha seu selo de perfil e escolha **Minhas configurações**. 
**dica**  
Você também pode encontrar seu perfil de usuário acessando a página de membros de um projeto ou espaço e escolhendo seu nome na lista de membros.

1. Em **Nome do PAT**, insira um nome descritivo para o seu PAT.

1. Em **Data de expiração**, mantenha a data padrão ou escolha o ícone do calendário para selecionar uma data personalizada. A data de vencimento é padronizada para um ano a contar da data atual.

1. Escolha **Criar**.

   Você também pode criar esse token ao escolher **Clonar repositório** para um repositório de origem.

1. Salve o segredo do PAT em um local seguro. 
**Importante**  
O segredo do PAT só é exibido uma vez. Não é possível recuperá-lo depois de fechar a janela. 

**Para colocar seu PAT em um arquivo separado**

1. Atualize o arquivo `build.gradle` com o seguinte trecho. Substitua *space\$1name**proj\$1name*, e *repo\$1name* por seu nome de CodeCatalyst usuário, nome do espaço, nome do projeto e nome do repositório do pacote.

   ```
   def props = new Properties()
   file("fileName").withInputStream { props.load(it) }
                     
   repositories {
           maven {
               name = 'spaceName'
               url = uri('https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/')
               credentials(PasswordCredentials)
           }
       }
   }
   ```

1. Grave o PAT no arquivo que foi especificado em seu arquivo `build.gradle`:

   ```
   echo "codecatalystArtifactsToken=PAT" > fileName
   ```

# Configuração e uso de mvn
<a name="packages-maven-mvn"></a>

É possível usar o comando `mvn` para executar compilações do Maven. Você deve configurar `mvn` para usar seu repositório de pacotes e fornecer um token de acesso pessoal (PAT) para autenticação.

**Contents**
+ [Buscando dependências de CodeCatalyst](#mvn-fetch-dependencies)
+ [Buscando pacotes de repositórios de pacotes externos por meio de CodeCatalyst](#mvn-install-public)
+ [Publicando pacotes em CodeCatalyst](#mvn-publish-packages)
+ [Publicação de pacotes de terceiros](#publishing-third-party-packages)

## Buscando dependências de CodeCatalyst
<a name="mvn-fetch-dependencies"></a>

Para configurar `mvn` para buscar dependências de um CodeCatalyst repositório, você deve editar o arquivo de configuração do Maven `settings.xml` e, opcionalmente, o arquivo Project Model Object (POM) do seu projeto. O arquivo POM contém informações sobre o projeto e informações de configuração do Maven para criar o projeto, como dependências, diretório de criação, diretório de origem, diretório de origem de teste, plug-in e metas.

**Para usar `mvn` para buscar dependências do seu CodeCatalyst repositório de pacotes**

1. Abra o CodeCatalyst console em [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Na página de visão geral do projeto, selecione **Pacotes**.

1. Escolha seu repositório de pacotes na lista de repositórios de pacotes.

1. Selecione **Conectar ao repositório**.

1. Na caixa de diálogo **Conectar ao repositório**, selecione **mvn** na lista de clientes do gerenciador de pacotes.

1. Você precisará de um token de acesso pessoal (PAT) para se autenticar. `mvn` CodeCatalyst Se você já tiver um, pode usá-lo. Caso contrário, você pode criar um aqui.

   1. Selecione **Criar token**.

   1. Para copiar o PAT, selecione **Copiar**.
**Atenção**  
Você não poderá ver ou copiar seu PAT novamente depois de fechar a caixa de diálogo.

1. Adicione um perfil contendo seu repositório ao arquivo `settings.xml`. Substitua os valores a seguir.
**nota**  
Se estiver copiando as instruções do console, os valores a seguir devem ser atualizados para você e não devem ser alterados.
   + *space\$1name*Substitua pelo nome do seu CodeCatalyst espaço.
   + *proj\$1name*Substitua pelo nome CodeCatalyst do seu projeto.
   + *repo\$1name*Substitua pelo nome CodeCatalyst do repositório do pacote.

   ```
   <profiles>
     <profile>
       <id>repo_name</id>
       <activation>
           <activeByDefault>true</activeByDefault>
       </activation>
       <repositories>
           <repository>
             <id>repo_name</id>
             <url>https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/</url>
           </repository>
       </repositories>
     </profile>
   </profiles>
   ```

1. Adicione seu servidor à lista de servidores no arquivo `settings.xml`. Substitua os valores a seguir.
**nota**  
Se estiver copiando as instruções do console, os valores a seguir devem ser atualizados para você e não devem ser alterados.
   + *repo\$1name*Substitua pelo nome CodeCatalyst do repositório do pacote.
   + *username*Substitua CodeCatalyst pelo seu nome de usuário.
   + *PAT*Substitua por seu CodeCatalyst PAT.

   ```
   <servers>
     <server>
       <id>repo_name</id>
       <username>username</username>
       <password>PAT</password>
     </server>
   </servers>
   ```

1. (Opcional) Defina um espelho no arquivo `settings.xml` que capture todas as conexões e as encaminhe para seu repositório em vez de um repositório de gateway.
**nota**  
Se estiver copiando as instruções do console, os valores a seguir devem ser atualizados para você e não devem ser alterados.
   + *space\$1name*Substitua pelo nome do seu CodeCatalyst espaço.
   + *proj\$1name*Substitua pelo nome CodeCatalyst do seu projeto.
   + *repo\$1name*Substitua pelo nome CodeCatalyst do repositório do pacote.

   ```
   <mirrors>
     <mirror>
       <id>repo_name</id>
       <name>repo_name</name>
       <url>https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/</url>
       <mirrorOf>*</mirrorOf>
     </mirror>
   </mirrors>
   ```

**Importante**  
Você pode usar qualquer valor no elemento `<id>`, mas ele deve ser o mesmo nos elementos `<server>` e `<repository>`. Isso permite que as credenciais especificadas sejam incluídas nas solicitações para CodeCatalyst.

Depois de fazer essas alterações na configuração, você pode criar o projeto.

```
mvn compile
```

## Buscando pacotes de repositórios de pacotes externos por meio de CodeCatalyst
<a name="mvn-install-public"></a>

Você pode instalar pacotes Maven de repositórios públicos por meio de um CodeCatalyst repositório configurando-o com uma conexão upstream com o gateway que representa o repositório do gateway. Os pacotes instalados do repositório do gateway são ingeridos e armazenados no seu CodeCatalyst repositório.

Atualmente, CodeCatalyst oferece suporte aos seguintes repositórios públicos de pacotes Maven.
+ maven-central-gateway
+ google-android-gateway
+ gradle-plugins-gateway
+ commonsware-gateway

**Para instalar pacotes de repositórios de pacotes públicos do Maven**

1. Se você ainda não o fez, configure `mvn` com seu repositório de CodeCatalyst pacotes seguindo as etapas em[Buscando dependências de CodeCatalyst](#mvn-fetch-dependencies).

1. Certifique-se de que seu repositório tenha adicionado o repositório de gateway a partir do qual você deseja instalar como uma conexão upstream. Para verificar quais fontes upstream foram adicionadas ou para adicionar um repositório de gateway como fonte upstream, siga as instruções em [Adição de um repositório upstream](packages-upstream-repositories-add.md).

Para ter mais informações sobre como solicitar pacotes de repositórios upstream, consulte [Solicitar uma versão do pacote com repositórios upstream](packages-upstream-repositories-request.md).

## Publicando pacotes em CodeCatalyst
<a name="mvn-publish-packages"></a>

Para publicar um pacote Maven em um CodeCatalyst repositório, você também deve editar `~/.m2/settings.xml` o POM do projeto. `mvn`

**Para usar `mvn` para publicar pacotes em seu repositório de CodeCatalyst pacotes**

1. Abra o CodeCatalyst console em [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Na página de visão geral do projeto, selecione **Pacotes**.

1. Escolha seu repositório de pacotes na lista de repositórios de pacotes.

1. Selecione **Conectar ao repositório**.

1. Na caixa de diálogo **Conectar ao repositório**, selecione **mvn** na lista de clientes do gerenciador de pacotes.

1. Você precisará de um token de acesso pessoal (PAT) para se autenticar. `mvn` CodeCatalyst Se você já tiver um, pode usá-lo. Caso contrário, você pode criar um aqui.

   1. Selecione **Criar token**.

   1. Para copiar o PAT, selecione **Copiar**.
**Atenção**  
Você não poderá ver ou copiar seu PAT novamente depois de fechar a caixa de diálogo.

1. Configure uma variável de ambiente na máquina local com seu PAT. Você usará essa variável de ambiente no arquivo `setting.xml`.

   ```
   export CODECATALYST_ARTIFACTS_TOKEN=your_PAT
   ```

1. Adicione uma seção `<servers>` a `settings.xml` com uma referência à variável de ambiente `CodeCatalyst_ARTIFACTS_TOKEN` para que o Maven passe o token nas solicitações HTTP.

   ```
   <settings>
   ...
       <servers>
           <server>
               <id>repo-name</id>
               <username>username</username>
               <password>${env.CodeCatalyst_ARTIFACTS_TOKEN}</password>
           </server>
       </servers>
   ...
   </settings>
   ```

1. Adicione uma seção `<distributionManagement>` ao `pom.xml` do seu projeto.

   ```
   <project>
   ...
        <distributionManagement>
            <repository>
                <id>repo_name</id>
                <name>repo_name</name>
                <url>https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/</url>
            </repository>
        </distributionManagement>
   ...
   </project>
   ```

Depois de fazer essas alterações na configuração, você pode criar o projeto e publicá-lo no repositório específico.

```
mvn deploy
```

Você pode navegar até o repositório de pacotes no CodeCatalyst console para verificar se o pacote foi publicado com sucesso.

## Publicação de pacotes de terceiros
<a name="publishing-third-party-packages"></a>

Você pode publicar pacotes Maven de terceiros em um CodeCatalyst repositório com. `mvn deploy:deploy-file` Isso pode ser útil para usuários que desejam publicar pacotes e têm somente arquivos JAR e não têm acesso ao código-fonte do pacote ou aos arquivos POM.

O comando `mvn deploy:deploy-file` gerará um arquivo POM com base nas informações passadas na linha de comando.

Primeiro, crie um PAT se você não tiver um.

**Para criar um token de acesso pessoal (PAT)**

1. Na barra de menu superior, escolha seu selo de perfil e escolha **Minhas configurações**. 
**dica**  
Você também pode encontrar seu perfil de usuário acessando a página de membros de um projeto ou espaço e escolhendo seu nome na lista de membros.

1. Em **Nome do PAT**, insira um nome descritivo para o seu PAT.

1. Em **Data de expiração**, mantenha a data padrão ou escolha o ícone do calendário para selecionar uma data personalizada. A data de vencimento é padronizada para um ano a contar da data atual.

1. Escolha **Criar**.

   Você também pode criar esse token ao escolher **Clonar repositório** para um repositório de origem.

1. Salve o segredo do PAT em um local seguro. 
**Importante**  
O segredo do PAT só é exibido uma vez. Não é possível recuperá-lo depois de fechar a janela. 

**Publicação de pacotes do Maven de terceiros**

1. Crie um arquivo `~/.m2/settings.xml` com o seguinte conteúdo:

   ```
   <settings>
       <servers>
           <server>
               <id>repo_name</id>
               <username>username</username>
               <password>PAT}</password>
           </server>
       </servers>
   </settings>
   ```

1. Execute o comando `mvn deploy:deploy-file`:

   ```
   mvn deploy:deploy-file -DgroupId=commons-cli          \
   -DartifactId=commons-cli       \
   -Dversion=1.4                  \
   -Dfile=./commons-cli-1.4.jar   \
   -Dpackaging=jar                \
   -DrepositoryId=repo-name      \
   -Durl=https://packages.region.codecatalyst.aws/maven/space-name/proj-name/repo-name/
   ```
**nota**  
O exemplo anterior publica `commons-cli 1.4`. Modifique os argumentos groupID, artifactID, version e file para publicar um JAR diferente.

Essas instruções são baseadas em exemplos no [Guia para implantação de terceiros JARs em repositórios remotos](https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html) da documentação do *Apache* Maven. 

 Para ter mais informações, consulte esses tópicos no site do Apache Maven Project:
+  [Configurar vários repositórios](https://maven.apache.org/guides/mini/guide-multiple-repositories.html) 
+  [Referência de configurações](https://maven.apache.org/settings.html) 
+  [Gerenciamento de distribuição](https://maven.apache.org/pom.html#Distribution_Management) 
+  [Perfis](https://maven.apache.org/pom.html#Profiles) 

# Publicação de pacotes com curl
<a name="packages-maven-curl"></a>

Esta seção mostra como usar o cliente HTTP `curl` para publicar pacotes Maven em um CodeCatalyst repositório de pacotes. A publicação de pacotes com `curl` pode ser útil se você não tiver ou quiser instalar o cliente Maven em seus ambientes.

**Para publicar um pacote do Maven com `curl`**

1. Você deve armazenar um token de acesso pessoal (PAT) em uma variável de ambiente com a qual se autenticar. `curl` CodeCatalyst Se você já tiver um, pode usá-lo. Caso contrário, você pode criar um e configurar a variável de ambiente.

   1. Crie um PAT seguindo as etapas em [Conceder aos usuários acesso ao repositório com tokens de acesso pessoal](ipa-tokens-keys.md). Copie o PAT para armazená-lo em uma variável de ambiente.

   1. Na linha de comando da máquina local, configure uma variável de ambiente com o seu PAT.

      ```
      export CodeCatalyst_ARTIFACTS_TOKEN=your_PAT
      ```

1. Use o `curl` comando a seguir para publicar o JAR em um CodeCatalyst repositório. Substitua *username**space\$1name*,*proj\$1name*, e *repo\$1name* por seu nome de CodeCatalyst usuário, nome do espaço, nome do projeto e nome do repositório do pacote.

   ```
   curl --request PUT https://packages.region.codecatalyst.aws/maven/space-name/proj-name/repo-name/com/mycompany/app/my-app/1.0/my-app-1.0.jar \
        --user "username:CodeCatalyst_ARTIFACTS_TOKEN" --header "Content-Type: application/octet-stream" \
        --data-binary @target/path/to/my-app-1.0.jar
   ```

1. Use o `curl` comando a seguir para publicar o POM em um CodeCatalyst repositório. Substitua *username**space\$1name*,*proj\$1name*, e *repo\$1name* por seu nome de CodeCatalyst usuário, nome do espaço, nome do projeto e nome do repositório do pacote.

   ```
   curl --request PUT https://packages.region.codecatalyst.aws/maven/space-name/proj-name/repo-name/com/mycompany/app/my-app/1.0/my-app-1.0.pom \
        --user "username:CodeCatalyst_ARTIFACTS_TOKEN" --header "Content-Type: application/octet-stream" \
        --data-binary @target/my-app-1.0.pom
   ```

1. Neste momento, o pacote Maven estará em seu CodeCatalyst repositório com o status de. `Unfinished` Para poder consumir o pacote, ele deve estar no estado `Published`. Você pode mover o pacote de `Unfinished` para `Published` carregando um `maven-metadata.xml` arquivo em seu pacote ou alterando o status no CodeCatalyst console.

   1.  Opção 1: use o comando `curl` a seguir para adicionar um arquivo `maven-metadata.xml` ao seu pacote. Substitua *username**space\$1name*,*proj\$1name*, e *repo\$1name* por seu nome de CodeCatalyst usuário, nome do espaço, nome do projeto e nome do repositório do pacote. 

      ```
      curl --request PUT https://packages.region.codecatalyst.aws/maven/space-name/proj-name/repo-name/com/mycompany/app/my-app/maven-metadata.xml \
           --user "username:CodeCatalyst_ARTIFACTS_TOKEN" --header "Content-Type: application/octet-stream" \
           --data-binary @target/maven-metadata.xml
      ```

      Um exemplo dos conteúdos em um arquivo `maven-metadata.xml` é mostrado abaixo:

      ```
      <metadata modelVersion="1.1.0">
          <groupId>com.mycompany.app</groupId>
          <artifactId>my-app</artifactId>
          <versioning>
              <latest>1.0</latest>
              <release>1.0</release>
              <versions>
                  <version>1.0</version>
              </versions>
              <lastUpdated>20200731090423</lastUpdated>
          </versioning>
      </metadata>
      ```

   1.  Opção 2: atualize o status do pacote para `Published` no CodeCatalyst console. Para ter informações sobre como atualizar o status de uma versão do pacote, consulte [Atualização do status da versão do pacote](working-with-packages-update-version-status.md). 

Se você tiver apenas o arquivo JAR de um pacote, poderá publicar uma versão de pacote consumível em um CodeCatalyst repositório usando. `mvn` Isso pode ser útil se você não tiver acesso ao código-fonte do pacote ou ao POM. Para mais detalhes, consulte [Publicação de pacotes de terceiros](packages-maven-mvn.md#publishing-third-party-packages).

# Usar somas de verificação e instantâneos do Maven
<a name="packages-maven-checksums-snapshots"></a>

As seções a seguir descrevem como usar somas de verificação do Maven e instantâneos do Maven em. CodeCatalyst

## Usar somas de verificação do Maven
<a name="maven-checksums"></a>

 Quando um pacote Maven é publicado em um repositório de CodeCatalyst pacotes, a soma de verificação associada a cada *ativo* ou arquivo no pacote é usada para validar o upload. Os arquivos *jar*, *pom* e *war* são exemplos de ativos. Para cada ativo, o pacote do Maven contém vários arquivos de soma de verificação que usam o nome do ativo com uma extensão adicional, como `md5` ou `sha1`. Por exemplo, os arquivos de soma de verificação de um arquivo chamado `my-maven-package.jar` podem ser `my-maven-package.jar.md5` e `my-maven-package.jar.sha1`. 

 Cada pacote do Maven também contém um arquivo `maven-metadata.xml`. Esse arquivo deve ser carregado para que uma publicação seja bem-sucedida. Se uma incompatibilidade de soma de verificação for detectada durante o upload de qualquer arquivo de pacote, a publicação será interrompida. Isso pode impedir que `maven-metadata.xml` seja carregado. Quando isso acontece, o status do pacote do Maven é definido como `Unfinished`. Você não pode baixar ativos que fazem parte de um pacote com esse status. 

Lembre-se do seguinte no caso de uma incompatibilidade de soma de verificação ao publicar um pacote do Maven: 
+  Se a incompatibilidade da soma de verificação ocorrer antes do upload de `maven-metadata.xml`, o status do pacote não será definido como `Unfinished`. O pacote não está visível e os ativos não podem ser consumidos. Quando isso acontecer, tente uma das opções a seguir e tente baixar o ativo novamente. 
  + Execute o comando que publica o pacote do Maven novamente. Isso pode funcionar se um problema de rede tiver corrompido o arquivo de soma de verificação durante o download. Se o problema de rede for resolvido na nova tentativa, a soma de verificação será correspondente e o download será concluído. 
  +  Se a republicação do pacote do Maven não funcionar, exclua o pacote e, depois, publique-o novamente. 
+  Se a incompatibilidade da soma de verificação ocorrer depois do upload de `maven-metadata.xml`, o status do pacote será definido como `Published`. Você pode consumir qualquer ativo do pacote, incluindo aqueles com incompatibilidades de soma de verificação. Quando você baixa um ativo, a soma de verificação gerada por CodeCatalyst é baixada com ele. Se o arquivo baixado estiver associado a uma incompatibilidade de soma de verificação, o arquivo de soma de verificação baixado pode não corresponder à soma de verificação que foi carregada quando o pacote foi publicado. 

## Uso de snapshots do Maven
<a name="maven-snapshots"></a>

 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 versão de SNAPSHOT?](https://maven.apache.org/guides/getting-started/index.html#What_is_a_SNAPSHOT_version) no site do Apache Maven Project. 

 CodeCatalyst suporta a publicação e o consumo de instantâneos do Maven. Você pode publicar um snapshot do Maven em um CodeCatalyst repositório ou, se estiver diretamente conectado, em um repositório upstream. No entanto, não há suporte para uma versão de snapshot em um repositório de pacotes e em um dos repositórios upstream. Por exemplo, se você fizer upload de um pacote Maven com versão `1.2-SNAPSHOT` para seu repositório de pacotes, CodeCatalyst não oferece suporte ao upload de um pacote Maven com a mesma versão de instantâneo em um de seus repositórios upstream. Esse cenário pode retornar resultados imprevisíveis. 

 Quando um snapshot do Maven é publicado, a versão anterior dele é preservada em uma nova versão chamada de *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 é definido como `Published` e o status da compilação que contém a versão anterior é definido como `Unlisted`. 

 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. 

Para excluir todas as versões de compilação de um snapshot do Maven, use o CodeCatalyst console.

# Usando NuGet
<a name="packages-nuget"></a>

Esses tópicos descrevem como consumir e publicar `NuGet` pacotes usando CodeCatalyst.

**nota**  
CodeCatalyst suporta a [NuGetversão 4.8](https://docs.microsoft.com/en-us/nuget/release-notes/nuget-4.8-rtm) e superior.

**Topics**
+ [Usando CodeCatalyst com o Visual Studio](packages-nuget-visual-studio.md)
+ [Configuração e uso da CLI nuget ou dotnet](packages-nuget-cli.md)
+ [NuGet normalização do nome do pacote, versão e nome do ativo](nuget-name-normalization.md)
+ [NuGet compatibilidade](packages-nuget-compatibility.md)

# Usando CodeCatalyst com o Visual Studio
<a name="packages-nuget-visual-studio"></a>

 Você pode consumir pacotes CodeCatalyst diretamente no Visual Studio. 

Para configurar e usar NuGet com ferramentas de CLI, como `dotnet` ou`nuget`, consulte. [Configuração e uso da CLI nuget ou dotnet](packages-nuget-cli.md)

**Contents**
+ [Configurando o Visual Studio com CodeCatalyst](#packages-nuget-vs-configure)
  + [Windows](#packages-nuget-vs-configure-windows)
  + [macOS](#packages-nuget-vs-configure-mac)

## Configurando o Visual Studio com CodeCatalyst
<a name="packages-nuget-vs-configure"></a>

### Windows
<a name="packages-nuget-vs-configure-windows"></a>

**Para configurar o Visual Studio com CodeCatalyst**

1. É necessário um token de acesso pessoal (PAT) para se autenticar com. CodeCatalyst Se você já tiver um, pode usá-lo. Caso contrário, siga as instruções em [Conceder aos usuários acesso ao repositório com tokens de acesso pessoal](ipa-tokens-keys.md) para ciar um.

1. Use `nuget` ou `dotnet` para configurar seu repositório de pacotes e suas credenciais.

------
#### [ dotnet ]

   **Usuários de Linux e macOS**: como a criptografia não é compatível com plataformas que não sejam Windows, você deve adicionar o sinalizador `--store-password-in-clear-text` ao comando a seguir. Observe que isso armazenará sua senha como texto simples no arquivo de configuração.

   ```
   dotnet nuget add source https://packages.region.codecatalyst.aws/nuget/space-name/proj-name/repo-name/v3/index.json --name repo_name --password PAT --username user_name
   ```

------
#### [ nuget ]

   ```
   nuget sources add -name repo_name -Source https://packages.region.codecatalyst.aws/nuget/space-name/proj-name/repo-name/v3/index.json -password PAT --username user_name
   ```

------

   Resultado do exemplo:

   ```
   Package source with Name: repo_name added successfully.
   ```

1. Configure o Visual Studio para usar sua nova origem de pacote. No Visual Studio, selecione **Ferramentas** e **Opções**.

1. No menu **Opções**, expanda a seção **NuGet Package Manager** e escolha **Package Sources**.

1. Na lista **Fontes de pacotes disponíveis**, verifique se sua *repo\$1name* fonte está ativada. Se você configurou seu repositório de pacotes com uma conexão upstream com a NuGet Galeria, desative a fonte **nuget.org**.

### macOS
<a name="packages-nuget-vs-configure-mac"></a>

**Para configurar o Visual Studio com CodeCatalyst**

1. É necessário um token de acesso pessoal (PAT) para se autenticar com. CodeCatalyst Se você já tiver um, pode usá-lo. Caso contrário, siga as instruções em [Conceder aos usuários acesso ao repositório com tokens de acesso pessoal](ipa-tokens-keys.md) para ciar um.

1. Selecione **Preferências** na barra de menu.

1. Na **NuGet**seção, escolha **Fontes**.

1. Selecione **Adicionar** e adicione as informações do seu repositório.

   1. Em **Nome**, insira o nome CodeCatalyst do repositório do pacote.

   1. Em **Localização**, insira o endpoint CodeCatalyst do repositório de pacotes. O snippet de código a seguir mostra um exemplo de endpoint. Substitua *space-name**proj-name*, e *repo-name* pelo nome do seu CodeCatalyst espaço, nome do projeto e nome do repositório.

      ```
      https://packages.region.codecatalyst.aws/nuget/space-name/proj-name/repo-name/
      ```

   1. Em **Nome de usuário**, insira qualquer valor válido.

   1. Em **Senha**, insira o PAT.

1. Escolha **Add source (Adicionar origem)**.

1. Se você configurou seu repositório de pacotes com uma conexão upstream com a NuGet Galeria, desative a fonte **nuget.org**.

Após a configuração, o Visual Studio pode consumir pacotes do seu CodeCatalyst repositório, de qualquer um de seus repositórios upstream ou do [NuGetdomínio.org](https://www.nuget.org/) se você o tiver configurado como uma fonte upstream. Para obter mais informações sobre como navegar e instalar NuGet pacotes no Visual Studio, consulte [Instalar e gerenciar pacotes no Visual Studio usando o NuGet Package Manager](https://docs.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio) na *NuGet documentação*.

# Configuração e uso da CLI nuget ou dotnet
<a name="packages-nuget-cli"></a>

Você pode usar ferramentas de CLI, como `NuGet` e, `dotnet` para publicar e consumir pacotes do. CodeCatalyst Este documento fornece informações sobre como configurar as ferramentas de CLI e usá-las para publicar ou consumir pacotes.

**Contents**
+ [Configurando com NuGet CodeCatalyst](#nuget-configure-cli)
+ [Consumindo NuGet pacotes de um CodeCatalyst repositório](#nuget-consume-cli)
+ [Consumindo NuGet pacotes de NuGet .org por meio de CodeCatalyst](#nuget-consume-nuget-gallery)
+ [Publicando NuGet pacotes em CodeCatalyst](#nuget-publish-cli)

## Configurando com NuGet CodeCatalyst
<a name="nuget-configure-cli"></a>

Para configurar NuGet com CodeCatalyst, adicione um endpoint do repositório e um token de acesso pessoal ao seu arquivo de NuGet configuração para permitir `nuget` ou conectar-se `dotnet` ao seu repositório de CodeCatalyst pacotes.

**Para configurar NuGet com seu repositório de CodeCatalyst pacotes**

1. Abra o CodeCatalyst console em [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Na página de visão geral do projeto, selecione **Pacotes**.

1. Escolha seu repositório de pacotes na lista de repositórios de pacotes.

1. Selecione **Conectar ao repositório**.

1. Na caixa de diálogo **Conectar ao repositório**, escolha **NuGet**ou **dotnet** na lista de clientes do gerenciador de pacotes. 

1. Você precisará de um token de acesso pessoal (PAT) para se autenticar. NuGet CodeCatalyst Se você já tiver um, pode usá-lo. Caso contrário, você pode criar um aqui.

   1. Selecione **Criar token**.

   1. Para copiar o PAT, selecione **Copiar**.
**Atenção**  
Você não poderá ver ou copiar seu PAT novamente depois de fechar a caixa de diálogo.

1. Configure `nuget` ou use `dotnet` o NuGet endpoint e CodeCatalyst o PAT do seu repositório. Substitua os valores a seguir.
**nota**  
Se estiver copiando as instruções do console, os valores a seguir devem ser atualizados para você e não devem ser alterados.
   + *username*Substitua CodeCatalyst pelo seu nome de usuário.
   + *PAT*Substitua por seu CodeCatalyst PAT.
   + *space\$1name*Substitua pelo nome do seu CodeCatalyst espaço.
   + *proj\$1name*Substitua pelo nome CodeCatalyst do seu projeto.
   + *repo\$1name*Substitua pelo nome CodeCatalyst do repositório do pacote.

   1. Para `nuget`, use o comando `nuget sources add`.

      ```
      nuget sources add -name "repo_name" -Source "https://packages.region.codecatalyst.aws/nuget/space_name/proj_name/repo_name/v3/index.json" -username "username" -password "PAT"
      ```

   1. Para `dotnet`, use o comando `dotnet nuget add source`.

      **Usuários de Linux e macOS**: como a criptografia não é compatível com plataformas que não sejam Windows, você deve adicionar o sinalizador `--store-password-in-clear-text` ao comando a seguir. Observe que isso armazenará sua senha como texto simples no arquivo de configuração.

      ```
      dotnet nuget add source "https://packages.region.codecatalyst.aws/nuget/space_name/proj_name/repo_name/v3/index.json" -n "proj_name/repo_name" -u "username" -p "PAT" --store-password-in-clear-text
      ```

Depois de configurar NuGet com CodeCatalyst, você pode [consumir NuGet pacotes](#nuget-consume-cli) armazenados em seu CodeCatalyst repositório ou em um de seus repositórios upstream e [publicar NuGet pacotes](#nuget-publish-cli) em seu repositório. CodeCatalyst 

## Consumindo NuGet pacotes de um CodeCatalyst repositório
<a name="nuget-consume-cli"></a>

Depois de [configurar NuGet com CodeCatalyst](#nuget-configure-cli), você pode consumir NuGet pacotes que estão armazenados em seu CodeCatalyst repositório ou em um de seus repositórios upstream.

Para consumir uma versão de pacote de um CodeCatalyst repositório ou de um de seus repositórios upstream com nuget ou dotnet, execute o comando a seguir. *packageName*Substitua pelo nome do pacote que você deseja consumir e *packageSourceName* pelo nome da fonte do seu repositório de CodeCatalyst pacotes no seu arquivo de NuGet configuração, que deve ser o nome do repositório.

**Para instalar um pacote com `dotnet`**

```
dotnet add packageName --source packageSourceName
```

**Para instalar um pacote com `nuget`**

```
nuget install packageName --source packageSourceName
```

Para ter mais informações, consulte [Gerenciar pacotes usando a CLI nuget](https://docs.microsoft.com/en-us/nuget/consume-packages/install-use-packages-nuget-cli) ou [Instalar e gerenciar pacotes usando a CLI dotnet](https://docs.microsoft.com/en-us/nuget/consume-packages/install-use-packages-dotnet-cli) na *documentação da Microsoft*.

## Consumindo NuGet pacotes de NuGet .org por meio de CodeCatalyst
<a name="nuget-consume-nuget-gallery"></a>

**Você pode consumir NuGet pacotes de [NuGet.org](https://www.nuget.org/) por meio de um CodeCatalyst repositório configurando o repositório com uma conexão upstream com .org. NuGet** Os pacotes consumidos em **NuGet.org** são ingeridos e armazenados no seu CodeCatalyst repositório.

**Para consumir pacotes do NuGet domínio.org**

1. Se você ainda não o fez, configure seu gerenciador de NuGet pacotes com seu repositório de CodeCatalyst pacotes seguindo as etapas em[Configurando com NuGet CodeCatalyst](#nuget-configure-cli). 

1. Certifique-se de que seu repositório tenha adicionado **NuGet.org** como uma conexão upstream. **Você pode verificar quais fontes upstream foram adicionadas ou adicionar o **NuGet.org** como uma fonte upstream seguindo as instruções [Adição de um repositório upstream](packages-upstream-repositories-add.md) e escolhendo o repositório da loja. NuGet **

## Publicando NuGet pacotes em CodeCatalyst
<a name="nuget-publish-cli"></a>

Depois de [configurar NuGet com CodeCatalyst](#nuget-configure-cli), você pode usar `nuget` ou `dotnet` publicar versões de pacotes em CodeCatalyst repositórios.

Para enviar uma versão do pacote para um CodeCatalyst repositório, execute o comando a seguir com o caminho completo do seu `.nupkg` arquivo e o nome da fonte do seu CodeCatalyst repositório no seu arquivo de NuGet configuração.

**Para publicar um pacote com `dotnet`**

```
dotnet nuget push path/to/nupkg/SamplePackage.1.0.0.nupkg --source packageSourceName
```

**Para publicar um pacote com `nuget`**

```
nuget push path/to/nupkg/SamplePackage.1.0.0.nupkg --source packageSourceName
```

# NuGet normalização do nome do pacote, versão e nome do ativo
<a name="nuget-name-normalization"></a>

CodeCatalyst normaliza nomes de pacotes e ativos e versões de pacotes antes de armazená-los, o que significa que os nomes ou versões CodeCatalyst podem ser diferentes daqueles fornecidos quando o pacote ou ativo foi publicado.

**Normalização do nome do pacote:** CodeCatalyst normaliza os nomes dos NuGet pacotes convertendo todas as letras em minúsculas.

**Normalização da versão do pacote:** CodeCatalyst normaliza as versões NuGet do pacote usando o mesmo padrão do. NuGet As informações a seguir são dos [números de versão normalizados](https://docs.microsoft.com/en-us/nuget/concepts/package-versioning#normalized-version-numbers) da NuGet documentação. 
+ Os zeros iniciais são removidos dos números de versão:
  + `1.00` é tratado como `1.0`
  + `1.01.1` é tratado como `1.1.1`
  + `1.00.0.1` é tratado como `1.0.0.1`
+ Um zero na quarta parte do número da versão será omitido:
  + `1.0.0.0` é tratado como `1.0.0`
  + `1.0.01.0` é tratado como `1.0.1`
+ SemVer Os metadados da compilação 2.0.0 foram removidos:
  + `1.0.7+r3456` é tratado como `1.0.7`

**Normalização do nome do ativo do pacote:** CodeCatalyst constrói o nome do ativo do NuGet pacote a partir do nome do pacote normalizado e da versão do pacote.

# NuGet compatibilidade
<a name="packages-nuget-compatibility"></a>

 Este guia contém informações sobre CodeCatalyst a compatibilidade com diferentes NuGet ferramentas e versões. 

**Topics**
+ [NuGet Compatibilidade geral](#nuget-version-support)
+ [NuGet suporte de linha de comando](#nuget-command-line-support)

## NuGet Compatibilidade geral
<a name="nuget-version-support"></a>

CodeCatalyst suporta NuGet 4.8 e superior.

CodeCatalyst suporta apenas a V3 do protocolo NuGet HTTP. Isso significa que alguns comandos da CLI que dependem da V2 do protocolo não são compatíveis. Consulte a seção [suporte ao comando nuget](#nuget-command-support) a seguir para ter mais informações.

CodeCatalyst não suporta PowerShellGet 2.x.

## NuGet suporte de linha de comando
<a name="nuget-command-line-support"></a>

CodeCatalyst suporta as ferramentas de CLI NuGet (`nuget`) e .NET Core (`dotnet`).

### suporte ao comando nuget
<a name="nuget-command-support"></a>

Como CodeCatalyst só é compatível com o protocolo HTTP V3 NuGet do, os comandos a seguir não funcionarão quando usados em CodeCatalyst recursos:
+ `list`: o comando `nuget list` exibe uma lista de pacotes de uma determinada fonte. Para obter uma lista de pacotes em um repositório de CodeCatalyst pacotes, navegue até o repositório no CodeCatalyst console.

# Usar o Python
<a name="packages-python"></a>

Esses tópicos descrevem como usar `pip` o gerenciador de pacotes Python e `twine` o utilitário de publicação de pacotes Python com. CodeCatalyst

**Topics**
+ [Configurar pip e instalação de pacotes Python](packages-python-pip.md)
+ [Configuração do Twine e publicação de pacotes Python](packages-python-twine.md)
+ [Normalização do nome do pacote Python](python-name-normalization.md)
+ [Compatibilidade com Python](packages-python-compatibility.md)

# Configurar pip e instalação de pacotes Python
<a name="packages-python-pip"></a>

Para usar `pip` com CodeCatalyst, você deve se conectar `pip` ao seu repositório de pacotes e fornecer um token de acesso pessoal para autenticação. Você pode ver as instruções para se conectar `pip` ao seu repositório de pacotes no CodeCatalyst console. Depois de se autenticar e se `pip` conectar CodeCatalyst, você pode executar `pip` comandos.

**Contents**
+ [Instalando pacotes Python a partir do CodeCatalyst pip](#pip-install)
+ [Consumindo pacotes Python do PyPI por meio de CodeCatalyst](#pip-install-pypi)
+ [Suporte para comandos pip](#pip-command-support)
  + [Comandos compatíveis que interagem com um repositório](#supported-pip-commands-that-interact-with-a-repository)
  + [Comandos do lado do cliente compatíveis](#supported-pip-client-side-commands)

## Instalando pacotes Python a partir do CodeCatalyst pip
<a name="pip-install"></a>

As instruções a seguir explicam como configurar `pip` para instalar pacotes Python a partir do seu CodeCatalyst repositório de pacotes ou de um de seus repositórios upstream.

**Para configurar e usar `pip` para instalar pacotes Python a partir do seu CodeCatalyst repositório de pacotes**

1. Abra o CodeCatalyst console em [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Na página de visão geral do projeto, selecione **Pacotes**.

1. Escolha seu repositório de pacotes na lista de repositórios de pacotes.

1. Selecione **Conectar ao repositório**.

1. Na caixa de diálogo **Conectar ao repositório**, selecione **pip** na lista de clientes do gerenciador de pacotes.

1. Você precisará de um token de acesso pessoal (PAT) para autenticar o pip. CodeCatalyst Se você já tiver um, pode usá-lo. Caso contrário, você pode criar um aqui.

   1. Selecione **Criar token**.

   1. Para copiar o PAT, selecione **Copiar**.
**Atenção**  
Você não poderá ver ou copiar seu PAT novamente depois de fechar a caixa de diálogo.

1. Use o `pip config` comando para definir o URL e as credenciais do CodeCatalyst registro. Substitua os valores a seguir.
**nota**  
Se estiver copiando as instruções do console, os valores a seguir devem ser atualizados para você e não devem ser alterados.
   + *username*Substitua CodeCatalyst pelo seu nome de usuário.
   + *PAT*Substitua por seu CodeCatalyst PAT.
   + *space\$1name*Substitua pelo nome do seu CodeCatalyst espaço.
   + *proj\$1name*Substitua pelo nome CodeCatalyst do seu projeto.
   + *repo\$1name*Substitua pelo nome CodeCatalyst do repositório do pacote.

   ```
   pip config set global.index-url https://username:PAT@https://packages.region.codecatalyst.aws/pypi/space_name/proj_name/repo_name/simple/
   ```

1. Supondo que um pacote esteja presente em seu repositório ou em um de seus repositórios upstream, você pode instalá-lo com `pip install`. Por exemplo, use o seguinte comando para instalar o pacote `requests`.

   ```
   pip install requests
   ```

   Use a `-i` opção de reverter temporariamente a instalação de pacotes do [https://pypi.org](https://pypi.org) em vez do seu repositório de CodeCatalyst pacotes.

   ```
   pip install -i https://pypi.org/simple requests
   ```

## Consumindo pacotes Python do PyPI por meio de CodeCatalyst
<a name="pip-install-pypi"></a>

**Você pode consumir pacotes Python do Python [Package Index (PyPI) por meio de um repositório configurando o CodeCatalyst repositório com uma conexão upstream com o PyPI](https://www.pypi.org/).** Os pacotes consumidos do **PyPI** são ingeridos e armazenados em seu repositório. CodeCatalyst 

**Para consumir pacotes do PyPI**

1. Se você ainda não o fez, configure o pip com seu repositório de CodeCatalyst pacotes seguindo as etapas em. [Instalando pacotes Python a partir do CodeCatalyst pip](#pip-install) 

1. Certifique-se de que seu repositório tenha adicionado **PyPI** como uma origem upstream. Você pode verificar quais fontes upstream foram adicionadas ou adicionar o **PyPI** como uma fonte upstream seguindo as instruções em [Adição de um repositório upstream](packages-upstream-repositories-add.md) e escolhendo o repositório do **armazenamento PyPI**.

Para ter mais informações sobre como solicitar pacotes de repositórios upstream, consulte [Solicitar uma versão do pacote com repositórios upstream](packages-upstream-repositories-request.md).

## Suporte para comandos pip
<a name="pip-command-support"></a>

As seções a seguir resumem os comandos pip que são suportados pelos CodeCatalyst repositórios, além dos comandos específicos que não são suportados.

**Topics**
+ [Comandos compatíveis que interagem com um repositório](#supported-pip-commands-that-interact-with-a-repository)
+ [Comandos do lado do cliente compatíveis](#supported-pip-client-side-commands)

### Comandos compatíveis que interagem com um repositório
<a name="supported-pip-commands-that-interact-with-a-repository"></a>

Esta seção lista os comandos `pip` em que o cliente `pip` faz uma ou mais solicitações ao registro com o qual foi configurado. Verificou-se que esses comandos funcionam corretamente quando invocados em um repositório de CodeCatalyst pacotes.


****  

| Command | Description | 
| --- | --- | 
|   [install](https://pip.pypa.io/en/stable/reference/pip_install/)   |  Instalar pacotes.  | 
|   [baixar](https://pip.pypa.io/en/stable/reference/pip_download/)   |  Baixar pacotes.  | 

CodeCatalyst não implementa`pip search`. Se você configurou `pip` com um repositório de CodeCatalyst pacotes, a execução `pip search` pesquisará e mostrará pacotes do [PyPI](https://pypi.org/).

### Comandos do lado do cliente compatíveis
<a name="supported-pip-client-side-commands"></a>

Esses comandos não exigem nenhuma interação direta com um repositório, portanto, CodeCatalyst não é necessário fazer nada para suportá-los.


****  

| Command | Description | 
| --- | --- | 
|   [uninstall](https://pip.pypa.io/en/stable/reference/pip_uninstall/)   |  Desinstalar pacotes.  | 
|   [freeze](https://pip.pypa.io/en/stable/reference/pip_freeze/)   |  Emita pacotes instalados no formato de requisitos.  | 
|   [list](https://pip.pypa.io/en/stable/reference/pip_list/)   |  Listar pacotes instalados.  | 
|   [show](https://pip.pypa.io/en/stable/reference/pip_show/)   |  Mostre informações sobre os pacotes instalados.  | 
|   [check](https://pip.pypa.io/en/stable/reference/pip_check/)   |  Verifique se os pacotes instalados têm dependências compatíveis.  | 
|   [config](https://pip.pypa.io/en/stable/reference/pip_config/)   |  Gerencie a configuração local e global.  | 
|   [wheel](https://pip.pypa.io/en/stable/reference/pip_wheel/)   |  Construa rodas conforme suas necessidades.  | 
|   [hash](https://pip.pypa.io/en/stable/reference/pip_hash/)   |  Calcule hashes de arquivos de pacotes.  | 
|   [completion](https://pip.pypa.io/en/stable/user_guide/#command-completion)   |  Ajuda na conclusão do comando.  | 
|   [debug](https://pip.pypa.io/en/stable/reference/pip_debug/)   |  Mostre informações úteis para depuração.  | 
|  help  |  Mostre ajuda para comandos.  | 

# Configuração do Twine e publicação de pacotes Python
<a name="packages-python-twine"></a>

Para usar `twine` com CodeCatalyst, você deve se conectar `twine` ao seu repositório de pacotes e fornecer um token de acesso pessoal para autenticação. Você pode ver as instruções para se conectar `twine` ao seu repositório de pacotes no CodeCatalyst console. Depois de se autenticar e se `twine` conectar CodeCatalyst, você pode executar `twine` comandos.

## Publicando pacotes CodeCatalyst com o Twine
<a name="packages-twine-publish"></a>

As instruções a seguir explicam como se autenticar e se conectar `twine` ao seu repositório de CodeCatalyst pacotes.

**Para configurar e usar `twine` para publicar pacotes em seu repositório de CodeCatalyst pacotes**

1. Abra o CodeCatalyst console em [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Na página de visão geral do projeto, selecione **Pacotes**.

1. Escolha seu repositório de pacotes na lista de repositórios de pacotes.

1. Selecione **Conectar ao repositório**.

1. Na caixa de diálogo **Conectar ao repositório**, selecione **Twine** na lista de clientes do gerenciador de pacotes.

1. Você precisará de um token de acesso pessoal (PAT) para autenticar o Twine. CodeCatalyst Se você já tiver um, pode usá-lo. Caso contrário, você pode criar um aqui.

   1. Selecione **Criar token**.

   1. Para copiar o PAT, selecione **Copiar**.
**Atenção**  
Você não poderá ver ou copiar seu PAT novamente depois de fechar a caixa de diálogo.

1. Você pode configurar o twine com um arquivo `.pypirc` ou com variáveis de ambiente.

   1. **Para configurar com um arquivo `.pypirc`.**

      Abra `~/.pypirc` com seu editor preferido.

      Adicione um servidor de indexação para CodeCatalyst, incluindo o repositório, o nome de usuário e o PAT que você criou e copiou em uma etapa anterior. Substitua os valores a seguir.
**nota**  
Se estiver copiando as instruções do console, os valores a seguir devem ser atualizados para você e não devem ser alterados.
      + *username*Substitua CodeCatalyst pelo seu nome de usuário.
      + *PAT*Substitua por seu CodeCatalyst PAT.
      + *space\$1name*Substitua pelo nome do seu CodeCatalyst espaço.
      + *proj\$1name*Substitua pelo nome CodeCatalyst do seu projeto.
      + *repo\$1name*Substitua pelo nome CodeCatalyst do repositório do pacote.

      ```
      [distutils]
      index-servers = proj-name/repo-name
      
      [proj-name/repo-name]
      repository = https://packages.region.codecatalyst.aws/pypi/space_name/proj_name/repo_name/
      password = PAT
      username = username
      ```

   1. **Para configurar com variáveis de ambiente.**

      Defina as seguintes variáveis de ambiente. No `TWINE_REPOSITORY_URL` valor *space\$1name**proj\$1name*, atualize e *repo\$1name* com seus nomes de repositório de CodeCatalyst espaço, projeto e pacote.

      ```
      export TWINE_USERNAME=username
      ```

      ```
      export TWINE_PASSWORD=PAT
      ```

      ```
      export TWINE_REPOSITORY_URL="https://packages.region.codecatalyst.aws/pypi/space_name/proj_name/repo_name/"
      ```

1. Publique uma distribuição em Python com o comando `twine upload`.

# Normalização do nome do pacote Python
<a name="python-name-normalization"></a>

CodeCatalyst normaliza os nomes dos pacotes antes de armazená-los, o que significa que os nomes dos pacotes CodeCatalyst podem ser diferentes do nome fornecido quando o pacote foi publicado.

Ao realizar a normalização dos pacotes Python, o nome do pacote é colocado em minúsculas e todas as instâncias dos caracteres `.`, `-` e `_` são substituídas por um único caractere `-`. Portanto, os nomes dos pacotes `pigeon_cli` e `pigeon.cli` são normalizados e armazenados como `pigeon-cli`. O nome não normalizado pode ser usado por pip e twine. Para obter mais informações sobre a normalização de nome de pacote Python, consulte [PEP 503](https://www.python.org/dev/peps/pep-0503/#normalized-names) na documentação do Python.

# Compatibilidade com Python
<a name="packages-python-compatibility"></a>

 Embora CodeCatalyst não seja compatível com a `/simple/` API, ele suporta as operações `Legacy` da API. CodeCatalyst não suporta operações de PyPI `XML-RPC` ou `JSON` API. 

Para obter mais informações, consulte o seguinte no repositório da Python Packaging Authority. GitHub
+ [API legada](https://warehouse.pypa.io/api-reference/legacy.html)
+ [API XML-RPC](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/xml-rpc.rst)
+ [API JSON](https://docs.pypi.org/api/json/)

# Cotas para pacotes
<a name="packages-quotas"></a>

A tabela a seguir descreve cotas e limites para pacotes na Amazon CodeCatalyst. Para obter mais informações sobre cotas na Amazon CodeCatalyst, consulte[Cotas para o CodeCatalyst](quotas.md).


| Recurso | Cota padrão | 
| --- | --- | 
| Repositórios de pacotes | Máximo de 1000 por espaço. | 
| Repositórios upstream diretos |  Máximo de 10 por repositório de pacotes.  | 
| Repositórios upstream de pacotes pesquisados |  Máximo de 25 repositórios upstream pesquisados por versão de pacote solicitada.  | 
| Tamanho do arquivo do ativo do pacote |  Máximo de 5 GB por ativo do pacote.  | 
|  Ativos do pacote  |  Máximo de 150 por versão do pacote.  | 