PAYATHON 2026

namespace org 中的 ECA 如何解决 2GP 打包报错?

数据阿明

可以使用 namespace org,需启用跨组织打包配置

可以将符合条件的 namespace org 作为 ECA 的源组织,通过关联的 Dev Hub 创建 2GP managed package。如果 ECA 创建在非 Dev Hub org 中,需要在创建包版本时使用的定义文件里设置 enablePackageEcaOauthFromDevOrg: true。Salesforce 官方文档指出,缺少这一设置会在创建包版本时触发有关 ephemeral orgs 的错误。官方配置说明

原问题没有提供组织类型、项目配置或执行命令,因此还不能确定实际缺少哪一步。

为什么源组织不是临时组织,也可能收到这个错误?

创建 2GP 包时,日志中出现了以下错误:

ExternalClientApplication. External client apps that are created in ephemeral orgs can't be packaged.

遇到这条错误时,需要检查 ECA 的实际来源,以及非 Dev Hub 源组织的打包配置。仅凭错误提示,不能认定 namespace org 本身是临时组织。

对于使用 OAuth 的 ECA,全局 OAuth 设置包含敏感凭据,必须保存在能够长期存在的非临时组织中,不能随包分发。关联到源应用的订阅组织会依赖这些设置。ECA 关联机制说明

如何配置 namespace org 和 Dev Hub?

按以下顺序检查:

  1. 在作为源组织的 namespace org 中创建 ECA,将 Distribution State 设为 Packaged。
  2. 在负责打包的 Dev Hub 中启用 2GP,并通过 Namespace Registry 关联源组织的 namespace。
  3. 将 ECA 元数据检索到 Salesforce DX 项目,确认项目使用对应的 namespace。
  4. 在 config/project-scratch-def.json 中合并以下设置,并在创建包版本时通过 -f 显式指定该文件。
{
  "settings": {
    "externalClientAppSettings": {
      "enablePackageEcaOauthFromDevOrg": true
    }
  }
}

保留定义文件中的其他配置。如果已有 settings,将新字段合并进去。这是 Salesforce 针对非 Dev Hub 源组织提供的打包流程。官方操作步骤

创建包和包版本的命令示例

以下示例假设 Salesforce DX 项目、namespace 和待打包元数据均已准备好,PackagingHub 是已登录的 Dev Hub 别名,包目录为 force-app。

首次创建包时执行:

sf package create --name MyEcaPackage --package-type Managed --path force-app --target-dev-hub PackagingHub

随后创建包版本,传入刚才修改的定义文件:

sf package version create --package MyEcaPackage --target-dev-hub PackagingHub --installation-key "REPLACE_WITH_INSTALLATION_KEY" -f config/project-scratch-def.json -w 15

将安装密钥占位符替换为实际值。如果已有包,可以直接使用现有包名称或 ID 创建版本。命令结构参见官方打包示例。

仍然失败时检查什么?

  • 确认实际执行的命令读取了修改后的定义文件,尤其要检查 CI 中的 -f 路径。
  • 检查 .eca-meta.xml 中的 orgScopedExternalApp。其格式为 [Organization_ID]:[External Client App Name],应核对是否对应预期的源组织和应用。不要随意替换组织 ID 来绕过错误。字段说明
  • 检查包目录是否误包含 ExtlClntAppGlobalOauthSettings。它保存敏感 OAuth 信息,不能打包或加入源码仓库;可打包的 OAuth 配置属于 ExtlClntAppOauthSettings。2GP 组件说明
  • 如果源组织、namespace 关联和定义文件都正确,保留完整的包版本创建日志,向 Salesforce Support 核查组织资格或平台问题。现有信息不足以认定这是平台缺陷。

ISV 也可以采用 Salesforce 官方建议的另一条路径:直接在 PBO(Partner Business Org)的 Dev Hub 中定义 ECA,再检索到项目并打包测试。ISV 打包建议

备注:内容仅供参考。