The Salesforce migration tool can be used to migrate data between different Salesforce Organizations. It is essentially a JAR file which can be used as a plugin to Ant.

The challenge

The following post shows a small Nix snippet which provides the tool into an environment based on nix-shell. This snippet can be placed as a file called default.nix inside of the repository which contains the metadata files for an easy workflow.

The approach

My idea was that I just need two things:

  • Apache Ant
  • The JAR file with the migration tool

I could then use shellHook to set the environment variable CLASSPATH, so that Ant would find the needed extensions.

The result

{ pkgs ? (import <nixpkgs> {})

  ant-salesforce = pkgs.stdenv.mkDerivation rec {
    name = "ant-salesforce-${version}";
    version = "37.0";
    src = pkgs.fetchurl {
      url = "${version}.zip";
      sha256 = "1jgvgrvxrms9rniqsn78blx0qm83kkzq1qcwcdizrn9x95x7i04p";
    buildInputs = [
    installPhase = ''
      mkdir -p $out/share/java
      cp ../*.jar $out/share/java
    meta = {
      homepage =;
      description = "The Salesforce Migration Tool";

  tooling = pkgs.stdenv.mkDerivation {
    name = "tooling";
    src = null;

    buildInputs = [

    shellHook = ''
      export CLASSPATH=${ant-salesforce}/share/java/ant-salesforce.jar

    buildPhase = ''
      echo "Not implemented"
      exit 1


in tooling

How to use it

  • Make sure Nix is installed

    See regarding installation instructions

  • Place the snippet into a file called default.nix

  • Run nix-shell

Now ant should be available and the environment variable CLASSPATH should be set up. To get started with the migration tool, you will need a file build.xml which defines the tasks. More details regarding this can be found in the Salesforce documentation, currently at


comments powered by Disqus