3

I'm using Ant to deploy from within Eclipse and facing a challenge of having to manually manage my package.xml files.

Currently I am unhappy that I a) have to manually manage my package.xml entries and b) can only deploy all objects in my project.

So these are separate but possibly related problems:

  1. Can eclipse or the force.com plugin automatically generate the package.xml file for me? In some of my projects it is there and contains objects, in others it is empty. A refresh from server does not change it. I would expect it to at least contain all subscribed objects.

  2. The sf:deploy target complains if there are files in the folder which are not in package.xml If I want to deploy only selected objects I have to manually generate a package.xml and make a new folder with only those classes.

  3. Is there a way in ant to have targets use a different package.xml?

[target name="deployAll"] [sf:deploy username="${sf.username}" package="package.xml"/] [/target]

[target name="deployBasic"] [sf:deploy username="${sf.username}" package="package.basic.xml"/] [/target]

If anyone else is also using Ant I would appreciate some tips.

3
  • At least part of this appears to be a duplicate of this question here: salesforce.stackexchange.com/questions/7447/…
    – pchittum
    Jan 24, 2013 at 16:34
  • I did read that before posting and it confirmed my suspicion that my package.xml should be getting generated automatically via refresh but isn't :-(
    – Marc
    Jan 24, 2013 at 16:56
  • 1.I am also trying for the same thing what you have mentioned like generating package.xml automatically. Have you got any solution for that???
    – user38346
    Oct 18, 2016 at 15:29

3 Answers 3

2

I am using ant together with Jenkins and indeed you need to generate the package.xml yourself or use that one from the eclipse project.

I found this salesforce migration guide very usefull to see what you can add in the ant script to retrieve/deploy

http://www.salesforce.com/us/developer/docs/daas/salesforce_migration_guide.pdf

3
  • Thanks for that link. It seems to definitely preclude specifying a different package.xml but that I can get around by using ant copy to overwrite the package with ready-made package.xml's
    – Marc
    Jan 25, 2013 at 17:58
  • The next issue of sf:deploy not allowing any files in deployRoot which are not specified in package.xml will require another workaroun: I'm thinking of writing a batch file which zips the classes I want to deploy, adds a pre-made package.xml and thus deploys selected, pre-lackaged objects.
    – Marc
    Jan 25, 2013 at 18:00
  • It would be helpful if I could limit a deploy to just what's in the package.xml file, without complaints. Lacking that, scripts that build zipfiles are the next best thing.
    – tggagne
    Dec 18, 2013 at 2:16
2

OK, the answer to my 2nd question is to use autoUpdatePackage="true". From the documentation p22:

autoUpdatePackage: Optional. Defaults to false. Specifies whether a deploy should continue even if files present in the zip file are not specified in package.xml. Do not use this parameter for deployment to production organizations.

Also, you can have a package.xml which specifies more files than you actually have in your deployRoot or zipFile if you use allowMissingFiles="true". Again the docu:

allowMissingFiles: Optional. Defaults to false. Specifies whether a deploy succeeds even if files that are specified in package.xml are not in the zip file. Do not use this parameter for deployment to production organizations.

The answer too question 3 seems to be No! See p23:

You can deploy any set of components as a package or into your organization directly in the unpackaged package. The package used is not determined by the build.xml target, but by the project manifest (package.xml).

1
  • :-( Apparently you cannot have more files in your zipFile than are specified in package.xml - The documentation says it works with autoUpdatePackage="true" but it doesn't and generates "Not in package.xml" errors. salesforce.com/us/developer/docs/api_meta/Content/…
    – Marc
    Jan 28, 2013 at 9:16
0

You can create a simple shell or batch script that generates the package XML file based on the files contained in the folder to deploy. I have set up something like that for running my test classes individually rather than running all tests.

In regards to your second question, I haven't tried changing the name but I am quite positive it should work, at least it should take different package.xml files in different directories.

1
  • Indeed you need to either have a separate directory or use selective zipping (see above) to create tailor made deployment packages. Would be great if some eclipse guru could explain how to select say 3 classes and pass their name to a batch file... might need to write my own eclipse plugin someday since it seems the force.com IDE is NOT well maintained.
    – Marc
    Jan 25, 2013 at 18:02

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .