管理 Java 软件包

本页介绍如何添加、查看和删除 Java 软件包。

如果您想使用 sbt 作为 Scala 和 Java 的构建工具,而不是使用 Maven 或 Gradle,则可以使用社区创建的 sbt 插件。本文档不介绍 Scala 客户端的配置或使用。

准备工作

  1. 如果目标代码库不存在,请创建新代码库
  2. 验证您是否拥有访问代码库所需的权限
  3. 验证您是否已配置身份验证。如果您使用的是访问令牌,请确保在连接到代码库之前先刷新该令牌。
  4. (可选)为 gcloud 命令配置默认值

所需的角色

如需获取管理软件包所需的权限,请让管理员授予您针对代码库的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

添加软件包

代码库模式:标准

如需将软件包添加到代码库,请执行以下操作:

Maven

使用 mvn deploymvn release 将软件包添加到代码库。

若要成功部署一个引用父项目的 Maven 项目,该项目的核心扩展文件中必须包含 Artifact Registry Wagon 提供商,如扩展说明中所述。

使用 mvn deploy:deploy-file 上传在 Maven 之外构建的工件。

例如,此示例命令会将 example/external.jar 及其项目文件 example/pom.xml 部署到代码库 us-central1-maven.pkg.dev/my-project/my-repo

mvn deploy:deploy-file \
-Durl=artifactregistry://us-central1-maven.pkg.dev/my-project/my-repo \
-DpomFile=example/pom.xml -Dfile=example/external.jar

如需配置与 Cloud Build 的集成,请参阅与 Cloud Build 集成

Gradle

若要成功发布到代码库,您的 build.gradle 文件必须包含发布平台部分,用于定义要上传的文件。

使用 gradle publish 命令将软件包上传到代码库。

查看软件包和版本

代码库模式:标准、远程

To view packages and package versions using the Google Cloud console or gcloud:

Console

  1. Open the Repositories page in the Google Cloud console.

    打开“代码库”页面

  2. In the repository list, click the appropriate repository.

    The Packages page lists the packages in the repository.

  3. Click a package to view versions of the package.

gcloud

To list packages in a repository, run the following command:

gcloud artifacts packages list [--repository=REPOSITORY] [--location=LOCATION]

Where

  • REPOSITORY is the name of the repository. If you configured a default repository, you can omit this flag to use the default.
  • LOCATION is a regional or multi-regional location. Use this flag to view repositories in a specific location. If you configured a default location, you can omit this flag to use the default.

To view versions of a package, run the following command:

gcloud artifacts versions list --package=PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION]

Where

  • PACKAGE is the ID of the package or fully qualified identifier for the package.
  • REPOSITORY is the name of the repository. If you configured a default repository, you can omit this flag to use the default.
  • LOCATION is a regional or multi-regional location. Use this flag to view repositories in a specific location. If you configured a default location, you can omit this flag to use the default.

对于远程代码库,返回的列表应包含所有直接和传递依赖项。

列出文件

代码库模式:标准、远程

您可以列出代码库中的文件、指定软件包的所有版本中的文件或特定软件包中的文件。

对于以下所有命令,您可以通过在命令中添加 --limit 标志来设置要返回的文件数量上限。

配置默认值时,如需列出默认项目、代码库和位置中的所有文件,请执行以下操作:

gcloud artifacts files list

如需列出指定项目、代码库和位置中的文件,请运行以下命令:

gcloud artifacts files list \
    --project=PROJECT \
    --repository=REPOSITORY \
    --location=LOCATION

如需列出特定软件包的所有版本的文件,请运行以下命令:

gcloud artifacts files list \
    --project=PROJECT \
    --repository=REPOSITORY \
    --location=LOCATION \
    --package=PACKAGE

如需列出特定软件包版本的文件,请运行以下命令:

gcloud artifacts files list \
    --project=PROJECT \
    --repository=REPOSITORY \
    --location=LOCATION \
    --package=PACKAGE \
    --version=VERSION

替换以下值:

  • LOCATION:代码库的单区域或多区域 位置
  • PROJECT:您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号(“:”),请参阅网域级项目
  • REPOSITORY:存储映像的代码库的名称。
  • PACKAGE:软件包的名称。
  • VERSION:软件包的版本。

示例

请考虑以下软件包信息:

  • 项目:my-project
  • 代码库:my-repo
  • 代码库位置:us-west1
  • 软件包:my-app

以下命令用于列出代码库 my-repo 中位于默认项目位置 us-west1 中的所有文件:

gcloud artifacts files list \
    --location=us-west1 \
    --repository=my-repo
以下命令用于列出软件包 1.0 版本中的文件。

