【问题标题】:What am I doing wrong in trying to deploy with the Force.com Migration Tool (ANT)尝试使用 Force.com 迁移工具 (ANT) 进行部署时我做错了什么
【发布时间】:2011-01-22 11:27:45
【问题描述】:

我目前正在尝试完成有关“Deploying with the Force.com Migration Tool (ANT)”的 SalesForce.com 教程。

我确定我遗漏了一些东西……可能是因为我对 Ant 的了解和经验非常有限。

我创建了一个新的 Java 项目并将示例目录从 salesforce_ant_20.0.zip 复制到其中。我修改了 build.properties 并在 Eclipse 中运行 build.xml 来测试它。一切都很好。

所以,我在 src 目录中创建了 Sandbox1,并将我的 SFDC 项目中的 package.xml 复制到其中。然后我将 build.properties 和 build.xml 从 sample 复制到 src 目录中。现在,当我运行 build.xml 时,它抱怨 deployRoot mypkg 不存在。我将 deployRoot 更改为 Sandbox1 并尝试再次测试。结果如下:

Buildfile: D:\education\sfdc\Deploy\src\build.xml
test:
[sf:deploy] Request for a deploy submitted successfully.
[sf:deploy] Request Id for the current deploy task: 04sA0000002GwsGIAS
[sf:deploy] Waiting for server to finish processing the request…
[sf:deploy] Request Status: Completed

BUILD FAILED
D:\education\sfdc\Deploy\src\build.xml:14: FAILURES:
Error: package.xml(Account):An object ‘Account’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(AccountContactRole):An object ‘AccountContactRole’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(Activity):An object ‘Activity’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(Asset):An object ‘Asset’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(Campaign):An object ‘Campaign’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(CampaignMember):An object ‘CampaignMember’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(Case):An object ‘Case’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(CaseContactRole):An object ‘CaseContactRole’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(Contact):An object ‘Contact’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(ContentVersion):An object ‘ContentVersion’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(Contract):An object ‘Contract’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(ContractContactRole):An object ‘ContractContactRole’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(Event):An object ‘Event’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(Idea):An object ‘Idea’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(Lead):An object ‘Lead’ of type CustomObject was named in package.xml, but was not found in zipped directory
Error: package.xml(Opportunity):An object ‘Opportunity’ of type CustomObject was named in package.xml, but was not found in zipped directory

如果有帮助:

(1) /src/sandbox1 仅包含来自 Eclipse 中不同功能的 SalesForce 项目的文件 package.xml。

这个文件说:

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>*</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>*</members>
        <name>ApexComponent</name>
    </types>
    <types>
        <members>*</members>
        <name>ApexPage</name>
    </types>
    <types>
        <members>*</members>
        <name>ApexTrigger</name>
    </types>
    <types>
        <members>*</members>
        <name>CustomApplication</name>
    </types>
    <types>
        <members>*</members>
        <name>CustomLabels</name>
    </types>
    <types>
        <members>*</members>
        <members>Account</members>
        <members>AccountContactRole</members>
        <members>Activity</members>
        <members>Asset</members>
        <members>Campaign</members>
        <members>CampaignMember</members>
        <members>Case</members>
        <members>CaseContactRole</members>
        <members>Contact</members>
        <members>ContentVersion</members>
        <members>Contract</members>
        <members>ContractContactRole</members>
        <members>Event</members>
        <members>Idea</members>
        <members>Lead</members>
        <members>Opportunity</members>
        <members>OpportunityContactRole</members>
        <members>OpportunityLineItem</members>
        <members>PartnerRole</members>
        <members>Product2</members>
        <members>Site</members>
        <members>Solution</members>
        <members>Task</members>
        <members>User</members>
        <members>UserLicense</members>
        <name>CustomObject</name>
    </types>
    <types>
        <members>*</members>
        <name>CustomObjectTranslation</name>
    </types>
    <types>
        <members>*</members>
        <name>CustomPageWebLink</name>
    </types>
    <types>
        <members>*</members>
        <name>CustomSite</name>
    </types>
    <types>
        <members>*</members>
        <name>CustomTab</name>
    </types>
    <types>
        <members>*</members>
        <name>DataCategoryGroup</name>
    </types>
    <types>
        <members>unfiled$public</members>
        <members>unfiled$public/Large_Invoice_Template</members>
        <members>unfiled$public/MarketingProductInquiryResponse</members>
        <members>unfiled$public/SUPPORTSelfServiceNewCommentNotificationSAMPLE</members>
        <members>unfiled$public/SUPPORTSelfServiceNewUserLoginInformationSAMPLE</members>
        <members>unfiled$public/SUPPORTSelfServiceResetPasswordSAMPLE</members>
        <members>unfiled$public/SalesNewCustomerEmail</members>
        <members>unfiled$public/SupportCaseAssignmentNotification</members>
        <members>unfiled$public/SupportCaseCreatedPhoneInquiries</members>
        <members>unfiled$public/SupportCaseCreatedWebInquiries</members>
        <members>unfiled$public/SupportCaseResponse</members>
        <members>unfiled$public/SupportEscalatedCaseNotification</members>
        <members>unfiled$public/SupportEscalatedCaseReassignment</members>
        <members>unfiled$public/SupportSelfServiceNewLoginandPassword</members>
        <members>unfiled$public/SupportSelfServiceResetPassword</members>
        <name>EmailTemplate</name>
    </types>
    <types>
        <members>*</members>
        <name>HomePageComponent</name>
    </types>
    <types>
        <members>*</members>
        <name>HomePageLayout</name>
    </types>
    <types>
        <members>*</members>
        <name>Layout</name>
    </types>
    <types>
        <members>*</members>
        <name>Letterhead</name>
    </types>
    <types>
        <members>*</members>
        <name>Profile</name>
    </types>
    <types>
        <members>ApexDevNet</members>
        <name>RemoteSiteSetting</name>
    </types>
    <types>
        <members>unfiled$public</members>
        <name>Report</name>
    </types>
    <types>
        <members>*</members>
        <name>ReportType</name>
    </types>
    <types>
        <members>*</members>
        <name>Scontrol</name>
    </types>
    <types>
        <members>*</members>
        <name>StaticResource</name>
    </types>
    <types>
        <members>*</members>
        <name>Workflow</name>
    </types>
    <version>20.0</version>
