
<h2><strong>Building</strong> AMP from source.</h2>

<p>Building AMP from source is not as hard as you'd think. If you want to be up on the absolute latest, this is the
way to go.
<p>
<ol>
				<li>Install Dependencies. See <a href="../installing/environment.php">this page</a>.
				<li>Get the source. You can do that two ways:
				<ol>
								<li>(Recommended) Use the Team Project Set at <a href="http://eclipse.org/amp/project-sets/amp.psf">http://eclipse.org/amp/project-sets/amp.psf</a>,
								or for committers (extssh): <a href="http://eclipse.org/amp/project-sets/amp.psf">http://eclipse.org/amp/project-sets/amp_committer.psf</a>.
								Import the team project set to get all of the sources.</li>
								<li>(Advanced) If you want to explore and pick the sources yourself, see the <a
												href="repositoryDetails.php">CVS Page</a> for repository details.
								<ul>
												<li>Within the main module, the AMP repository is organized into these components:
												<ul>
																<li>org.eclipse.amp.amf</li>
																<li>org.eclipse.amp.axf</li>
																<li>org.eclipse.amp.agf</li>
																<li>org.eclipse.amp.escape</li>
												</ul>
												</li>
												<li>There are also a number of projects in:
												<ul>
																<li>dependencies</li>
																<li>org.ascape</li>
												</ul>
												</li>
												<li>Each module is organized in the standard way:
												<ul>
																<li>features</li>
																<li>plugins</li>
																<li>examples</li>
																<li>tests</li>
												</ul>
												Grab everything from the plugins directories of each module, except that you only need org.eclipse.emf.java
												and org.jdom from dependencies. (Unless you are planning on releasing code, you really only need the
												contents of the plugin projects to build.)</li>
												<li>You'll also need some GEF3D dependencies from
												svn://dev.eclipse.org/svnroot/technology/org.eclipse.gef3d/:
												<ul>
																<li>org.eclipse.draw3d</li>
																<li>org.eclipse.draw3d.geometry</li>
																<li>org.eclipse.draw3d.graphics3d</li>
																<li>org.eclipse.draw3d.lwjgl</li>
																<li>org.eclipse.draw3d.ui</li>
																<li>org.eclipse.gef3d"</li>
												</ul>
												</li>
				</ol>
				<li>Setup
				<ol>
								<li>Make sure you use ISO-8859-1 as default text file encoding: Preferences &rarr; Workspace &rarr; Text
								file encoding &rarr; Other = ISO-8859-1</li>
								<li>Do a clean build. Project &rarr; Clean.. &rarr; Clean all Projects.</li>
								<li>Please report any issues to the AMP newsgroup.</li>
				</ol>
				</li>
				<li>Run it! To run the completed environment, just create an Eclipse Application. See the <a
								href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tools/launchers/eclipse_application_launcher.htm">Eclipse
				documentation</a> for more information.
				<ol>
								<li>Select Run &rarr; Run Configurations..</li>
								<li>Select Eclipse Application and click "New Launch Configuration".</li>
								<li>The default "All Workspace and Enabled Target Plugins.." option is fine. If you want to specify individual plugins, you will probably need at least:
								<uL>
								<li>org.eclipse.amp.amf.ide</li>
								<li>org.eclipse.amp.escape.amf.ide</li>
								<li>org.eclipse.amp.amf.ide</li>
								<li>org.eclipse.amp.amf.data.editor</li>
								<li>org.eclipse.amp.amf.paramters.ui</li>
								<li>org.eclipse.amp.amf.testing.ide</li>
								<li>org.eclipse.sdk</li>
								</ul>Then, select the "Add Required Plugins" button.</li>
								<li>Click the Run button.</li>
								<li>A new Eclipse application should launch. Note that you can also launch using the Debugger which is
								helpful for debugging issues with AMP models.</li>
				</ol>
				</li>
</ol>