gcloud artifacts files list \
    --project=my-project \
    --location=us-west1 \
    --repository=my-repo \
    --package=my-app \
    --version=1.0

下载软件包

代码库模式:标准、远程、虚拟

要在构建过程中下载工件,请将工件声明为依赖项。

Maven

  1. 在项目 pom.xml 文件中声明您要下载的软件包。以下示例会将软件包 artifact 的 1.0 版声明为依赖项。

    <dependencies>
        <dependency>
            <groupId>group</groupId>
            <artifactId>artifact</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
    

    如需详细了解 Maven 依赖项,请参阅 Maven 依赖项简介依赖项参考文档

  2. 构建 Java 项目。

    mvn compile
    

Gradle

  1. 在项目 build.gradle 文件中声明您要下载的软件包。以下示例会将软件包 artifact 的 1.0 版声明为外部编译依赖项。

    如需详细了解 Gradle 依赖项,请参阅 Gradle 文档

    dependencies {
        compile group: 'group', name: 'artifact', version: '1.0'
    }
    
  2. 构建 Java 项目。

    gradle build
    

对于标准代码库,您可以直接从该代码库中下载软件包。

对于远程代码库,您可以下载软件包及其依赖项的缓存副本。如果缓存副本不存在,远程仓库会从上游来源下载软件包,并将其缓存,然后再提供给您。 您可以查看远程仓库中的软件包列表,验证其是否从上游来源检索到软件包。

对于虚拟代码库,Artifact Registry 会在上游代码库中搜索请求的软件包。

  • 如果缓存副本不存在,上游远程仓库将下载并缓存请求的软件包。虚拟代码库仅提供请求的软件包,而不存储这些软件包。
  • 如果您请求在多个上游仓库中可用的版本,Artifact Registry 会根据为虚拟仓库配置的优先级设置来选择要使用的上游仓库。

例如,假设某个虚拟仓库具有以下上游仓库优先级设置:

  • main-repo:优先级已设为 100
  • secondary-repo1:优先级设置为 80
  • secondary-repo2:优先级设置为 80
  • test-repo:优先级设置为 20

main-repo 的优先级值最高,因此虚拟仓库始终会先对其进行搜索。

secondary-repo1secondary-repo2 的优先级均设置为 80。如果 main-repo 中没有请求的软件包,Artifact Registry 接下来会搜索这些代码库。由于它们的优先级值相同,因此 Artifact Registry 可以选择从任一代码库提供软件包(如果这两个代码库都有对应的版本)。

test-repo 具有最低优先级值,如果其他上游仓库都没有存储的工件,则将传送该工件。

删除软件包和版本

代码库模式:标准、远程

您可以删除软件包及其所有版本,也可以删除特定版本。

  • 软件包一经删除便无法撤消。
  • 对于远程仓库,只有软件包的缓存副本会被删除。上游来源不受影响。如果您删除缓存的软件包,Artifact Registry 会在下次收到针对相同软件包版本的请求时下载并再次缓存该软件包。

在删除软件包或软件包版本之前,请确认您已在其中告知或解决任何重要依赖项。

如需删除软件包,请按如下所述操作:

控制台

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,点击相应代码库。

    软件包页面列出代码库中的软件包。

  3. 选择要删除的软件包。

  4. 点击删除

  5. 在确认对话框中,点击删除

gcloud

运行以下命令:

gcloud artifacts packages delete PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION] [--async]

地点

  • PACKAGE 是代码库中的软件包名称。
  • REPOSITORY 是代码库的名称。如果您配置了默认代码库,则可以省略此标志以使用默认值。
  • LOCATION 是单区域或多区域位置。使用此标志可查看特定位置的代码库。如果您配置了默认位置,可以省略此标志,以便使用默认位置。
  • --async 会立即返回结果,而无需等待正在进行的操作完成。

如需删除软件包的版本,请按如下所述操作:

控制台

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,点击相应代码库。

    软件包页面列出代码库中的软件包。

  3. 点击一个软件包以查看它的版本。

  4. 选择您要删除的版本。

  5. 点击删除

  6. 在确认对话框中,点击删除

gcloud

运行以下命令:

gcloud artifacts versions delete VERSION \
    --package=PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION] \
    [--async]

地点

  • PACKAGE 是代码库中的软件包名称。
  • REPOSITORY 是代码库的名称。如果您配置了默认代码库,则可以省略此标志以使用默认值。
  • LOCATION 是单区域或多区域位置。使用此标志可查看特定位置的代码库。如果您配置了默认位置,可以省略此标志,以便使用默认位置。
  • --async 会立即返回结果,而无需等待正在进行的操作完成。

后续步骤