</Package>

来自基于 Java/Ant 的 Force.com 迁移工具的 build.xml 说:

<property file="build.properties"/>
<property environment="env"/>

<!-- Test out deploy and retrieve verbs for package 'mypkg' -->
<target name="test">
  <!-- Upload the contents of the "mypkg" package -->
  <sf:deploy 
            username="${sf.username}" 
            password="${sf.password}" 
            serverurl="${sf.serverurl}" 
            deployRoot="mypkg"
    />
  <mkdir dir="retrieveOutput"/>
  <!-- Retrieve the contents into another directory -->
  <sf:retrieve username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" retrieveTarget="retrieveOutput" packageNames="MyPkg"/>
</target>

<!-- Retrieve an unpackaged set of metadata from your org -->
<!-- The file unpackaged/package.xml lists what is to be retrieved -->
<target name="retrieveUnpackaged">
  <mkdir dir="retrieveUnpackaged"/>
  <!-- Retrieve the contents into another directory -->
  <sf:retrieve username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" retrieveTarget="retrieveUnpackaged" unpackaged="unpackaged/package.xml"/>
</target>

<!-- Retrieve all the items of a particular metadata type -->
<target name="bulkRetrieve">
  <sf:bulkRetrieve username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" metadataType="${sf.metadataType}" retrieveTarget="retrieveUnpackaged"/>
</target>

<!-- Retrieve metadata for all the packages specified under packageNames -->
<target name="retrievePkg">
  <sf:retrieve username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" retrieveTarget="retrieveOutput" packageNames="${sf.pkgName}"/>
</target>

<!-- Deploy the unpackaged set of metadata retrieved with retrieveUnpackaged -->
<target name="deployUnpackaged">
  <sf:deploy username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" deployRoot="retrieveUnpackaged"/>
</target>

<!-- Deploy a zip of metadata files to the org -->
<target name="deployZip">
  <sf:deploy username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" zipFile="${sf.zipFile}" pollWaitMillis="1000"/>
</target>

<!-- Shows deploying code & running tests for code in directory -->
<target name="deployCode">
  <!-- Upload the contents of the "codepkg" directory, running the tests for just 1 class -->
  <sf:deploy username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" deployRoot="codepkg">
    <runTest>SampleDeployClass</runTest>
  </sf:deploy>
</target>

<!-- Shows removing code; only succeeds if done after deployCode -->
<target name="undeployCode">
  <sf:deploy username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" deployRoot="removecodepkg"/>
</target>

<!-- Shows retrieving code; only succeeds if done after deployCode -->
<target name="retrieveCode">
  <!-- Retrieve the contents listed in the file codepkg/package.xml into the codepkg directory -->
  <sf:retrieve username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" retrieveTarget="codepkg" unpackaged="codepkg/package.xml"/>
</target>

<!-- Shows deploying code, running all tests, and running tests (1 of which fails), and logging. -->
<target name="deployCodeFailingTest">
  <!-- Upload the contents of the "codepkg" package, running all tests -->
  <sf:deploy username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" deployRoot="codepkg" runAllTests="true" logType="Debugonly"/>
</target>

<!-- Shows check only; never actually saves to the server -->
<target name="deployCodeCheckOnly">
  <sf:deploy username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" deployRoot="codepkg" checkOnly="true"/>
</target>

<!-- Retrieve the information of all items of a particular metadata type -->
<target name="listMetadata">
  <sf:listMetadata username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" metadataType="${sf.metadataType}"/>
</target>

