<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Modular Mind &#187; Configuration</title>
	<atom:link href="http://www.modumind.com/category/configuration/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.modumind.com</link>
	<description>Eclipse RCP and OSGi training - online or onsite</description>
	<lastBuildDate>Thu, 18 Feb 2010 19:07:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Managing Eclipse RCP launch arguments</title>
		<link>http://www.modumind.com/2009/09/08/managing-eclipse-rcp-launch-arguments/</link>
		<comments>http://www.modumind.com/2009/09/08/managing-eclipse-rcp-launch-arguments/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 20:05:46 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Rich Client Platform]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://www.modumind.com/?p=935</guid>
		<description><![CDATA[In my last post I discussed how to best manage run configurations for Eclipse RCP applications.  But there was one related topic I wanted to discuss in more detail, and that is how to manage launch arguments.
What are launch arguments?
Launch arguments are arguments that are added to the command line when you execute your [...]]]></description>
			<content:encoded><![CDATA[<p>In my last post I discussed <a href="/2009/09/03/run-configurations-and-eclipse-rcp/">how to best manage run configurations for Eclipse RCP applications</a>.  But there was one related topic I wanted to discuss in more detail, and that is how to manage launch arguments.</p>
<p><strong>What are launch arguments?</strong></p>
<p>Launch arguments are arguments that are added to the command line when you execute your application. These arguments come in two flavors:</p>
<ul>
<li><em>Program arguments</em> &#8211; Arguments that are Eclipse-specific. For example, the <code>-clean</code> argument will clear the configuration area on startup.</li>
<li><em>VM arguments</em> &#8211; Arguments that make sense to the Java VM. For example, the <code>-Xmx</code> argument allows you to set the maximum heap size for the VM.</li>
</ul>
<p>Both of these argument types can be set on the <strong>Arguments</strong> tab in the Run Configurations dialog.<br />
<img src="http://www.modumind.com/wp-content/uploads/2009/09/launch-arguments-1.png" alt="launch-arguments-1" title="launch-arguments-1" width="512" height="471" class="aligncenter size-full wp-image-938" /></p>
<p><strong>Launch arguments and the target platform</strong></p>
<p>We oftentimes want to apply the same launch arguments to all of our run configurations, and one way to handle that is to specify them on your <em>target platform</em>. On the <strong>Target Platform</strong> preference page there is a section where you can add whatever arguments you wish.<br />
<img src="http://www.modumind.com/wp-content/uploads/2009/09/launch-arguments-2.png" alt="launch-arguments-2" title="launch-arguments-2" width="508" height="555" class="aligncenter size-full wp-image-941" /><br />
The arguments associated with a target platform will be added to run configurations <em>generated from the Manifest Editor</em>. They will <em>not</em> be added to configurations generated by the Product Configuration Editor. Also, because the Manifest Editor link does not regenerate a configuration each time, you will need to explicitly delete a configuration if you want to recreate it using new target platform arguments.</p>
<p><strong>Launch arguments and products</strong></p>
<p>A second way to manage arguments is to add them using the <strong>Launching</strong> tab of the Product Configuration Editor.<br />
<img src="http://www.modumind.com/wp-content/uploads/2009/09/launch-arguments-3.png" alt="launch-arguments-3" title="launch-arguments-3" width="550" height="537" class="aligncenter size-full wp-image-943" /><br />
When you add arguments in this way, two things will happen:</p>
<ol>
<li>The arguments will be added to your run configurations <em>if you launch using the link in the Product Configuration Editor</em>. Because this link regenerates the run configuration each time, consistent use of the link guarantees that your configuration is in synch with your product definition.</li>
<li>The arguments will also be added to your deployed application in the form of an INI file. This is a nice feature, but it means that you need to be careful when adding arguments that are only useful during development. For example, you may want to use <code>-clean</code> to clear the configuration area when you&#8217;re developing, but you probably do not want to ship this argument to your customers.</li>
</ol>
<p><strong>Launch arguments best practices</strong></p>
<p>My approach is to add arguments using the Product Configuration Editor and to always launch my applications using the link in that editor. This guarantees that my run configurations are always in synch with my product definition. I also take care to not add arguments that would be detrimental to a deployed application. Some, such as <code>-consoleLog</code>, I consider harmless in a deployed app and I just leave those in. </p>
<p>If for some reason I absolutely have to add an argument that should not be deployed, I usually clean it out of the INI file during the build process. It&#8217;s pretty rare for me to have to do this, though.</p>
<a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="DZone" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="Digg" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="Evernote" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="Reddit" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a> <a href="http://www.addtoany.com/add_to/squidoo?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="Squidoo" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/squidoo.png" width="16" height="16" alt="Squidoo"/></a> <a href="http://www.addtoany.com/add_to/stumbleupon?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="StumbleUpon" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/stumbleupon.png" width="16" height="16" alt="StumbleUpon"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/yahoo_bookmarks?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments" title="Yahoo Bookmarks" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/yahoo.png" width="16" height="16" alt="Yahoo Bookmarks"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F08%2Fmanaging-eclipse-rcp-launch-arguments%2F&amp;linkname=Managing%20Eclipse%20RCP%20launch%20arguments">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://www.modumind.com/2009/09/08/managing-eclipse-rcp-launch-arguments/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Run Configurations and Eclipse RCP</title>
		<link>http://www.modumind.com/2009/09/03/run-configurations-and-eclipse-rcp/</link>
		<comments>http://www.modumind.com/2009/09/03/run-configurations-and-eclipse-rcp/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 20:34:53 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Rich Client Platform]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://www.modumind.com/?p=876</guid>
		<description><![CDATA[When developing Eclipse RCP applications we execute our code in the IDE using a run configuration. A run configuration is basically a collection of properties that defines how our application should be run, and these properties include:

What application or product to launch, specified by id
Which bundles to make available at runtime
What program (Eclipse-specific) or VM [...]]]></description>
			<content:encoded><![CDATA[<p>When developing Eclipse RCP applications we execute our code in the IDE using a <em>run configuration</em>. A run configuration is basically a collection of properties that defines how our application should be run, and these properties include:</p>
<ol>
<li>What application or product to launch, specified by id</li>
<li>Which bundles to make available at runtime</li>
<li>What program (Eclipse-specific) or VM arguments to use</li>
</ol>
<p>And while run configurations are relatively straightforward, there can be some confusion about how to create and manage them. Hopefully this post will help.</p>
<p><strong>Creating a run configuration</strong></p>
<p>There are three ways to create a run configuration:</p>
<ol>
<li>By hand (yuck!)</li>
<li>Clicking the <strong>Launch an Eclipse application</strong> link on the <strong>Overview</strong> tab of the Manifest Editor.</li>
<li>Clicking the <strong>Launch an Eclipse application</strong> link on the <strong>Overview</strong> tab of the Product Configuration Editor.</li>
</ol>
<p>Let&#8217;s ignore creating a run configuration by hand. If you prefer that approach, more power to you! But most of us find it easier to generate run configurations by clicking the editor links mentioned above.</p>
<p>Where some confusion arises is that the two editors in question generate run configurations in different ways. Let&#8217;s look at each editor in turn.</p>
<p><strong>Creating a run configuration with the Manifest Editor</strong></p>
<p>It&#8217;s possible to generate a run configuration by clicking on the <strong>Launch an Eclipse application</strong> link in the <strong>Testing</strong> section of the Manifest Editor. We can also accomplish this by clicking the equivalent toolbar button. Both options are highlighted by the red squares in the image below.<br />
<img src="http://www.modumind.com/wp-content/uploads/2009/09/manifest-run-config.png" alt="manifest-run-config" title="manifest-run-config" width="550" height="538" class="aligncenter size-full wp-image-882" /><br />
But what really happens when you click the link or button? Behind the scenes, the following logic is performed:</p>
<ol>
<li>The <em>bundle associated with the manifest being edited</em> is searched for an application or product extension. If one is found, that extension will be used when creating the run configuration.</li>
<li>The current run configurations are searched, and if an existing configuration exists for the particular application or product id, then that configuration will simply be reused.</li>
<li>If no matching run configuration is found, then a new one will be created. The available bundle list is created by traversing the dependency graph for the bundle associated with the manifest being edited. The arguments are taken from the current target platform for the workspace.</li>
</ol>
<p>And what happens if you launch from a bundle that does <em>not</em> contain an application or product? Then the application will be set to Eclipse itself and a new instance of Eclipse will be launched with your bundles added into the mix.</p>
<p>This can be a source of great confusion for Eclipse RCP developers, and this is one reason that I discourage use of the Manifest Editor to create run configurations. On the other hand, it&#8217;s usually obvious if you&#8217;ve selected the wrong manifest. Your first tip that something is amiss will be the appearance of the Eclipse splash screen. If you&#8217;re not seeing your own splash screen, you&#8217;ve probably launched from the wrong manifest.</p>
<p><strong>Creating a run configuration with the Product Configuration Editor</strong></p>
<p>Because it&#8217;s very easy to create incorrect run configurations using the Manifest Editor, I usually suggest that developers use the Product Configuration Editor instead. The options look very similar in this editor (unfortunately at times they look <em>too</em> similar), and you can see them highlighted in red below.<br />
<img src="http://www.modumind.com/wp-content/uploads/2009/09/product-run-config.png" alt="product-run-config" title="product-run-config" width="543" height="581" class="aligncenter size-full wp-image-894" /><br />
But while the options look similar in both editors, there are slight differences in behavior. Specifically, the Product Configuration Editor uses the following logic:</p>
<ol>
<li>First, a new run configuration is <em>always</em> generated. No attempt is made to search existing run configurations for a match, and if one already exists <em>it will be overwritten</em>. This can be particularly important if you&#8217;ve made manual changes to your run configurations.</li>
<li>The product id will obviously be taken from the product configuration file, as will the available bundles (<strong>Dependencies</strong> tab) and arguments (<strong>Launching</strong> tab). Note that arguments associated with your target platform are <em>not</em> used in this case.
</ol>
<p><strong>What is the best approach?</strong></p>
<p>As you&#8217;ve probably surmised, I suggest using the Product Configuration to create run configurations. Here are the two biggest reasons:</p>
<ul>
<li>It&#8217;s easier to make a mistake with the Manifest Editor by selecting a manifest in the wrong bundle.</li>
<li>Using the bundle list generated by a product configuration ensures the same bundles will be built into your deployed application. When using the Manifest Editor, it&#8217;s very easy to get into a situation where your app works in the IDE, but not after it is built and deployed.</li>
</ul>
<p>As an aside, it&#8217;s possible to generate your run configuration from the Product Configuration Editor and then run it later by clicking the <strong>Run</strong> button in the main toolbar or selecting it in the Run Configurations dialog. This will obviously not cause your existing configuration to get overwritten.</p>
<p>I choose not to do this because I prefer to treat my product configuration as the only real location for runtime properties. I&#8217;ll come back to this issue in a subsequent post, as this discussion has gone a bit long!</p>
<a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="DZone" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="Digg" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="Evernote" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="Reddit" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a> <a href="http://www.addtoany.com/add_to/squidoo?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="Squidoo" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/squidoo.png" width="16" height="16" alt="Squidoo"/></a> <a href="http://www.addtoany.com/add_to/stumbleupon?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="StumbleUpon" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/stumbleupon.png" width="16" height="16" alt="StumbleUpon"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/yahoo_bookmarks?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP" title="Yahoo Bookmarks" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/yahoo.png" width="16" height="16" alt="Yahoo Bookmarks"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.modumind.com%2F2009%2F09%2F03%2Frun-configurations-and-eclipse-rcp%2F&amp;linkname=Run%20Configurations%20and%20Eclipse%20RCP">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://www.modumind.com/2009/09/03/run-configurations-and-eclipse-rcp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obfuscating an RCP Application</title>
		<link>http://www.modumind.com/2007/06/22/obfuscating-an-rcp-application/</link>
		<comments>http://www.modumind.com/2007/06/22/obfuscating-an-rcp-application/#comments</comments>
		<pubDate>Fri, 22 Jun 2007 15:15:55 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Builds]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Rich Client Platform]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://rcpquickstart.wordpress.com/2007/06/22/obfuscating-an-rcp-application/</guid>
		<description><![CDATA[In this article I&#8217;m going to take you on a tour of the process I use to build a large-scale RCP application. Obfuscating an RCP application can seem like a big challenge, but it&#8217;s really not so bad.
 

Selecting an obfuscator
The first challenge is selecting the right tool for the job. The most important feature of [...]]]></description>
			<content:encoded><![CDATA[<p>In this article I&#8217;m going to take you on a tour of the process I use to build a large-scale RCP application. Obfuscating an RCP application can seem like a big challenge, but it&#8217;s really not so bad.</p>
<p> </p>
<p><span id="more-37"></span></p>
<h3>Selecting an obfuscator</h3>
<p>The first challenge is selecting the right tool for the job. The most important feature of an RCP application obfuscator (assuming it does a good job at obfuscating!) is that it can obfuscate multiple jars at the same time. Some tools expect you to obfuscate one jar at a time, and unless your RCP application contains only one jar, these tools will not work.</p>
<p>In my case, I chose a tool called <a href="http://www.zelix.com">Zelix Klassmaster</a>. This obfuscator handles multiple jars, and also integrates nicely into a build process managed by Ant scripts. The process I describe is based on Klassmaster. I&#8217;ve also heard that the open-source obfuscator <a href="http://proguard.sourceforge.net/">ProGuard</a> can handle multiple jars at the same time, but I haven&#8217;t tried this tool myself. If anyone manages to get a similar process working with ProGuard, I&#8217;d appreciate it if you&#8217;d let me know.</p>
<h3>The big picture</h3>
<p>The big picture for an obfuscation process includes all of the jars that are distributed with your application. These jars can then be divided into two categories: those that will be obfuscated and those that will not.</p>
<ul>
<li><em>Obfuscated</em> &#8211; Jars that make up your own proprietary plugins</li>
<li><em>Non-Obfuscated</em> &#8211; All third-party plugins and libraries, including the RCP plugins. This category may also include your own plugins that cannot be obfuscated for one reason or another.</li>
</ul>
<p>Zelix Klassmaster operates on these two sets of jars, loading them all into memory at the same time and then obfuscating only those in the first category.</p>
<h3>The build process</h3>
<p>An obfuscation process begins after an RCP product has been exported either by the Product Export Wizard or by an automated build process. The exported application is then obfuscated using an Ant script and a related Zelix script. The Ant script controls the process, and it has three functions:</p>
<ol>
<li>Create lists of jars and other parameters which are then substituted into the Zelix script.</li>
<li>Execute the <em>obfuscate</em> Ant task provided by the Zelix obfuscator.</li>
<li>Replace the original plugin jars with the new obfuscated jars.</li>
</ol>
<p>In the obfuscate Ant task, Zelix loads all of the plugin jars into memory and then obfuscates those in the list to be obfuscated. These jars are placed into a new folder (in my case a folder called &#8220;obfuscated&#8221;). These jars are then merged back into the plugin directory of the application.</p>
<p>Of course, if your plugins are not exported as jars, then this process will be a little more involved. Another good argument for migrating to the new packaging structure.</p>
<h3>Excluding package names &#8211; choosing a naming convention</h3>
<p>Exclusions are one of the trickiest part of obfuscating any application, and in particular an RCP application. A good general rule of thumb is that <em>any</em> class referenced in an extension or extension point should be excluded. This doesn&#8217;t mean that the code in the class won&#8217;t be obfuscated, but that <em>both the package and class names</em> associated with the class need to be excluded. I&#8217;ll deal with class names in a bit, but first I&#8217;d like to address the issue of package exclusion.</p>
<p>The important thing about package exclusion is that when you exclude a package name that is deep in your package hierarchy, you are <em>required</em> to exclude all other packages above it. This can make it difficult to exclude packages deep in your hierarchy without abandoning package name obfuscation entirely.</p>
<p>The solution I&#8217;ve come up with is to make a clear distinction between obfuscated and non-obfuscated packages in the package naming conventions I use. It turns out that this convention fits nicely with another naming convention used in the Eclipse code itself that separates code making up the public API from internal code. Basically, package names that can be obfuscated are always considered to be &#8220;internal&#8221; packages and will <em>never</em> contain classes referenced by extensions or extension points. Public packages are excluded from package name obfuscation and may contain excluded classes.</p>
<p>To make this convention as useful as possible (to allow as many packages to be obfuscated as possible), this distinction between public and internal needs to be made very high in the package structure. My convention differs from the Eclipse convention in that I make this branch even before the plugin name portion of the package structure. Here is an example of the convention I use.</p>
<ul>
<li><em>Public package</em> &#8211; com.marketcontours.plugin-name.subpackage</li>
<li><em>Obfuscated package</em> &#8211; com.marketcontours.internal.plugin-name.subpackage</li>
</ul>
<p>Of course, only public packages can be included in the &#8220;Exported Packages&#8221; list for a plugin. If you specify a package that will be obfuscated, the plugin will not be able resolve the package name at runtime. This is just one more reason to align the concepts of public/internal packages and non-obfuscated/obfuscated packages. And finally, by maximizing the amount of classes in internal packages (which is a good thing to do for many reasons), we can keep the amount of unobfuscated package names to a minimum.</p>
<h3>Excluding class names &#8211; a new properties file</h3>
<p>The second challenge is to exclude the names of classes and interfaces referenced by extensions and extension points. I&#8217;ve found that the easiest way to do this is to track the exclusions at the plugin level with a new properties file called <code>obfuscation.properties</code>. Whenever I need to add a new exclusion, I put it into this property file, and then at build time these exclusions are combined by Zelix into a master exclusion list. The exclusion format I use is particular to Zelix, and is meant to exclude both the package and class names of the classes in question. To see the details of what the exclusions look like, check out the sample properties file included in the download below.</p>
<p>Remember that you need to include any class referenced in either your <code>plugin.xml</code> or <code>manifest.mf</code> files. This includes the Plugin (or Activator) class, if you use one.</p>
<p>Also, for now, each <code>obfuscation.properties</code> file must be added by hand to the the Zelix script. So every time you create a new plugin, you&#8217;ll need to edit the script. One area for improvement would be to have the Ant script create the list of properties files at build time and substitute them into the Zelix script.</p>
<h3>Obfuscation and localization</h3>
<p>There are a few extra gotchas that need to be handled when obfuscating an RCP application. The main one is that your localization classes (if you are using the new NLS class) need to be excluded from obfuscation. Fortunately, this can be done with one exclusion in the Zelix script:<br />
<code><br />
exclude     *.* + extends org.eclipse.osgi.util.NLS;<br />
</code><br />
This line causes any class that extends the NLS class to be excluded from obfuscation.</p>
<p>A second issue also relates to NLS classes. When Zelix does flow-control obfuscation (for more information on this feature, see the Zelix site), it adds a static variable to various classes. This is usually not a problem, but with NLS classes it is. The NLS static initializer attempts to resolve the these static variables which it thinks are localized strings, and this initialization fails for these new variables added by Zelix. This doesn&#8217;t cause visible runtime problems, but it does pollute the logs. But again, this problem can be solved by adding a single exclude to the Zelix properties file:<br />
<code><br />
obfuscateFlowExclude *.* extends org.eclipse.osgi.util.NLS *;<br />
</code></p>
<h3>Try it for yourself</h3>
<p>That ends this brief summary of my obfuscation process. If you would like to try this out for yourself, you can download the scripts that I use. Applying them to your own build process should be pretty straightforward, but if you have any questions, feel free to <a href="mailto:patrick@rcpquickstart.com">ask me questions</a>.</p>
<p><a href="http://idisk.mac.com/pjpaulin-public/rcpquickstart/rcp-obfuscation-scripts.zip">Download obfuscation scripts</a></p>
<a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="DZone" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="Digg" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="Evernote" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="Reddit" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a> <a href="http://www.addtoany.com/add_to/squidoo?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="Squidoo" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/squidoo.png" width="16" height="16" alt="Squidoo"/></a> <a href="http://www.addtoany.com/add_to/stumbleupon?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="StumbleUpon" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/stumbleupon.png" width="16" height="16" alt="StumbleUpon"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/yahoo_bookmarks?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application" title="Yahoo Bookmarks" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/yahoo.png" width="16" height="16" alt="Yahoo Bookmarks"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F22%2Fobfuscating-an-rcp-application%2F&amp;linkname=Obfuscating%20an%20RCP%20Application">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://www.modumind.com/2007/06/22/obfuscating-an-rcp-application/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Getting started with PDE Build</title>
		<link>http://www.modumind.com/2007/06/06/getting-started-with-pde-build/</link>
		<comments>http://www.modumind.com/2007/06/06/getting-started-with-pde-build/#comments</comments>
		<pubDate>Wed, 06 Jun 2007 17:10:28 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Builds]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Rich Client Platform]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://rcpquickstart.wordpress.com/2007/06/06/getting-started-with-pde-build/</guid>
		<description><![CDATA[I often work with teams getting started with Eclipse RCP, and the most common complaint I hear is that it&#8217;s too hard to set up automated builds. PDE Build can be frustrating to work with because it&#8217;s a black box. Your code goes in one side and a fully branded RCP application pops out the [...]]]></description>
			<content:encoded><![CDATA[<p>I often work with teams getting started with Eclipse RCP, and the most common complaint I hear is that it&#8217;s too hard to set up automated builds. PDE Build can be frustrating to work with because it&#8217;s a black box. Your code goes in one side and a fully branded RCP application pops out the other. But if something goes wrong inside the box, where do you start to debug?</p>
<p>In my opinion, the best way to work with PDE Build is to get a very simple build running in your environment. Then make small, incremental additions, verifying the integrity of the process after each change. So the immediate problem for a team becomes: <em>How do I get that first build running?</em></p>
<p>To help with this, I&#8217;ve put together a simple feature-based RCP product build. Just <a href="http://idisk.mac.com/pjpaulin-public/rcpquickstart/pdebuild-tutorial-1.zip">download</a> and import the sample projects. If you follow the instructions in the included <code>readme.txt</code> file, you should have a build running fairly quickly. Before you know it, you&#8217;ll be seeing that always elusive <code>BUILD SUCCESSFUL</code> message flash across your screen!</p>
<p><em>Note: If you want to run this sample build using Eclipse 3.2, you&#8217;ll need to work around a PDE Build <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152577">defect</a>. For instructions on how to do this, check out the &#8220;Problems parsing feature file in a product build&#8221; section on the <a href="http://wiki.eclipse.org/index.php/PDEBuild">PDE Build wiki page</a>.</em></p>
<p><em>Update &#8211; October 6, 2009: The sample projects have now been updated to work with Eclipse 3.5.1</em></p>
<a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="DZone" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="Digg" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="Evernote" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="Reddit" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a> <a href="http://www.addtoany.com/add_to/squidoo?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="Squidoo" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/squidoo.png" width="16" height="16" alt="Squidoo"/></a> <a href="http://www.addtoany.com/add_to/stumbleupon?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="StumbleUpon" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/stumbleupon.png" width="16" height="16" alt="StumbleUpon"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/yahoo_bookmarks?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build" title="Yahoo Bookmarks" rel="nofollow" target="_blank"><img src="http://www.modumind.com/wp-content/plugins/add-to-any/icons/yahoo.png" width="16" height="16" alt="Yahoo Bookmarks"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.modumind.com%2F2007%2F06%2F06%2Fgetting-started-with-pde-build%2F&amp;linkname=Getting%20started%20with%20PDE%20Build">Share/Save</a>]]></content:encoded>
			<wfw:commentRss>http://www.modumind.com/2007/06/06/getting-started-with-pde-build/feed/</wfw:commentRss>
		<slash:comments>279</slash:comments>
		</item>
	</channel>
</rss>
