# Building an RCP application from a product configuration file

PDE Build comes with infrastructure to build a complete RCP application from a product configuration file. Most of the setup necessary for such a build can be done through a few modifications to the template build.properties provided in PDE build. The following section focuses on setting up a simple product build assuming that all plug-ins and features (both to build and pre-built) referenced by the product file are already locally available on disk.

## Basic setup

The first step in setting up a build is to create the directory in which the build will take place. This directory will be referred to as the build directory and will contain the plug-ins and features to build as well as all the generated artifacts. Next, copy your plug-ins and features respectively into "plugins" and "features" subdirectories. Your product configuration file is expected to be in one of these plugins/features.

The second step in setting up a build is to copy the template build.properties file from org.eclipse.pde.build/templates/headless-build to a new directory which will be the build configuration directory (also referred to as the configuration directory). Edit the copied build.properties file and set the following properties:

- product: the location of your product configuration file in the form "`/<plug-in or feature id>/path/to/.product`"
- baseLocation: the location of an eclipse install containing all the pre-built features and plug-ins that your product requires in features/ and plugins/ subdirectories. The org.eclipse.equinox.executable feature (it is available from the eclipse p2 repository) is mandatory as it includes the org.eclipse.platform.launchers feature which contains the launchers and root files necessary for a product.
- buildDirectory: the directory the build will take place in. Set this to the full path of the build directory created previously.
- configs: list the configurations for which you want your product to be built. You can uncomment the configuration(s) provided (be careful of the line continuations).
- archivePrefix: the name of the directory of your product once installed on disk.

### Overview of the directory structure

    <buildDirectory>/
    	plugins/
    		pluginToBuildA
    		pluginToBuildB
    			myProduct.product
    		...
    	features/
    		featureToBuild
    		...

    <buildConfiguration>/
    	build.properties

    <baseLocation>
    	plugins/
    		org.eclipse.core.runtime
    		org.eclipse.ui
    		...
    	features/
    		org.eclipse.rcp
    		org.eclipse.platform.launchers
    		...

## Running the build

To run the build you will use the org.eclipse.ant.core.antRunner application. When invoking eclipse with this application to perform a build you need to set two arguments on the command line:

- `-buildfile </path/to/productBuild.xml>`: This is the path to the productBuild.xml provided by pde build. It is located in the org.eclipse.pde.build/scripts/productBuild directory. This is the build file that drives the whole product build process.
- `-Dbuilder=</path/to/configuration folder>`: This is the path to the build configuration folder.

Run the antRunner application using the following command:
`java -jar <eclipseInstall>/plugins/org.eclipse.equinox.launcher_<version>.jar -application org.eclipse.ant.core.antRunner -buildfile <<eclipseInstall>/plugins/org.eclipse.pde.build_<version>/scripts/productBuild/productBuild.xml> -Dbuilder=<path to the build configuration folder>`

## Advanced scenarios

Behind the scenes this setup will generate a feature containing the plug-ins or features specified in your product configuration file. This generated feature is then used to drive a normal feature based headless build. If you require more customization of the build, i.e. fetching from a repository, see the Advanced PDE Build topics for more information.