<!-- Retrieve the information on all supported metadata type -->
<target name="describeMetadata">
  <sf:describeMetadata username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}"/>
</target>

知道我做错了什么或如何解决吗?

【问题讨论】:

    标签: ant build migration salesforce


    【解决方案1】:

    语句but was not found in zipped directory 是与您使用的文件夹名称有关的问题。如果您使用自定义文件夹而不是 codepkg 或 mypkg 等,则需要更改 retrieveTarget="codepkg" unpackaged="codepkg/package.xml" 中的名称以反映每个文件夹中的新名称目标。查看图片转链接了解此说明https://i.stack.imgur.com/GH40d.jpg[1]

    【讨论】:

    • 我知道这是旧的,但这帮助我意识到 SF 部署在多大程度上依赖于文件名。我更改了字段名,但没有更新文件名。更新了文件名,部署效果很好。
    【解决方案2】:

    错误表明您的 package.xml 正在引用目录结构中没有相应文件的组件。从 package.xml 中删除这些引用或添加缺少的自定义对象文件。

    如果这不起作用,您能否编辑您的问题以包含 Sandbox1 的目录列表?

    【讨论】:

    • 除非我误解了教程中的稀疏说明,否则这些文件不应该在目录结构中。据我了解,我要在 Eclipse 中创建一个新项目(不是专门的 salesforce 项目),并在“src”中创建一个名为“Sandbox1”的新文件夹,然后将 package.xml 放入 Sandbox1。 Package.xml 是来自功能性销售团队项目的未经编辑的 package.xml。那是 Sandbox1 中唯一的文件......也许我太字面了。我将尝试创建第二个 salesforce 项目,看看是否有帮助。
    • 不......这根本没有帮助。我敢肯定至少还有一两步……
    • 您能否删除 CustomObject 类型的 * 元素以外的所有内容,然后重试?另外,您要(逻辑上)部署什么?你真的有你想要做的改变,还是你只是看看你是否能让事情发挥作用?您是否已成功执行检索?
    • 我不完全清楚您删除“所有内容”的意思是指该 元素中的所有内容还是文件中的所有内容?我正在尝试部署我为编写教程而创建的 SalesForce 开发人员环境。环境中的默认设置有一些更改。我已使用 SalesForce IDE 成功检索数据,并且还使用 SalesForce ID 将其部署到第二个开发环境。目前,我只是在看看能否让事情顺利进行。
    • 您的 package.xml 正在明确引用 Account、Contact、Lead 等对象。元数据 API 会查看该文件,然后期望这些对象的相应文件。您收到的错误表明这些文件不存在。解决方法是删除对那些丢失文件的引用。因此,您的 CustomObject 的 XML 可能是:*CustomObject.
    【解决方案3】:

    您的构建文件默认为从您的机器“部署”到服务器。这仅在您的机器上有内容时才有效。首先运行“retrieveUnpackaged”。这将获取 package.xml 文件中指定的服务器上的所有内容。然后你可以修改结果并部署。

    就我个人而言,我只将上面显示的 package.xml 类型用于备份目的。我保留一个 package.xml 文件将列出的所有内容(使用“*”加上标准对象)来检索全部内容。我从不使用这些结果在服务器上进行更改,因为最终的“部署”将花费很长时间。

    相反,创建一个 package.xml 文件来获取您需要处理的文件。然后更改您的代码,然后使用这个较小的包进行部署。

    【讨论】:

      【解决方案4】:

      您的包文件使用的是旧版本的 API:

      <version>20.0</version>
      

      而且我很确定该版本不支持您在其中所做的一切。

      快速编辑:36 是我认为的当前版本。 编辑2:伙计,这是一个老问题,我是怎么到这里的?

      【讨论】:

        【解决方案5】:

        为时已晚。但我相信这里的问题非常小,将allowMissingFiles="true" 放入任务中。如果它在 build.xml 指向的目录中找不到文件,它将仍然允许部署。如果 package.xml 中的组件不在目录中,迁移工具不允许提及这些组件,并且使用上述选项的解决方法是。

        即使您有一个 package.xml 来从一个组织中检索所有组件并且您只有 2 个要部署的类,同样的包文件也可以使用 allowmissingfiles=true 选项。

        【讨论】:

          【解决方案6】:

          我希望这将有助于寻找此问题的解决方案的人。这是一个非常基本的问题,您需要将所有文件放在 package.xml 所在的同一目录中。例如,如果您从

          部署元数据

          部署目录/文件夹

          你的 package.xml 和其他文件应该是这个文件夹的一部分。

          部署文件夹将具有以下结构

              package.xml
              objects
                 --> Product2.object
                 --> Account.object
                 --> Opportunity.object
                 --> ***
              classes 
              other metadata
          

          当您尝试部署元数据而不将这些文件作为根目录的一部分时会出现此问题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-11-07
            • 2019-12-27
            • 1970-01-01
            • 2020-05-31
            • 1970-01-01
            • 2019-06-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多