尝试使用Force.com迁移工具(ANT)进行部署时,我做错了什么

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试使用Force.com迁移工具(ANT)进行部署时,我做错了什么相关的知识,希望对你有一定的参考价值。

我目前正在努力通过关于“Deploying with the Force.com Migration Tool (ANT)”的SalesForce.com教程。

我确定我错过了一些东西......可能是因为我对Ant的知识和经验非常有限。

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

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

Buildfile: D:educationsfdcDeploysrcuild.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:educationsfdcDeploysrcuild.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 Migration Tool的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>

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

答案

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

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

另一答案

您的构建文件默认从您的计算机“部署”到服务器。这仅适用于您的计算机上有内容的情况。首先运行“retrieveUnpackaged”。这将获取package.xml文件中指定的服务器上的所有内容。然后您可以修改结果并进行部署。

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

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

另一答案

您的包文件使用旧版API:

<version>20.0</version>

而且我很确定该版本不支持你在那里做的一切。

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

另一答案

为时已晚。但是我认为这里的问题很小,把allowMissingFiles="true"放在任务中。这样做的是,如果它找不到build.xml指向的目录中的文件,它仍然允许部署。迁移工具不允许提及package.xml中的组件(如果它们不在目录中,并且使用上述选项的变通方法)。

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

另一答案

在压缩目录中找不到该语句是与您正在使用的文件夹名称有关的问题。如果您使用的是自定义文件夹而不是codepkg或mypkg等,则需要更改retrieveTarget =“codepkg”unpackaged =“codepkg / package.xml”中的名称,以反映每个目标中的新名称。检查图像转向链接以获取此解释https://i.stack.imgur.com/GH40d.jpg[1]

以上是关于尝试使用Force.com迁移工具(ANT)进行部署时,我做错了什么的主要内容,如果未能解决你的问题,请参考以下文章

尝试比较现有Java Project的Ant构建到Maven或Gradle的迁移吗?

salesforce零基础学习(九十二)使用Ant Migration Tool 实现Metadata迁移

从Ant到Gradle的迁移之路

查看以前 jmeter 结果的工具

Flyway Ant 任务在没有 Ant 的调试模式的情况下显示迁移错误

使用 OSGI 从 Ant 迁移到 Maven?