管理 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]

Replace the following:

  • REPOSITORY is the name of the repository. If you configured a default repository, you can omit this flag to use the default.
  • LOCATION is the regional or multi-regional location of the repository. If you configured a default location, then 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]

Replace the following:

  • 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, then you can omit this flag to use the default.
  • LOCATION is the regional or multi-regional location of the repository. Use this flag to view repositories in a specific location. If you configured a default location, then 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

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

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]

替换以下内容:

  • VERSION 是要删除的版本的名称。
  • PACKAGE 是代码库中的软件包名称。
  • REPOSITORY 是代码库的名称。如果您配置了默认代码库,则可以省略此标志以使用默认值。
  • LOCATION 是代码库的单区域或多区域位置。 使用此标志可查看特定位置中的代码库。如果您配置了默认位置,则可以省略此标志以使用默认值。

--async 标志会导致命令立即返回,而无需等待正在进行的操作完成。

后续步骤