Application directory layout

The application directory is the current working directory where you issue the sc command.

As a result of the compilation process, the sc program creates an output directory (called output by default), which contains the application bundle file.

The data directory is the root of relative paths for data files. For example, relative path files that are specified in the `file` parameter of FileSource or FileSink operators will use the data directory. If your application reads or writes data to relative paths, you must define a data directory either at compile time, with the --data-directory option, or submission time with the -C data-directory option. There is no "default" data directory and the compiler will not create a one. Additionally, the data directory must exist before running the application.

Consider the following application directory layout:
/+ MyAppDir                     # application directory
  /+ info.xml                   # name, version, dependency information
  /+ my.sample                  # namespace directory
    /+ FooBar.spl               # .spl file with the main composite FooBar
    /+ FooBarHelper.spl         # a second .spl file containing helpers
Compiling the FooBar main composite by using the sc -M my.sample::FooBar command in the MyAppDir application directory results in the following layout.
/+ MyAppDir                      # application directory
  ...                            # authored files, as before
    /* output                      # generated artifacts
     /* my.sample.FooBar.adl     # generated application description file
     /* my.sample.FooBar.sab     # generated application bundle file
     /* bin                      # generated PE binaries
     /* build                    # generated build artifacts
     /* src                      # generated source artifacts
     /* etc                      # configuration artifacts
     /* toolkits                 # root of copied toolkits
  /* toolkit.xml                 # generated toolkit index

The generated artifacts are marked with a * to differentiate them from the authored artifacts that are marked with a +. The application bundle file uses . as a name separator in place of ::. In SPL, the :: is used to separate the namespace qualifier from the operator or operator instance name, as in my.sample::FooBar. The absence of :: in the application bundle file is due to the restrictions on the list of characters that might appear in a file name in certain file systems.