<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkINQH88eCp7ImA9WhVUFUU.&quot;"><id>tag:blogger.com,1999:blog-5914783</id><updated>2012-05-21T11:39:51.170+05:30</updated><category term="p2" /><category term="output.." /><category term="Source Folders" /><category term="Search Term" /><category term="Output Folders" /><category term="Export" /><category term="Headless Build" /><category term="Admirer of Eclipse" /><category term="Part" /><category term="vm" /><category term="assertIdentifer" /><category term="Remote Debugging" /><category term="Import" /><category term="Import Arguments Wizard" /><category term="Eclipse Demo Camp" /><category term="Modeled UI" /><category term="equinox" /><category term="Galileo" /><category term="Application.xmi" /><category term="Bundle-RequiredExecutionEnvironment" /><category term="System Library Validation" /><category term="osgi" /><category term="Context Help" /><category term="Custom Editor" /><category term="Export Wizard" /><category term="LinkedIn" /><category term="Launch Config" /><category term="License" /><category term="Update Site" /><category term="Quick Tip" /><category term="Execution Environment" /><category term="Heap" /><category term="E4Application" /><category term="SourceViewerConfiguration" /><category term="TextSourceViewerConfiguration" /><category term="Feature based launching" /><category term="Target Definition" /><category term="Demo Camp" /><category term="Extension Point Schema Builder" /><category term="Heap Status" /><category term="Helios" /><category term="Cheat Sheet" /><category term="RuleBasedPartitionScanner" /><category term=".classpath" /><category term="Eclipse Day" /><category term="XML" /><category term="See also" /><category term="3.6 M2" /><category term="jre.compilation.profile" /><category term="Eclipse.ini" /><category term="SWTBot" /><category term="RCP" /><category term="Target Platform" /><category term="javacWarnings" /><category term="build.xml" /><category term="javacSource" /><category term="Bundle-Localization" /><category term="Eclipse" /><category term="Debug" /><category term="Target Platform State" /><category term="Target Definition Editor" /><category term="bin.includes" /><category term="bin.excludes" /><category term="String Externalize" /><category term="e4" /><category term="Java Build Path" /><category term="Table of Contents" /><category term="Plug-in Manifest Builder" /><category term="Plugins Import Wizard" /><category term="Part Stack" /><category term="Hyperlinking" /><category term="trace" /><category term="Build" /><category term="PDE" /><category term="3.6" /><category term="Product Config" /><category term="enumIdentifier" /><category term="Best Practice" /><category term="source.." /><category term="API Tooling Ant Task" /><category term="SpellingReconcileStrategy" /><category term="src.excludes" /><category term="API Tooling Reports" /><category term="src.includes" /><category term="vmargs" /><category term="Friend of Eclipse" /><category term="API Baseline" /><category term="Spell Check" /><category term="Xmx" /><category term="Xms" /><category term="VM Arguments" /><category term="PDE Good Practices" /><category term="Java compliance" /><category term="Preferences" /><category term="Lazy Loading" /><category term="Part Sash Container" /><category term="API Tooling" /><category term="How to" /><category term="About" /><category term="Singleton Plug-ins" /><category term="PlanetEclipse" /><category term="Heap Size" /><category term="BREE" /><category term="Editor" /><category term="Install" /><category term="Remote Eclipse Debugging" /><category term="Compilation Environment" /><category term="build.properties" /><category term="API Use" /><category term="javacTarget" /><category term="Source Page" /><category term="Source Bundle" /><title>eclipse and me</title><subtitle type="html">my experiences as I use, develop and hack Eclipse</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/EclipsePdeAndMe" /><feedburner:info uri="eclipsepdeandme" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>EclipsePdeAndMe</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;A0EARnY8eSp7ImA9WhRVF0o.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-5275957081109876280</id><published>2011-12-26T14:00:00.001+05:30</published><updated>2012-01-17T11:24:07.871+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T11:24:07.871+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="trace" /><category scheme="http://www.blogger.com/atom/ns#" term="equinox" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title>OSGi Tracing in Equinox</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
The Equinox implementation of OSGi provides the tracing APIs in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;org.eclipse.osgi&lt;/span&gt; plug-in since Eclipse 3.5. The tracing options are generally&amp;nbsp;Boolean&amp;nbsp;flags stored in a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.options&lt;/span&gt; file as key-value pair. A typical .options file would look like this&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;org.my.plugin/ui=true&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;org.my.plugin/ui/editor=true&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;org.my.plugin/ui/prefs=true&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;org.my.plugin/debug=false&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;org.my.plugin/debug/data=true&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The&amp;nbsp;hierarchy&amp;nbsp;is defined using the slashes. But this is only a general practice. The tracing does not understand this.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html"&gt;-osgi.debug&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
To load the values from the .options file, provide the file name as command line parameter (or program parameter in launch config)&lt;br /&gt;
&lt;br /&gt;
command line arg example&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;eclipse.exe -debug C:\tracing\.options&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
program argument (in launch config) example&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;-Dosgi.debug=C:\tracing\.options&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Using -debug is same as setting the osgi.debug system property.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Accessing the option values at runtime&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;1. In RCP application&lt;/b&gt;&lt;br /&gt;
If the RCP application has access to the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;org.eclipse.core,runtime.Platform&lt;/span&gt; object and thus they can access it directly like this&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;String value = Platform.getDebugOption("org.my.plugin/ui");&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
User can validate if the program is running in debug mode using&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Platform.inDebugMode()&lt;/span&gt; API.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. In pure OSGi application&lt;/b&gt;&lt;br /&gt;
An OSGi application can access these options using the DebugOptions service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ServiceTracker&amp;nbsp;debugTracker = new ServiceTracker(bundleContext,&amp;nbsp;DebugOptions.class.getName(), null);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;debugTracker.open();&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;DebugOptions debugOptions =&amp;nbsp;(DebugOptions) debugTracker.getService()&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;boolean uiOption =&amp;nbsp;debugOptions.getBooleanOption("org.my.plugin/ui", false);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Using the API has the advantage that user does not have to check for nullness.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;More Tracing API&lt;/b&gt;&lt;br /&gt;
org.eclipse.osgi provides more APIs which are very helpful in logging the trace.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Registering a debug option listener&lt;/b&gt;&lt;br /&gt;
The listener can be registered as service using the BundleContext (that you receive in the activator class when the bundle is started)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;final Hashtable&amp;lt;String, String&amp;gt; properties = new Hashtable&amp;lt;String, String&amp;gt;(4);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;properties.put(DebugOptions.LISTENER_SYMBOLICNAME, TracingConstants.BUNDLE_ID);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;bundleContext.registerService(DebugOptionsListener.class.getName(), new MyDebugOptionsListener(),&amp;nbsp;properties&amp;nbsp;);&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;2. Listening to the debug option change events&lt;/b&gt;&lt;br /&gt;
Once the listener is registered, a callback will happen each time a debug option is changed. The callback does not tells you the delta and instead throws the whole lot. So we can use this place to read and init from the DebugOptions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/* (non-Javadoc)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;* @see org.eclipse.osgi.service.debug.DebugOptionsListener#optionsChanged(org.eclipse.osgi.service.debug.DebugOptions)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;*/&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;public void optionsChanged(final DebugOptions options) {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;//DebugTrace trace;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;trace = options.newDebugTrace("org.my.plugin");&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// boolean field&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;DEBUG = options.getBooleanOption("org.my.plugin/debug", false);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
this is just an indicative code. You don't have to necessarily do it this way.&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;3. Writing to trace&lt;/b&gt;&lt;br /&gt;
This is the easiest part. Afterall the reason we did the whole exercise was to make the tracing simple. A handle to trace object can be obtained from the debug options.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;/** Trace object for this bundle */&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;private final static DebugTrace TRACE = MyPluginActivator.getDefault().getTrace(); &amp;nbsp;// returns the trace object obtained using&amp;nbsp;options.newDebugTrace("org.my.plugin");&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;@Override&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;protected Control createContents(final Composite parent) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;if (MyPluginActivator.DEBUG) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;TRACE.traceEntry("/debug", parent);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;...&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;...&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Checking&amp;nbsp;MyPluginActivator.DEBUG is optional.&amp;nbsp;TRACE.traceEntry will check for the flag "/debug" anyway. This is to improve of the performance. We store the the flag values to boolean fields and update them through the listener.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Where is the log file?&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;The log is stored in the file as set in the debug options. By default, it tends to store them to &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;workspace\.metadata\trace.log&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;options&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;.setFile(new File("/path/to/trace/file"));&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5. Controlling the trace logs&lt;/b&gt;&lt;br /&gt;
The logs are conntolled by two system properties&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;eclipse.trace.size.max&lt;/span&gt; :&amp;nbsp;The system property used to specify size a trace file can grow before it is rotated&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;eclipse.trace.backup.max&lt;/span&gt; :&amp;nbsp;The system property used to specify the maximum number of backup trace files to use&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Easier way to manager the logs?&lt;/b&gt;&lt;br /&gt;
PDE will be providing UI for managing the logs and make them dynamic. See&amp;nbsp;&lt;b style="background-color: #d0d0d0; color: #333333; font-family: Verdana, sans-serif; font-size: 17px; font-weight: bold; text-align: -webkit-auto;"&gt;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296631" style="background-color: #d0d0d0; color: #333333; font-family: Verdana, sans-serif; font-size: 17px; font-weight: bold; text-align: -webkit-auto;"&gt;Bug&amp;nbsp;296631&lt;/a&gt;&lt;/b&gt;. This is mostly like to make it to Juno M5 release.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What do you mean by dynamic?&lt;/b&gt;&lt;br /&gt;
If you notice, the debug options can be loaded at the launch time (using -osgi.debug) or programatically when running. However, if you wish to turn the tracing on/off in a running product, its tricky. PDE will be providing an extension using which a plug-in can expose its debug option flags. The UI will display these flags in preferences where they can be turned on/off for a running application. Cool! isn't it?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If you find any discrepancies in the above post, please bring it to my notice so that they can be updated.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update&lt;/b&gt;: Tracing UI is now available in latest Integration builds and will be there from Juno M5.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-5275957081109876280?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=JshcNPjjr2c:atFtX63URVA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=JshcNPjjr2c:atFtX63URVA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=JshcNPjjr2c:atFtX63URVA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=JshcNPjjr2c:atFtX63URVA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=JshcNPjjr2c:atFtX63URVA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=JshcNPjjr2c:atFtX63URVA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=JshcNPjjr2c:atFtX63URVA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=JshcNPjjr2c:atFtX63URVA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=JshcNPjjr2c:atFtX63URVA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/JshcNPjjr2c" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5275957081109876280?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5275957081109876280?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/JshcNPjjr2c/osgi-tracing-in-equinox.html" title="OSGi Tracing in Equinox" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><feedburner:origLink>http://blog.ankursharma.org/2011/12/osgi-tracing-in-equinox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYEQXkyfCp7ImA9WhdSFEQ.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-5304766876743783112</id><published>2011-07-24T14:15:00.002+05:30</published><updated>2011-07-24T14:15:00.794+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-24T14:15:00.794+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Execution Environment" /><category scheme="http://www.blogger.com/atom/ns#" term="Java compliance" /><category scheme="http://www.blogger.com/atom/ns#" term="Best Practice" /><title>PDE Good Practices: #8 Set correct EE and Java compliance levels</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
The Execution Environment that is set on the plug-in manifest governs the lowest JRE version the plug-in can work with. If the OSGi runtime (equinox) is running with a lower JRE than the plug-in will not be loaded.&lt;br /&gt;
&lt;br /&gt;
So marked the EE carefully to the lowest JRE you wish to support.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-lxUL-p4rm5E/SvM_lD8HJzI/AAAAAAAACSc/Be6-HmZC4H8/s1600/manifest_overview_ee_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://3.bp.blogspot.com/-lxUL-p4rm5E/SvM_lD8HJzI/AAAAAAAACSc/Be6-HmZC4H8/s400/manifest_overview_ee_1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Similarly, ensure the Java compliance level matches the EE.&lt;br /&gt;
&lt;br /&gt;
For example, assume the EE is set to J2SE-1.4 and the Java compliance to 1.5. Now, if you use annotations, the code would still compile in your workspace. However, when deploying, the plug-in would fail it will tell OSGi that it can run with 1.4 but actually it can not.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-cu5C2JYWjJs/Tim-5IoAQRI/AAAAAAAACpM/aOKKJdexK34/s1600/preference_javacomplaince.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="162" src="http://2.bp.blogspot.com/-cu5C2JYWjJs/Tim-5IoAQRI/AAAAAAAACpM/aOKKJdexK34/s320/preference_javacomplaince.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-5304766876743783112?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=qr8wxfJM24o:y65DoR4RyoY:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=qr8wxfJM24o:y65DoR4RyoY:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=qr8wxfJM24o:y65DoR4RyoY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=qr8wxfJM24o:y65DoR4RyoY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=qr8wxfJM24o:y65DoR4RyoY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=qr8wxfJM24o:y65DoR4RyoY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=qr8wxfJM24o:y65DoR4RyoY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=qr8wxfJM24o:y65DoR4RyoY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=qr8wxfJM24o:y65DoR4RyoY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/qr8wxfJM24o" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5304766876743783112?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5304766876743783112?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/qr8wxfJM24o/pde-good-practices-8-set-correct-ee-and.html" title="PDE Good Practices: #8 Set correct EE and Java compliance levels" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-lxUL-p4rm5E/SvM_lD8HJzI/AAAAAAAACSc/Be6-HmZC4H8/s72-c/manifest_overview_ee_1.JPG" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2011/07/pde-good-practices-8-set-correct-ee-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EDQ3oyfCp7ImA9WhdSFEQ.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-1068227794602442160</id><published>2011-07-23T16:32:00.002+05:30</published><updated>2011-07-24T12:44:32.494+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-24T12:44:32.494+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Extension Point Schema Builder" /><title>Extension Point Schema Builder</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
The name says it all. This builder is responsible for compiling the extension point schema files. But they are &amp;nbsp;exsd (xml format) files. What would one compile them in to. HTML of course :)&lt;br /&gt;
&lt;br /&gt;
So the name does not really says it all. Before we proceed, we need to see the Schema compiler preferences.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-sv349D32Ces/Til2pQtH3zI/AAAAAAAACpE/Ya_o2zj8E_4/s1600/preferences_schema.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="346" src="http://1.bp.blogspot.com/-sv349D32Ces/Til2pQtH3zI/AAAAAAAACpE/Ya_o2zj8E_4/s400/preferences_schema.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
This page gives the the preference to generate the documentation for the extension point schema. When checked, a reference document is generated for each schema. The document (in HTML format) is generated in the folder name as provided in the preference page. As you can see, the default value is 'doc'. The extension point schema builder is responsible for creating this document. If the check-box is not checked, then this builder will not do anything.&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-1068227794602442160?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=fryKAgQgiak:A93Qjp3y_2Q:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=fryKAgQgiak:A93Qjp3y_2Q:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=fryKAgQgiak:A93Qjp3y_2Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=fryKAgQgiak:A93Qjp3y_2Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=fryKAgQgiak:A93Qjp3y_2Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=fryKAgQgiak:A93Qjp3y_2Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=fryKAgQgiak:A93Qjp3y_2Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=fryKAgQgiak:A93Qjp3y_2Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=fryKAgQgiak:A93Qjp3y_2Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/fryKAgQgiak" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/1068227794602442160?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/1068227794602442160?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/fryKAgQgiak/extension-point-schema-builder.html" title="Extension Point Schema Builder" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-sv349D32Ces/Til2pQtH3zI/AAAAAAAACpE/Ya_o2zj8E_4/s72-c/preferences_schema.png" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2011/07/extension-point-schema-builder.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ENQXs_fyp7ImA9WhdSFEQ.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-9037346236014800102</id><published>2011-07-22T16:30:00.002+05:30</published><updated>2011-07-24T12:44:50.547+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-24T12:44:50.547+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Plug-in Manifest Builder" /><title>Plug-in Manifest Builder</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Plug-in Manifest Builder or in short, manifest builder is contributed by PDE through org.eclipse.pde.core plug-in. This is the builder that would compile your plug-in each you change plug-in dependencies, modify build.properties, change classpath, add or remove libraries, save your code/classes. It compiles the plug-in and validate that required files (plugin.xml, etc) are in place and in correct shape.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You may have a look at&amp;nbsp;org.eclipse.pde.internal.core.builders.ManifestConsistencyChecker for the exact details.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
It is one of the two builder that any plug-in/fragment or equinox bundle project will have by default. It is a bit paranoid builder. If it can not understand any change (resource delta) it will go for full build of the project.&lt;br /&gt;
&lt;br /&gt;
The Plug-in Manifest Compiler preference page has a bunch of options that control the problem severity generated by the builder.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-McOYyYwfDWU/Tim1rK2b2-I/AAAAAAAACpI/G6QBJ7BZtAY/s1600/preferences_pluginmanifest.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="367" src="http://4.bp.blogspot.com/-McOYyYwfDWU/Tim1rK2b2-I/AAAAAAAACpI/G6QBJ7BZtAY/s400/preferences_pluginmanifest.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-9037346236014800102?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=IeAAfXpPKw0:yemDRr2vU0g:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=IeAAfXpPKw0:yemDRr2vU0g:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=IeAAfXpPKw0:yemDRr2vU0g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=IeAAfXpPKw0:yemDRr2vU0g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=IeAAfXpPKw0:yemDRr2vU0g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=IeAAfXpPKw0:yemDRr2vU0g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=IeAAfXpPKw0:yemDRr2vU0g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=IeAAfXpPKw0:yemDRr2vU0g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=IeAAfXpPKw0:yemDRr2vU0g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/IeAAfXpPKw0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/9037346236014800102?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/9037346236014800102?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/IeAAfXpPKw0/plug-in-manifest-builder.html" title="Plug-in Manifest Builder" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-McOYyYwfDWU/Tim1rK2b2-I/AAAAAAAACpI/G6QBJ7BZtAY/s72-c/preferences_pluginmanifest.png" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2011/07/plug-in-manifest-builder.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAHQH4-fyp7ImA9WhZUGEg.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-2336088213817489641</id><published>2011-06-12T11:18:00.000+05:30</published><updated>2011-06-12T11:18:51.057+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-12T11:18:51.057+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SWTBot" /><category scheme="http://www.blogger.com/atom/ns#" term="Launch Config" /><title>Using SWTBot as script while developing RCP app</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
SWTBot is a great tool for writing UI tests. However, you can also use it as script to automate your clicks while developing UI.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Use Case&lt;/div&gt;
&lt;div&gt;
Suppose we are developing a wizard and we are designing the UI on third page. Now each time we will have to launch our application and then invoke the wizard. Provide template info for first two pages to reach the page where we are actually working currently. While designing UI we do these steps a number of times.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You can use SWTBot to automate these clicks. The idea is simple. Write an SWTBot script for the clicks to be automated, invoke it using Startup extension.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
How to do it?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1. Add SWTBot to Target Platform&lt;br /&gt;
i) Edit the target platform and add a new 'Software Site' location.&lt;br /&gt;
ii) Provide the URL&amp;nbsp;http://download.eclipse.org/technology/swtbot/helios/dev-build/update-site &amp;nbsp;(see&amp;nbsp;http://www.eclipse.org/swtbot/downloads.php for relevant url for your Eclipse version).&lt;br /&gt;
iii) Select 'SWTBot Eclipse features'.&lt;br /&gt;
&lt;br /&gt;
2) Add the SWTBot script using Startup&amp;nbsp;extension&lt;br /&gt;
i) Create a dummy plug-in.&lt;br /&gt;
ii) Add the '&lt;span class="Apple-style-span" style="color: green; font-family: Monaco; font-size: 11px;"&gt;org.eclipse.ui.startup'&amp;nbsp;&lt;/span&gt;extension and create the class that will get invoked by it&lt;br /&gt;
iii) Add your SWTBot script to this class created above.&lt;br /&gt;
iv) You will have to add the dependency to '&lt;span class="Apple-style-span" style="font-family: Monaco; font-size: 11px;"&gt;org.eclipse.swtbot.eclipse.finder&lt;/span&gt;' for the SWTBot to compile.&lt;br /&gt;
v) Include this plug-in and the SWTBot plug-ins from the target to your launch configuration.&lt;br /&gt;
&lt;br /&gt;
How this works?&lt;br /&gt;
&lt;br /&gt;
The 'startup' extension makes the SWTBot script run when your application is launched. Adding the SWTBot to launch configuration will ensure it will be able to run when launched.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-2336088213817489641?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=OOyG9SkfA2o:PwcVOC6JlpM:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=OOyG9SkfA2o:PwcVOC6JlpM:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=OOyG9SkfA2o:PwcVOC6JlpM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=OOyG9SkfA2o:PwcVOC6JlpM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=OOyG9SkfA2o:PwcVOC6JlpM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=OOyG9SkfA2o:PwcVOC6JlpM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=OOyG9SkfA2o:PwcVOC6JlpM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=OOyG9SkfA2o:PwcVOC6JlpM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=OOyG9SkfA2o:PwcVOC6JlpM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/OOyG9SkfA2o" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2336088213817489641?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2336088213817489641?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/OOyG9SkfA2o/using-swtbot-as-script-while-developing.html" title="Using SWTBot as script while developing RCP app" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><feedburner:origLink>http://blog.ankursharma.org/2011/06/using-swtbot-as-script-while-developing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04FR3kzcSp7ImA9WhZQEk0.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-8867963643593733781</id><published>2011-04-19T11:11:00.000+05:30</published><updated>2011-04-19T14:01:56.789+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-19T14:01:56.789+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse Day" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title>Eclipse Day India 2011</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;style type="text/css"&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Arial}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Arial; color: #352e2c}
&lt;/style&gt;


&lt;br /&gt;
&lt;div class="p1"&gt;
&lt;span class="Apple-style-span" style="font-family: inherit; font-size: small;"&gt;Eclipse Day India 2011 will be hosted in Bangalore on Friday, May 6, 2011. The registrations are now open. Pick up your free ticket from&amp;nbsp;&lt;a href="http://eclipsedayindia.eventbrite.com/"&gt;http://eclipsedayindia.eventbrite.com/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;span class="Apple-style-span" style="font-family: inherit; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="Apple-style-span" style="font-family: inherit; font-size: small;"&gt;Eclipse Day India is a non-profit annual event organized by Eclipse enthusiasts. It is one day event with talks about Eclipse. This year's edition will have two tracks which will consists of workshops, tutorials and technical talks&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. A tentative agenda is available at &lt;a href="http://www.eclipseday.in/p/schedule.html"&gt;http://www.eclipseday.in/p/schedule.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;Thank you SAP Labs for hosting the event and Progress Software for co-sponsoring.&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;See you at Eclipse Day!&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-8867963643593733781?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=4f8wYtOqlHM:JjISl2UgK0g:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=4f8wYtOqlHM:JjISl2UgK0g:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=4f8wYtOqlHM:JjISl2UgK0g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=4f8wYtOqlHM:JjISl2UgK0g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=4f8wYtOqlHM:JjISl2UgK0g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=4f8wYtOqlHM:JjISl2UgK0g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=4f8wYtOqlHM:JjISl2UgK0g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=4f8wYtOqlHM:JjISl2UgK0g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=4f8wYtOqlHM:JjISl2UgK0g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/4f8wYtOqlHM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/8867963643593733781?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/8867963643593733781?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/4f8wYtOqlHM/eclipse-day-india-2011.html" title="Eclipse Day India 2011" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><feedburner:origLink>http://blog.ankursharma.org/2011/04/eclipse-day-india-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MGQn06cSp7ImA9Wx9VGE4.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-3788593479197750044</id><published>2011-02-04T22:40:00.000+05:30</published><updated>2011-02-04T22:40:23.319+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-04T22:40:23.319+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="API Use" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="API Tooling" /><category scheme="http://www.blogger.com/atom/ns#" term="API Tooling Ant Task" /><title>Self help with API Tooling Reports (Part II): Generating the API Use report using Ant Task</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
The API Use report can also be generated using Ant tasks. See Eclipse help documentation for it &lt;a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiuse-ant-task.htm"&gt;here&lt;/a&gt;. If you already know how to run ant tasks in Eclipse, skip the rest of it.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Writing Ant script&lt;/b&gt;&lt;br /&gt;
I assume you know a bit of Ant already. If not, stop and step over to &lt;a href="http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html"&gt;Ant Tutorial&lt;/a&gt;.&lt;br /&gt;
Create a new File and lets call it GenerateApiUseReport.xml. It will open in default text editor. Close it and Open it with Ant Editor (use right click on file and select 'Open With' -&amp;gt; 'Other...')&lt;br /&gt;
Now write this in the file.
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_dqhq-tO9EaM/TUW8I-9H1SI/AAAAAAAAClo/HC590N8Hip4/s1600/ant_api_use_report.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://1.bp.blogspot.com/_dqhq-tO9EaM/TUW8I-9H1SI/AAAAAAAAClo/HC590N8Hip4/s400/ant_api_use_report.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
The parameters match to the UI we discussed before.&lt;br /&gt;
Ant Parameters &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;UI&lt;br /&gt;
location &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;=&amp;gt; Analyze&lt;br /&gt;
scopepattern &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;=&amp;gt; Bundles matching&lt;br /&gt;
referencepattern &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;=&amp;gt; References to&lt;br /&gt;
report &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;=&amp;gt; Report Output Location&lt;br /&gt;
considerinternal &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;=&amp;gt; Internal references&lt;br /&gt;
considerapi &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;=&amp;gt; API references&lt;br /&gt;
considerillegaluse &amp;nbsp;  &amp;nbsp;&amp;lt;=&amp;gt; Illegal API Use&lt;br /&gt;
&lt;br /&gt;
These two are not in UI&lt;br /&gt;
&lt;i&gt;archivepatterns &lt;/i&gt;- Its exclude filter. It will be a comma-separated list with the format &amp;lt;bundle-id&amp;gt;:&amp;lt;relative-path-to-jar&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;debug &lt;/i&gt;- Supplying a "true" will make the &lt;i&gt;apitooling.apiuse&amp;nbsp;&lt;/i&gt;ant task give out all the debug trace information. This might be helpful if for some reason the results are not expected and you need to investigate. Since default value is false, I would recommend leaving it out until you need it and know what you are doing.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Running the script&lt;/b&gt;&lt;br /&gt;
This is simple. You have to create a new Ant Build launch config from the External Tools Configuration wizard. But why do it when there is a shortcut. Just right-click in the ant editor and select 'Run As' -&amp;gt; '2. ant Build...'. This will automatically create an Ant Build launch config for you and open it. It will look like this&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_dqhq-tO9EaM/TUW35fYwYvI/AAAAAAAAClg/yUUhH7f4684/s1600/external_launch_config_ant_build_api_use.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_dqhq-tO9EaM/TUW35fYwYvI/AAAAAAAAClg/yUUhH7f4684/s400/external_launch_config_ant_build_api_use.JPG" width="386" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Hit the Run to execute the script. You can open this again from External Tools configuration wizard.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Generating HTML reports&lt;/b&gt;&lt;br /&gt;
The &lt;i&gt;apitooling.apiuse&lt;/i&gt; ant task only generating the XML report. For generating the HTML reports we need to invoke the&amp;nbsp;&lt;i&gt;apitooling.apiuse_reportconversion&lt;/i&gt; task. The parameters are very simple. See the documentation &lt;a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiuse-ant-task.htm"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Since we would want to do this along with the report generation only. We can add this to same Ant script and&lt;br /&gt;
make it look like this&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:xml"&gt;&lt;project default="ApiUseTarget"&gt;
 &lt;target name="ApiUseTarget"&gt;
  &lt;apitooling.apiuse considerapi="true" considerillegaluse="true" considerinternal="true" location="C:\MyRCPProduct\eclipse" referencepattern="org\.eclipse\..*" report="C:\MyRCPProduct\Reports\APIUseReport\XML" scopepattern="com\.example\..*"&gt;
  &lt;apitooling.apiuse_reportconversion htmlfiles="C:\MyRCPProduct\Reports\APIUseReport\HTML" xmlfiles="C:\MyRCPProduct\Reports\APIUseReport\XML"&gt;
 &lt;/apitooling.apiuse_reportconversion&gt;&lt;/apitooling.apiuse&gt;&lt;/target&gt;
&lt;/project&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-3788593479197750044?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=swRYgcy26os:YbGbU9Sr0gw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=swRYgcy26os:YbGbU9Sr0gw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=swRYgcy26os:YbGbU9Sr0gw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=swRYgcy26os:YbGbU9Sr0gw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=swRYgcy26os:YbGbU9Sr0gw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=swRYgcy26os:YbGbU9Sr0gw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=swRYgcy26os:YbGbU9Sr0gw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=swRYgcy26os:YbGbU9Sr0gw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=swRYgcy26os:YbGbU9Sr0gw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/swRYgcy26os" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/3788593479197750044?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/3788593479197750044?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/swRYgcy26os/self-help-with-api-tooling-reports-part_04.html" title="Self help with API Tooling Reports (Part II): Generating the API Use report using Ant Task" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_dqhq-tO9EaM/TUW8I-9H1SI/AAAAAAAAClo/HC590N8Hip4/s72-c/ant_api_use_report.JPG" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2011/02/self-help-with-api-tooling-reports-part_04.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QMQ3k_eyp7ImA9Wx9VF0g.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-1903211282219268594</id><published>2011-02-03T23:19:00.000+05:30</published><updated>2011-02-03T23:19:42.743+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-03T23:19:42.743+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="API Use" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="API Tooling" /><title>Self help with API Tooling Reports (Part I): Generating the API Use report</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
API Tools is part of Plug-in Development Environment. It
provides tooling support for tracking and managing your APIs and dependencies
and can generate various reports. The Eclipse help discusses &lt;a href="http://help.eclipse.org/helios/index.jsp?nav=/4_2_3"&gt;here&lt;/a&gt; about how to set it up.&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
What we will discuss here is how to generate various reports and making sense out of them.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b&gt;Generating the API Use report&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
API Use report is the simplest of the report. It tells what APIs are referenced (used) by a given profile. A profile can be an API Baseline, a Target Definition or a directory containing an Eclipse product or just some plug-ins.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
PDE provides an External Tools configuration wizard to run this report. The wizards can be launched from the Run menu -&amp;gt; External Tools -&amp;gt; External Tools Configurations...&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
This will open the External Tools Configurations wizard. Select 'API Use Report' from the left pane and press the 'New' launch configuration button.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
The snapshot below shows the settings for an RCP product.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_dqhq-tO9EaM/TUHP567YP1I/AAAAAAAAClI/O1W262wKs-o/s1600/external_launch_config_api_use_report.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="317" src="http://1.bp.blogspot.com/_dqhq-tO9EaM/TUHP567YP1I/AAAAAAAAClI/O1W262wKs-o/s400/external_launch_config_api_use_report.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b&gt;Analyze&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
You can choose an API Baseline, a Target Definition or a directory to run the report on. The report is a set of XML files. To make it human readable, there is an option to generate HTML report out of any existing API Use report.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b&gt;Search For&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Here you control what to look out for. The 'References to' takes a regular expression which will be used to match the APIs source. In this example the report will lookout only for the API originating out of bundles whose name starts with 'org.eclipse.'&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;i&gt;API references&lt;/i&gt;: The APIs used in your product&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;i&gt;Internal references&lt;/i&gt;: Marks the non-API - one coming from internal packages.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;i&gt;Illegal API Use&lt;/i&gt;: Usage that breaks the restrictions marked using &lt;a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/reference/api-tooling/api_javadoc_tags.htm"&gt;JavaDoc tags&lt;/a&gt;.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b&gt;Search In&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
This controls the search scope. The APIs references will be searched only in the plug-ins that match the regex provided here,&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b&gt;Reporting&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
This is self&amp;nbsp;explanatory. The report will be churned out as a&amp;nbsp;hierarchy&amp;nbsp;of.folders and XMLs in the output location. And if checked for 'Create HTML reports', they will be generated too. The report is saved inside the folder 'XML' in the report output location. While the HTML reports are inside the folder named 'HTML'.&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-1903211282219268594?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=jyeezVK7Km8:zDRcEWMC78Q:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=jyeezVK7Km8:zDRcEWMC78Q:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=jyeezVK7Km8:zDRcEWMC78Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=jyeezVK7Km8:zDRcEWMC78Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=jyeezVK7Km8:zDRcEWMC78Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=jyeezVK7Km8:zDRcEWMC78Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=jyeezVK7Km8:zDRcEWMC78Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=jyeezVK7Km8:zDRcEWMC78Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=jyeezVK7Km8:zDRcEWMC78Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/jyeezVK7Km8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/1903211282219268594?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/1903211282219268594?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/jyeezVK7Km8/self-help-with-api-tooling-reports-part.html" title="Self help with API Tooling Reports (Part I): Generating the API Use report" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_dqhq-tO9EaM/TUHP567YP1I/AAAAAAAAClI/O1W262wKs-o/s72-c/external_launch_config_api_use_report.JPG" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2011/02/self-help-with-api-tooling-reports-part.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIARHw-cCp7ImA9Wx9UEU0.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-5595284630754509495</id><published>2011-02-02T11:09:00.093+05:30</published><updated>2011-02-08T00:02:25.258+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-08T00:02:25.258+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="API Tooling Reports" /><category scheme="http://www.blogger.com/atom/ns#" term="API Use" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="API Tooling" /><title>Self help with API Tooling Reports (Part III): Understanding the API Use Report</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
API Tooling reports are collection of XML files. A typical API Use Scan report will look is like this&lt;br /&gt;
&lt;br /&gt;
XML&lt;br /&gt;
│ &amp;nbsp; meta.xml&lt;br /&gt;
│ &amp;nbsp; not_searched.xml&lt;br /&gt;
│&lt;br /&gt;
├───plugin.a.b.c (1.0.0.201101280335)&lt;br /&gt;
│ &amp;nbsp; └───com.example.myrcpproduct (1.0.0.201101280335)&lt;br /&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; ├───API&lt;br /&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; │ &amp;nbsp; &amp;nbsp; &amp;nbsp; method_references.xml&lt;br /&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; │ &amp;nbsp; &amp;nbsp; &amp;nbsp; type_references.xml&lt;br /&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; │&lt;br /&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; ├───ILLEGAL_API&lt;br /&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; │ &amp;nbsp; &amp;nbsp; &amp;nbsp; type_references.xml&lt;br /&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; │&lt;br /&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; └───PRIVATE_PERMISSIBLE&lt;br /&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; method_references.xml&lt;br /&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; type_references.xml&lt;br /&gt;
│&lt;br /&gt;
├───plugin.x.y.x (1.3.0.v20100512)&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
│ &amp;nbsp; └───com.example.myrcpproduct (1.0.0.201101280335)&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; ├───API&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; │ &amp;nbsp; &amp;nbsp; &amp;nbsp; method_references.xml&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
│ &amp;nbsp; &amp;nbsp; &amp;nbsp; │ &amp;nbsp; &amp;nbsp; &amp;nbsp; type_references.xml&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
... &amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
...&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;XML &lt;/i&gt;&lt;/b&gt;folder is where the report is generated&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;meta.xml&lt;/i&gt;&lt;/b&gt; contains the report parameters - the regex filters and locations, etc&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;not_searched.xml&lt;/i&gt;&lt;/b&gt; is the list of plug-in not looked into and why.&lt;br /&gt;
&lt;br /&gt;
The XML folder will also contain a bunch of folders whose names are plug-in id (with version) whose API are referenced (used). These folders will again have sub-folder named as the plug-id id (with version) which references those APIs. The usage (or violation) is stored &amp;nbsp;is XML files under their respective folders.&lt;br /&gt;
&lt;br /&gt;
This structure is very technical and for sparing you the trouble of understanding it, the report can be converted to HTML files. So it will be more useful to understand them.&lt;br /&gt;
&lt;br /&gt;
Example API Use HTML report&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_dqhq-tO9EaM/TUJw16mvWmI/AAAAAAAAClM/-M9034TTnBM/s1600/api_tooling_report_api_use.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="346" src="http://2.bp.blogspot.com/_dqhq-tO9EaM/TUJw16mvWmI/AAAAAAAAClM/-M9034TTnBM/s400/api_tooling_report_api_use.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The report has three sections&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Scan Details&lt;/b&gt; will show the parameters used for generating the report. This information comes from meta.xml mentioned above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Additional Bundle Information&lt;/b&gt; gives the link to the bundles that were not searched. The color legends are self-explanatory&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;References&lt;/b&gt; section is a table detailing the bundles who are referenced (used) along with the number of references of different types. &lt;b&gt;&lt;i&gt;A reference is a usage of a type, method or field.&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;API - any public reference&lt;/li&gt;
&lt;li&gt;Internal - any reference from an internal package&lt;/li&gt;
&lt;li&gt;Internal-Permissible - any reference from an internal package but visible to the consuming (or referencing) bundle due to &lt;i&gt;&lt;a href="http://help.eclipse.org/helios/topic/org.eclipse.platform.doc.isv/reference/misc/bundle_manifest.html"&gt;x-friends&lt;/a&gt;&lt;/i&gt; marking in manifest.&lt;/li&gt;
&lt;li&gt;Fragment-Permissible - same as Internal-Permissible but from&amp;nbsp;fragment&amp;nbsp;bundles&lt;/li&gt;
&lt;li&gt;Illegal - references which violates the API restrictions placed &lt;a href="http://wiki.eclipse.org/API_Javadoc_tags"&gt;using JavaDoc tags&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Each bundle name is a&amp;nbsp;hyper-link&amp;nbsp;that would open the details for than bundle. The details for &lt;i&gt;org.eclipse.apitest&lt;/i&gt; would look like this&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_dqhq-tO9EaM/TUJ0EaQ20JI/AAAAAAAAClQ/MO2tiTJbvxk/s1600/api_tooling_report_api_use_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="195" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/TUJ0EaQ20JI/AAAAAAAAClQ/MO2tiTJbvxk/s400/api_tooling_report_api_use_1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Opening the details shows the list of the Referenced Types (types being used). Each type can be opened (follow the hyper-link) to see each member and visibility details.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_dqhq-tO9EaM/TUK8EoLd2fI/AAAAAAAAClU/FV1gj8rX7Jg/s1600/api_tooling_report_api_use_2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/_dqhq-tO9EaM/TUK8EoLd2fI/AAAAAAAAClU/FV1gj8rX7Jg/s400/api_tooling_report_api_use_2.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This way you can find of each usage - valid or otherwise.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The other API Tooling reports too are structured in similar hierarchy. However, with API Use Scans you can do more ... so stay tuned for more.&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-5595284630754509495?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=g9wUA8nyfVw:BOsXSQPDAXo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=g9wUA8nyfVw:BOsXSQPDAXo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=g9wUA8nyfVw:BOsXSQPDAXo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=g9wUA8nyfVw:BOsXSQPDAXo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=g9wUA8nyfVw:BOsXSQPDAXo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=g9wUA8nyfVw:BOsXSQPDAXo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=g9wUA8nyfVw:BOsXSQPDAXo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=g9wUA8nyfVw:BOsXSQPDAXo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=g9wUA8nyfVw:BOsXSQPDAXo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/g9wUA8nyfVw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5595284630754509495?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5595284630754509495?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/g9wUA8nyfVw/self-help-with-api-tooling-reports-part_02.html" title="Self help with API Tooling Reports (Part III): Understanding the API Use Report" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_dqhq-tO9EaM/TUJw16mvWmI/AAAAAAAAClM/-M9034TTnBM/s72-c/api_tooling_report_api_use.JPG" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2011/02/self-help-with-api-tooling-reports-part_02.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08EQXY5eip7ImA9Wx5RF04.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-4465210355234542417</id><published>2010-08-25T17:00:00.001+05:30</published><updated>2010-08-25T17:00:00.822+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-25T17:00:00.822+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Update Site" /><category scheme="http://www.blogger.com/atom/ns#" term="p2" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Headless Build" /><title>Headless Build for Beginners - part V</title><content type="html">&lt;b&gt;Headless building Update Site&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
There is no easy way to achieve this. There have been some &lt;a href="http://dev.eclipse.org/newslists/news.eclipse.platform/msg25629.html"&gt;discussions&lt;/a&gt; in past and the &lt;a href="http://www.eclipse.org/articles/Article-PDE-Automation/automation.html"&gt;Build and Test Automation article&lt;/a&gt; too touched it in brief. But its all hacky. I tried various stuff but the closest I could get was build features and plug-ins using (mentioned in) a site.xml and generating the metadata for them. The site.xml can be placed with them manually but I could not find a way to (automatically) update the site.xml with the feature and plug-ins build qualifiers. (There are always hacks like having a dummy site.xml and do a find-replace in it. Or write a custom ant task that emits XML for ste.xml - none of the hack is very maintainable or scalable)&lt;br /&gt;
&lt;br /&gt;
After more investigation I realized may be I was trying to solve the wrong problem. We really don't need the update site (not if you are using Eclipse 3.4 or later). A p2 repository is not only easy to generate but is also the recommended way of distributing features and plug-ins.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Headless building a p2 repository&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Now a p2 repo can be generated either from a bunch of features and plug-ins or directly from a product&amp;nbsp;configuration. Both explained in &lt;a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_publisher.html"&gt;Eclipse help&lt;/a&gt;. We will here take a product configuration and build a p2 repository for it. The setup will be same as &lt;a href="http://blog.ankursharma.org/2010/07/headless-build-for-beginners-part-iii.html"&gt;discussed before&lt;/a&gt;. However this time, we will copy all the files from &lt;i&gt;/org.eclipse.pde.build/templates/headless-build&lt;/i&gt;&amp;nbsp;folder to our build configuration folder (&lt;i&gt;build\buildConfiguration&lt;/i&gt;). Thus, the build structure will now looks like this&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:text"&gt;&amp;lt;buildConfigurationDirectory&amp;gt;
       allElements.xml
       build.properties
       customAssembly.xml
       customTargets.xml
&amp;lt;buildDirectory&amp;gt;
       plugins/
              com.example.helloworld
              com.example.product
                     example.product
       features/
              com.example.helloworld.feature
&lt;/pre&gt;
&lt;br /&gt;
The current setup will generate the product when build. We now need to add a hook for repository generation. This can be done in &lt;i&gt;customAssembly.xml&lt;/i&gt;. Open it in Eclipse or your favorite text editor and make the following changes in &lt;i&gt;post.gather.bin.parts&lt;/i&gt; target.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:xml"&gt;&amp;lt;target name="post.gather.bin.parts"&amp;gt;
 &amp;lt;p2.publish.featuresAndBundles
  repository="file:/${buildDirectory}/repository"
  source="${buildDirectory}/tmp/${archivePrefix}" 
  compress="true"
 &amp;gt;
 &amp;lt;/p2.publish.featuresAndBundles&amp;gt;
&amp;lt;/target&amp;gt;       
&lt;/pre&gt;
&lt;br /&gt;
Note that &lt;i&gt;p2.publish.featuresAndBundle&lt;/i&gt;s is just of the of ant task that can be used to generate metadata. There are &lt;a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_publishingtasks.htm"&gt;more &lt;/a&gt;for different situations. The idea here was more to see how to add custom call in ant scripts.&lt;br /&gt;
&lt;br /&gt;
Run the build as before&lt;br /&gt;
&lt;pre class="brush:text"&gt;java -jar c:\eclipse\plugins\org.eclipse.equinox.launcher_1.1.0.v20100507.jar -application org.eclipse.ant.core.antRunner -buildfile c:\eclipse\plugins\org.eclipse.pde.build_3.6.0.v20100603\scripts\productBuild\productBuild.xml -Dbuilder=c:\build\buildConfiguration
&lt;/pre&gt;
&lt;br /&gt;
This will create a p2 metadata repository in &lt;i&gt;file:/${buildDirectory}/repository&lt;/i&gt;&amp;nbsp;folder. You can control the location using &lt;i&gt;repository&lt;/i&gt;&amp;nbsp;property.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-4465210355234542417?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=bZp2n5HTL4U:9S7WgP2X39U:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=bZp2n5HTL4U:9S7WgP2X39U:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=bZp2n5HTL4U:9S7WgP2X39U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=bZp2n5HTL4U:9S7WgP2X39U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=bZp2n5HTL4U:9S7WgP2X39U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=bZp2n5HTL4U:9S7WgP2X39U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=bZp2n5HTL4U:9S7WgP2X39U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=bZp2n5HTL4U:9S7WgP2X39U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=bZp2n5HTL4U:9S7WgP2X39U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/bZp2n5HTL4U" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/4465210355234542417?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/4465210355234542417?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/bZp2n5HTL4U/headless-build-for-beginners-part-v.html" title="Headless Build for Beginners - part V" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><feedburner:origLink>http://blog.ankursharma.org/2010/08/headless-build-for-beginners-part-v.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MEQXs9eyp7ImA9Wx5RFkk.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-2508007688980367675</id><published>2010-08-24T17:00:00.002+05:30</published><updated>2010-08-24T17:00:00.563+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-24T17:00:00.563+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Headless Build" /><title>Headless Build for Beginners - part IV</title><content type="html">&lt;div style="text-align: left;"&gt;
&lt;b&gt;Customizing the build&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Not always we want the build to happen according to the out-of-the-box scripts.In fact, customizations are almost always needed - be it fetching the sources or the way we wish to assemble them. PDE Build provides a set of templates which can be used to hook in the customize (add to and/or override) the default behavior.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
These templates are available in PDE Build plug-in (inside&lt;i&gt; templates\headless-build&lt;/i&gt; folder of &lt;i&gt;org.eclipse.pde.build_&amp;lt;version&amp;gt;&amp;lt;qualifier&amp;gt;&lt;/i&gt;). The scripts and templates are one the main reason why PDE Build plug-in is a directory and not a jar.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
The purpose and usage of these templates have been explained nicely in Eclipse help under the topic&amp;nbsp;&lt;a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/tasks/pde_customization.htm"&gt;Customizing a Headless Build&lt;/a&gt;.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
These templates are&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;customTargets,xml&lt;/li&gt;
&lt;li&gt;allElements.xml&lt;/li&gt;
&lt;li&gt;customAssembly.xml&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: left;"&gt;
In short, the &lt;i&gt;customTargets.xml&lt;/i&gt; have various pre- and post- ant targets that &lt;i&gt;build.xml&lt;/i&gt; (or &lt;i&gt;productBuild.xml&lt;/i&gt; - in case you are building a product) calls before and after each process (like setup, source fetch, build, assemble, package, etc). Similarly, the targets in &lt;i&gt;allElements.xml&lt;/i&gt; and &lt;i&gt;customAssembly.xml&lt;/i&gt; gets delegated for various jobs.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
To use these templates we need to copy them in the build configuration directory (&lt;i&gt;c:\build\buildConfiguration&lt;/i&gt; in our example) where we stored build.properties file in previous steps. And then modify the appropriate targets. This is what we will do for building an update site in next step.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-2508007688980367675?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=YSIVPZCoPUM:vFKy0Qcig0k:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=YSIVPZCoPUM:vFKy0Qcig0k:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=YSIVPZCoPUM:vFKy0Qcig0k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=YSIVPZCoPUM:vFKy0Qcig0k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=YSIVPZCoPUM:vFKy0Qcig0k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=YSIVPZCoPUM:vFKy0Qcig0k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=YSIVPZCoPUM:vFKy0Qcig0k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=YSIVPZCoPUM:vFKy0Qcig0k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=YSIVPZCoPUM:vFKy0Qcig0k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/YSIVPZCoPUM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2508007688980367675?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2508007688980367675?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/YSIVPZCoPUM/headless-build-for-beginners-part-iv.html" title="Headless Build for Beginners - part IV" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><feedburner:origLink>http://blog.ankursharma.org/2010/08/headless-build-for-beginners-part-iv.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYAQXkyeSp7ImA9Wx5REE4.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-4061961526220579954</id><published>2010-08-17T15:11:00.001+05:30</published><updated>2010-08-17T15:12:20.791+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-17T15:12:20.791+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="e4" /><title>e4 Talk by Boris</title><content type="html">&lt;a href="http://borisoneclipse.blogspot.com/"&gt;Boris Bokowski&lt;/a&gt;&amp;nbsp;(@bokowski) will be talking about e4 at &lt;a href="http://maps.google.com/maps/place?cid=4265442747657418559&amp;amp;q=IBM,+EGL,+Bangalore&amp;amp;hl=en&amp;amp;cd=13&amp;amp;ei=4FhqTLH2EtCfkQX0gpmhDA&amp;amp;sig2=JCjf_dwQY7TZfAyFVehM7Q&amp;amp;dtab=0&amp;amp;sll=12.973021,77.62469&amp;amp;sspn=0.050344,0.09256&amp;amp;ie=UTF8&amp;amp;ll=12.956989,77.639093&amp;amp;spn=0,0&amp;amp;z=17&amp;amp;iwloc=C"&gt;IBM EGL Campus&lt;/a&gt; on Friday, August 20, 2010 (3 to 4 PM). See the details on &lt;a href="http://groups.google.com/group/eclipse-bangalore-dev/msg/a84d9a441bcb8d79?"&gt;the Bangalore Eclipse Developer's Groups&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-4061961526220579954?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=pps0y0bvvAA:j5CgqdOmtPU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=pps0y0bvvAA:j5CgqdOmtPU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=pps0y0bvvAA:j5CgqdOmtPU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=pps0y0bvvAA:j5CgqdOmtPU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=pps0y0bvvAA:j5CgqdOmtPU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=pps0y0bvvAA:j5CgqdOmtPU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=pps0y0bvvAA:j5CgqdOmtPU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=pps0y0bvvAA:j5CgqdOmtPU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=pps0y0bvvAA:j5CgqdOmtPU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/pps0y0bvvAA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/4061961526220579954?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/4061961526220579954?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/pps0y0bvvAA/e4-talk-with-boris.html" title="e4 Talk by Boris" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><feedburner:origLink>http://blog.ankursharma.org/2010/08/e4-talk-with-boris.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04GRH4_eip7ImA9Wx5TFE8.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-1861078233702776496</id><published>2010-07-30T00:28:00.000+05:30</published><updated>2010-07-30T00:28:45.042+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-30T00:28:45.042+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PDE Good Practices" /><category scheme="http://www.blogger.com/atom/ns#" term="Best Practice" /><category scheme="http://www.blogger.com/atom/ns#" term="Preferences" /><category scheme="http://www.blogger.com/atom/ns#" term="build.properties" /><title>PDE Good Practices: #7 Keep build.properties synced</title><content type="html">We often land up in situations like &lt;i&gt;"it was working in my workspace but exported plugins are behaving differently"&lt;/i&gt;. An important thing to notice is that workspace is build considering the project classpath settings. However, the Export wizard or headless build does not have access to it. They reply on &lt;i&gt;build.properties&lt;/i&gt;&amp;nbsp;file. Thus it is very important to keep it in sync with the project settings. Eclipse Helios (3.6) added a bunch of preferences to help you do just that.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_dqhq-tO9EaM/TFHObpSD-1I/AAAAAAAACjU/Y6FIx_RXfKY/s1600/preferences_build.properties_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_dqhq-tO9EaM/TFHObpSD-1I/AAAAAAAACjU/Y6FIx_RXfKY/s400/preferences_build.properties_2.png" width="357" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
I would even recommend having project specific preferences enabled whenever possible. This will ensure all developers are reported for problems and their workspace settings doesn't have them ignored.&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-1861078233702776496?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=oFaUuwWctV4:JZJl6j1f4B8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=oFaUuwWctV4:JZJl6j1f4B8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=oFaUuwWctV4:JZJl6j1f4B8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=oFaUuwWctV4:JZJl6j1f4B8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=oFaUuwWctV4:JZJl6j1f4B8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=oFaUuwWctV4:JZJl6j1f4B8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=oFaUuwWctV4:JZJl6j1f4B8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=oFaUuwWctV4:JZJl6j1f4B8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=oFaUuwWctV4:JZJl6j1f4B8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/oFaUuwWctV4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/1861078233702776496?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/1861078233702776496?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/oFaUuwWctV4/pde-good-practices-7-keep.html" title="PDE Good Practices: #7 Keep build.properties synced" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_dqhq-tO9EaM/TFHObpSD-1I/AAAAAAAACjU/Y6FIx_RXfKY/s72-c/preferences_build.properties_2.png" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2010/07/pde-good-practices-7-keep.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QGQH8_eCp7ImA9Wx5TFE8.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-1979807569634508838</id><published>2010-07-30T00:18:00.000+05:30</published><updated>2010-07-30T00:18:41.140+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-30T00:18:41.140+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PDE Good Practices" /><category scheme="http://www.blogger.com/atom/ns#" term="Target Platform" /><category scheme="http://www.blogger.com/atom/ns#" term="Best Practice" /><title>PDE Good Practices: #6 Share target definitions</title><content type="html">Always have your target definitions in a project instead. This way&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;it can be added to source control repository and changes to it can be tracked.&lt;/li&gt;
&lt;li&gt;all the other members who wish to work with that code can share it and thus compile against the same target. This will keep everyone on same page.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_dqhq-tO9EaM/TFHMzgvekQI/AAAAAAAACjM/5JWc2mDN-bQ/s1600/target_platform_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="286" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/TFHMzgvekQI/AAAAAAAACjM/5JWc2mDN-bQ/s400/target_platform_1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-1979807569634508838?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=gI5-V3D8fks:n7iOh4c1P8M:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=gI5-V3D8fks:n7iOh4c1P8M:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=gI5-V3D8fks:n7iOh4c1P8M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=gI5-V3D8fks:n7iOh4c1P8M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=gI5-V3D8fks:n7iOh4c1P8M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=gI5-V3D8fks:n7iOh4c1P8M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=gI5-V3D8fks:n7iOh4c1P8M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=gI5-V3D8fks:n7iOh4c1P8M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=gI5-V3D8fks:n7iOh4c1P8M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/gI5-V3D8fks" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/1979807569634508838?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/1979807569634508838?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/gI5-V3D8fks/pde-good-practices-6-share-target.html" title="PDE Good Practices: #6 Share target definitions" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_dqhq-tO9EaM/TFHMzgvekQI/AAAAAAAACjM/5JWc2mDN-bQ/s72-c/target_platform_1.png" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2010/07/pde-good-practices-6-share-target.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUCR3k-fyp7ImA9WxFaF0U.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-7345563954454444792</id><published>2010-07-22T12:01:00.000+05:30</published><updated>2010-07-22T12:01:06.757+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-22T12:01:06.757+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PDE Good Practices" /><category scheme="http://www.blogger.com/atom/ns#" term="Target Platform" /><category scheme="http://www.blogger.com/atom/ns#" term="Best Practice" /><title>PDE Good Practices: #5 Prefer target over workspace</title><content type="html">Remember it is a 'good practice' and not necessarily the best suited to your needs. So unless you are sure what you are doing, it is advisable to keep all the dependent plug-ins in target. Check-out only the those which you need to modify, The benefits are&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;A small workspace is easier to follow&lt;/li&gt;
&lt;li&gt;Even a full build will be much faster&lt;/li&gt;
&lt;li&gt;Since target platform can be shared, you can be sure that you are build against the same exact version as your peers&lt;/li&gt;
&lt;li&gt;Launch will be faster&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
If you miss that Types are not showing up in the searches, use PDE preference to add all the target plug-ins to the Java search.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_dqhq-tO9EaM/TEfiQTWhNLI/AAAAAAAACjE/_xakEhv31gs/s1600/preferences_pde_1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="347" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/TEfiQTWhNLI/AAAAAAAACjE/_xakEhv31gs/s400/preferences_pde_1.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-7345563954454444792?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=o3DhJV89uHo:LKnZfm-aA70:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=o3DhJV89uHo:LKnZfm-aA70:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=o3DhJV89uHo:LKnZfm-aA70:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=o3DhJV89uHo:LKnZfm-aA70:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=o3DhJV89uHo:LKnZfm-aA70:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=o3DhJV89uHo:LKnZfm-aA70:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=o3DhJV89uHo:LKnZfm-aA70:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=o3DhJV89uHo:LKnZfm-aA70:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=o3DhJV89uHo:LKnZfm-aA70:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/o3DhJV89uHo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7345563954454444792?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7345563954454444792?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/o3DhJV89uHo/pde-good-practices-5-prefer-target-over.html" title="PDE Good Practices: #5 Prefer target over workspace" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_dqhq-tO9EaM/TEfiQTWhNLI/AAAAAAAACjE/_xakEhv31gs/s72-c/preferences_pde_1.PNG" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2010/07/pde-good-practices-5-prefer-target-over.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMGR389eCp7ImA9WxFaFk0.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-5569560920301335723</id><published>2010-07-20T11:43:00.000+05:30</published><updated>2010-07-20T11:43:46.160+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-20T11:43:46.160+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PDE Good Practices" /><category scheme="http://www.blogger.com/atom/ns#" term="Best Practice" /><title>PDE Good Practices: #4 Use startup code carefully</title><content type="html">Be very careful when adding code to&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Plug-in load and constructor&lt;/li&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_dqhq-tO9EaM/TEU79B5aPeI/AAAAAAAACi0/JhA7G9O4Chs/s1600/package_explorer_class_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" src="http://2.bp.blogspot.com/_dqhq-tO9EaM/TEU79B5aPeI/AAAAAAAACi0/JhA7G9O4Chs/s400/package_explorer_class_1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;li&gt;org.eclipse.ui.startup extension&lt;/li&gt;
&lt;/div&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_dqhq-tO9EaM/TEU8qPOhVAI/AAAAAAAACi8/bo6yPJhh6Eg/s1600/manifest_ext_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="168" src="http://1.bp.blogspot.com/_dqhq-tO9EaM/TEU8qPOhVAI/AAAAAAAACi8/bo6yPJhh6Eg/s400/manifest_ext_2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
These places have a big impact on application startup time. Also note that the if there are many plug-ins dependent on one plug-in and that plug-in is doing something on load (which it shouldn't be) then it may be delaying the loading of the whole stack.&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-5569560920301335723?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=5w_ERlfFqL8:KJ6_eD5m9Mo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=5w_ERlfFqL8:KJ6_eD5m9Mo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=5w_ERlfFqL8:KJ6_eD5m9Mo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=5w_ERlfFqL8:KJ6_eD5m9Mo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=5w_ERlfFqL8:KJ6_eD5m9Mo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=5w_ERlfFqL8:KJ6_eD5m9Mo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=5w_ERlfFqL8:KJ6_eD5m9Mo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=5w_ERlfFqL8:KJ6_eD5m9Mo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=5w_ERlfFqL8:KJ6_eD5m9Mo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/5w_ERlfFqL8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5569560920301335723?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5569560920301335723?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/5w_ERlfFqL8/pde-good-practices-4-use-startup-code.html" title="PDE Good Practices: #4 Use startup code carefully" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_dqhq-tO9EaM/TEU79B5aPeI/AAAAAAAACi0/JhA7G9O4Chs/s72-c/package_explorer_class_1.png" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2010/07/pde-good-practices-4-use-startup-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04GQ3c-eSp7ImA9WxFaFUs.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-7621465854658896826</id><published>2010-07-20T00:28:00.000+05:30</published><updated>2010-07-20T00:28:42.951+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-20T00:28:42.951+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Build" /><category scheme="http://www.blogger.com/atom/ns#" term="Product Config" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Headless Build" /><title>Headless Build for Beginners - part III</title><content type="html">&lt;a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/tasks/pde_feature_build.htm"&gt;Automated building an RCP application from a product configuration file&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Most of this post contains same info as the eclipse help page with same heading.&lt;br /&gt;
&lt;br /&gt;
Creating a product configuration file is easy. Check the &lt;a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tools/editors/product_editor/editor.htm"&gt;eclipse help page&lt;/a&gt; explains it well. Assuming the our product config&amp;nbsp;&lt;i&gt;example.product&lt;/i&gt;&amp;nbsp;looks like this and resides in a plug-in&amp;nbsp;&lt;i&gt;com.example.product&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_dqhq-tO9EaM/TENJnuLwb6I/AAAAAAAACik/20hWgt7YVxw/s1600/product_editor_overview_1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/TENJnuLwb6I/AAAAAAAACik/20hWgt7YVxw/s640/product_editor_overview_1.PNG" width="459" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_dqhq-tO9EaM/TENKWONyJ6I/AAAAAAAACis/MGmuJdEn3NY/s1600/product_editor_dependencies_1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/TENKWONyJ6I/AAAAAAAACis/MGmuJdEn3NY/s640/product_editor_dependencies_1.PNG" width="459" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: auto;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;b&gt;Basic Setup&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
We will need 3 directory paths&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;where the features and plug-ins to be build will reside. We will call it &lt;i&gt;buildDirectory&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;where the build configuration file (build.properties) will reside. We will call it &lt;i&gt;buildConfiguration&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;where the eclipse installation resides. We will call it &lt;i&gt;baseLocation&lt;/i&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Now to prepare these directories&lt;/div&gt;
&lt;ol&gt;
&lt;div&gt;
&lt;li&gt;Copy the features and plug-ins in side the &lt;i&gt;buildDirectory&lt;/i&gt;. Ideally this will be a source checked out from the version control system. Custom ant tasks can be used to automate that. For this example, the directory shall look like this&lt;/li&gt;
&lt;/div&gt;
&lt;pre class="brush:text"&gt;&amp;lt;buildDirectory&amp;gt;
       plugins/
      &amp;nbsp;       com.example.helloworld
      &amp;nbsp;       com.example.product
      &amp;nbsp;      &amp;nbsp;       example.product
       features/
      &amp;nbsp;       com.example.helloworld.feature&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li style="text-align: left;"&gt;
Copy build.properties file from&amp;nbsp;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;baseLocation/plugins/&lt;/i&gt;&lt;/span&gt;org.eclipse.pde.build_&amp;lt;version&amp;gt;/templates/headless-build&lt;/i&gt; to &lt;i&gt;buildConfiguration&lt;/i&gt; folder. This file will configure the build and the output.&lt;/li&gt;
&lt;li&gt;Now we need to edit this build.properties file and fill in the parameters&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;i&gt;product=C:/build/buildDirectory/plugins/com.example.product/example.product&lt;/i&gt;&lt;/li&gt;
This entry shall point to the product configuration file. The features/plugins mentioned in this file will only be picked for the build but searched in &lt;i&gt;buildDirectory&lt;/i&gt;&amp;nbsp;and &lt;i&gt;baseLocation.&lt;/i&gt;
&lt;li&gt;&lt;i&gt;archivePrefix=HelloWorld&lt;/i&gt;&lt;/li&gt;
The archivePrefix is the name of the Folder under which the product will reside.
&lt;li&gt;&lt;i&gt;configs=win32, win32, x86&lt;/i&gt;&lt;/li&gt;
The configs shall point to the platforms for which product has to be build. The eclipse mentioned at &lt;i&gt;baseLocation&lt;/i&gt;&amp;nbsp;should have &lt;a href="http://aniefer.blogspot.com/2009/06/using-deltapack-in-eclipse-35.html"&gt;RCP Delta Pack&lt;/a&gt;. Without the delta pack, the build wont be able to create product for other platforms. Also, when troubleshooting for missing config or launch files, ensure that right version of delta pack is installed.RCP Delta Pack is build along with SDK so the same version shall be used.
I am building only for windows that is that the configs entry is for only win32. For building other platforms, uncomment the required platforms. The platforms are delimited using &amp;amp; \.
&lt;li&gt;&lt;i&gt;buildDirectory=C:/build/buildDirectory&lt;/i&gt;&lt;/li&gt;
This will the &lt;i&gt;buildDirectory&lt;/i&gt; we setup above.
&lt;li&gt;&lt;i&gt;buildType=I&lt;/i&gt;&lt;/li&gt;
I is for Integration build, N for Nightly, M for Milestone, S for ...I dunno. But you got the point.
&lt;li&gt;&lt;i&gt;buildId=ExampleProductBuild&lt;/i&gt;&lt;/li&gt;
This will name the build archive.
&lt;li&gt;&lt;i&gt;base=C:/&lt;br /&gt;baseLocation=${base}/eclipse&lt;/i&gt;&lt;/li&gt;
The base is the location which contains the eclipse installation (with RCP Delta Pack).
&lt;/ol&gt;
&lt;/ol&gt;
&lt;b&gt;Running and understanding output&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The build will be invoked as before&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: #4c4c4c; font-family: Georgia, Times, serif; font-size: 12px; line-height: 19px;"&gt;java -jar &amp;lt;eclipse-installation-path&amp;gt;\plugins\org.eclipse.equinox.launcher_&amp;lt;version&amp;gt;&amp;lt;qualifier&amp;gt;.jar -application org.eclipse.ant.core.antRunner -buildfile&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #4c4c4c; font-family: Georgia, Times, serif; font-size: 12px; line-height: 19px;"&gt;&amp;lt;eclipse-installation-path&amp;gt;\plugins\org.eclipse.pde.build_&amp;lt;version&amp;gt;&amp;lt;qualifier&amp;gt;\scripts\productBuild\productBuild.xml&amp;nbsp;-Dbuilder=c:\build\buildConfiguration&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;example&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:text" style="text-align: left;"&gt;java -jar c:\eclipse\plugins\org.eclipse.equinox.launcher_1.1.0.v20100507.jar -application org.eclipse.ant.core.antRunner -buildfile c:\eclipse\plugins\org.eclipse.pde.build_3.6.0.v20100603\scripts\productBuild\productBuild.xml -Dbuilder=c:\build\buildConfiguration
&lt;/pre&gt;
&lt;br /&gt;
The output will look like this&lt;br /&gt;
&lt;br /&gt;
I.ExampleProductBuild&lt;br /&gt;
│ &amp;nbsp; ExampleProductBuild-win32.win32.x86.zip&lt;br /&gt;
│&lt;br /&gt;
└───compilelogs&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;└───plugins&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;└───com.example.helloworld_1.0.0.201007191243&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@dot.log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The folder I.ExampleProductBuild will contain the build logs and the product build&amp;nbsp;ExampleProductBuild-win32.win32.x86.zip. If we had chosen other configs they too will appear here in separate zip (or whichever format we specify).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-7621465854658896826?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=tgK2ejqShBY:h992AhYbwr4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=tgK2ejqShBY:h992AhYbwr4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=tgK2ejqShBY:h992AhYbwr4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=tgK2ejqShBY:h992AhYbwr4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=tgK2ejqShBY:h992AhYbwr4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=tgK2ejqShBY:h992AhYbwr4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=tgK2ejqShBY:h992AhYbwr4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=tgK2ejqShBY:h992AhYbwr4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=tgK2ejqShBY:h992AhYbwr4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/tgK2ejqShBY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7621465854658896826?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7621465854658896826?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/tgK2ejqShBY/headless-build-for-beginners-part-iii.html" title="Headless Build for Beginners - part III" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_dqhq-tO9EaM/TENJnuLwb6I/AAAAAAAACik/20hWgt7YVxw/s72-c/product_editor_overview_1.PNG" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2010/07/headless-build-for-beginners-part-iii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIDRXw9eyp7ImA9WxFbFUU.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-2064239138065637659</id><published>2010-07-08T16:42:00.000+05:30</published><updated>2010-07-08T16:42:54.263+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-08T16:42:54.263+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PDE Good Practices" /><category scheme="http://www.blogger.com/atom/ns#" term="Lazy Loading" /><category scheme="http://www.blogger.com/atom/ns#" term="Singleton Plug-ins" /><category scheme="http://www.blogger.com/atom/ns#" term="Best Practice" /><title>PDE Good Practices: #3 Lazy-loading and Singleton plug-ins</title><content type="html">&lt;b&gt;Lazy Loading&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
When a plug-in is marked for lazy loading it is NOT loaded until it is needed. This helps in keeping the memory footprint of application small as possible.&lt;br /&gt;
&lt;br /&gt;
A plug-in can be marked for lazy loading by checking the 'Activate this plug-in when one of its classes is loaded' checkbox on the Manifest editor overview page. This create the following entry in the Manifest.MF file.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;span class="Apple-style-span" style="color: #660000;"&gt;&lt;b&gt;Bundle-ActivationPolicy:&lt;/b&gt;&lt;/span&gt; lazy
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;Singleton plug-ins&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
It is preferable to use singleton plug-ins unless you know what you are doing. If a plug-in exposes extension points then it has to be singleton. But if not, it is still advisable to keep them singleton. This would ensure only one version of the plug-in is loaded at a time and generally its the latest one (unless version bound).&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
A plug-in can be made singleton by checking the 'This plug-in is a singleton" checkbox on the manifest editor overview page.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
OSGi environments generally prefer non-singleton plug-ins as they can be dynamically installed.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_dqhq-tO9EaM/TDWxt0juWYI/AAAAAAAACiQ/kaNEM4jCkxQ/s1600/manifest_overview_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="275" src="http://1.bp.blogspot.com/_dqhq-tO9EaM/TDWxt0juWYI/AAAAAAAACiQ/kaNEM4jCkxQ/s400/manifest_overview_2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_dqhq-tO9EaM/TDWx3JRAByI/AAAAAAAACiY/T_UWzvRxcbg/s1600/manifest_source.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="271" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/TDWx3JRAByI/AAAAAAAACiY/T_UWzvRxcbg/s400/manifest_source.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-2064239138065637659?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=2tnGKaAME3c:OAGMugzHk1M:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=2tnGKaAME3c:OAGMugzHk1M:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=2tnGKaAME3c:OAGMugzHk1M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=2tnGKaAME3c:OAGMugzHk1M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=2tnGKaAME3c:OAGMugzHk1M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=2tnGKaAME3c:OAGMugzHk1M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=2tnGKaAME3c:OAGMugzHk1M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=2tnGKaAME3c:OAGMugzHk1M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=2tnGKaAME3c:OAGMugzHk1M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/2tnGKaAME3c" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2064239138065637659?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2064239138065637659?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/2tnGKaAME3c/pde-good-practices-3-lazy-loading-and.html" title="PDE Good Practices: #3 Lazy-loading and Singleton plug-ins" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_dqhq-tO9EaM/TDWxt0juWYI/AAAAAAAACiQ/kaNEM4jCkxQ/s72-c/manifest_overview_2.png" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2010/07/pde-good-practices-3-lazy-loading-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EBRn04eSp7ImA9WxFbEE0.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-467156918752981945</id><published>2010-07-01T23:04:00.000+05:30</published><updated>2010-07-01T23:04:17.331+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-01T23:04:17.331+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PDE Good Practices" /><category scheme="http://www.blogger.com/atom/ns#" term="Best Practice" /><category scheme="http://www.blogger.com/atom/ns#" term="String Externalize" /><category scheme="http://www.blogger.com/atom/ns#" term="Bundle-Localization" /><title>PDE Good Practices: #2 Externalize bundle strings</title><content type="html">Externalize all bundle strings.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Use&amp;nbsp;‘Usage of non-externalized strings’ preference&lt;/li&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_dqhq-tO9EaM/TCykd3szU9I/AAAAAAAAChw/LGLxFgNz9T0/s1600/preferences_externalize_strings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="372" src="http://1.bp.blogspot.com/_dqhq-tO9EaM/TCykd3szU9I/AAAAAAAAChw/LGLxFgNz9T0/s400/preferences_externalize_strings.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Enabling the preference marks all the strings that should be externalized.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_dqhq-tO9EaM/TCylYdbS16I/AAAAAAAACh4/ATTp12Y1Wcs/s1600/manifest_overview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="275" src="http://2.bp.blogspot.com/_dqhq-tO9EaM/TCylYdbS16I/AAAAAAAACh4/ATTp12Y1Wcs/s400/manifest_overview.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Use 'Externalize Strings Wizard' to externalize the strings&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_dqhq-tO9EaM/TCylzkUG7MI/AAAAAAAACiA/JzfaJZkGpfE/s1600/externalize_strings_wizard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="335" src="http://3.bp.blogspot.com/_dqhq-tO9EaM/TCylzkUG7MI/AAAAAAAACiA/JzfaJZkGpfE/s400/externalize_strings_wizard.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;ul&gt;
&lt;li&gt;'Bundle-Localization' entry in Manifest points to the properties file containing the externalized strings.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_dqhq-tO9EaM/TCymnNaU85I/AAAAAAAACiI/ef3T9TZ9cBM/s1600/manifest_file_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_dqhq-tO9EaM/TCymnNaU85I/AAAAAAAACiI/ef3T9TZ9cBM/s320/manifest_file_2.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
The value 'plugin' for&amp;nbsp;'Bundle-Localization' entry means that there will be a 'plugin.properties' file in the plugin root containing the externalized strings e.g. '%Bundle-Name'.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-467156918752981945?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=1Ky8N_na-fI:ADUBia78lmk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=1Ky8N_na-fI:ADUBia78lmk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=1Ky8N_na-fI:ADUBia78lmk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=1Ky8N_na-fI:ADUBia78lmk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=1Ky8N_na-fI:ADUBia78lmk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=1Ky8N_na-fI:ADUBia78lmk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=1Ky8N_na-fI:ADUBia78lmk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=1Ky8N_na-fI:ADUBia78lmk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=1Ky8N_na-fI:ADUBia78lmk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/1Ky8N_na-fI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/467156918752981945?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/467156918752981945?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/1Ky8N_na-fI/pde-good-practices-2-externalize-bundle.html" title="PDE Good Practices: #2 Externalize bundle strings" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_dqhq-tO9EaM/TCykd3szU9I/AAAAAAAAChw/LGLxFgNz9T0/s72-c/preferences_externalize_strings.png" height="72" width="72" /><feedburner:origLink>http://blog.ankursharma.org/2010/07/pde-good-practices-2-externalize-bundle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMMRnY6fSp7ImA9WxFUGUQ.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-8918275885433710506</id><published>2010-07-01T19:41:00.000+05:30</published><updated>2010-07-01T19:41:27.815+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-01T19:41:27.815+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PDE Good Practices" /><category scheme="http://www.blogger.com/atom/ns#" term="PDE" /><category scheme="http://www.blogger.com/atom/ns#" term="Best Practice" /><title>PDE Good Practices: #1 Separation of Concerns</title><content type="html">&lt;ul&gt;
&lt;li&gt;Do not create monolithic plug-ins.&lt;/li&gt;
&lt;li&gt;A plug-in is used to group the code into a modular, extendable and sharable unit.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Prefer having &amp;nbsp;separate plug-ins for Core, UI, Doc, etc&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Separate the platform/locale code into fragments.&lt;/li&gt;
&lt;li&gt;Put related plug-ins under same feature.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-8918275885433710506?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=Jq7-E7bHqhg:YrfHfNsqSbg:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=Jq7-E7bHqhg:YrfHfNsqSbg:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=Jq7-E7bHqhg:YrfHfNsqSbg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=Jq7-E7bHqhg:YrfHfNsqSbg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=Jq7-E7bHqhg:YrfHfNsqSbg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=Jq7-E7bHqhg:YrfHfNsqSbg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=Jq7-E7bHqhg:YrfHfNsqSbg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=Jq7-E7bHqhg:YrfHfNsqSbg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=Jq7-E7bHqhg:YrfHfNsqSbg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/Jq7-E7bHqhg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/8918275885433710506?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/8918275885433710506?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/Jq7-E7bHqhg/pde-good-practices-1-separation-of.html" title="PDE Good Practices: #1 Separation of Concerns" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><feedburner:origLink>http://blog.ankursharma.org/2010/07/pde-good-practices-1-separation-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEMQn47eCp7ImA9WxFVFk4.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-7395544360050605965</id><published>2010-06-16T01:08:00.000+05:30</published><updated>2010-06-16T01:08:03.000+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-16T01:08:03.000+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="build.xml" /><category scheme="http://www.blogger.com/atom/ns#" term="Build" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Headless Build" /><category scheme="http://www.blogger.com/atom/ns#" term="build.properties" /><title>Headless Build for Beginners - part II</title><content type="html">&lt;div style="text-align: left;"&gt;
&lt;b&gt;Building through features&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;
Plug-ins are rarely required to be build in isolation. The nicer way of building them is through features. Of course, features are more useful from distribution and&amp;nbsp;deployment&amp;nbsp;point of view. A feature is build the same way as a plug-in. Include the required plug-ins in the feature.xml and generate the build.xml from build.properties file (right-click and choose PDE Tools). Now launch the feature build.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: #4c4c4c; font-family: Georgia, Times, serif; font-size: 12px; line-height: 19px;"&gt;java -jar &amp;lt;eclipse-installation-path&amp;gt;\plugins\org.eclipse.equinox.launcher_&amp;lt;version&amp;gt;&amp;lt;qualifier&amp;gt;.jar -application org.eclipse.ant.core.antRunner -buildfile &amp;lt;eclipse-workspace-path&amp;gt;\&amp;lt;&lt;b&gt;feature-project-path&lt;/b&gt;&amp;gt;\&amp;lt;build-xml-path&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
example
&lt;/div&gt;
&lt;pre class="brush: text" style="text-align: left;"&gt;java -jar C:\eclipse\plugins\org.eclipse.equinox.launcher_1.1.0.v20100507.jar -application org.eclipse.ant.core.antRunner -buildfile C:\workspace\com.example.helloworld.feature\build.xml
&lt;/pre&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Note that build will fail if the included plug-ins do not have the build.xml generated for them. This is not a likely scenario and definitely not the way it is done. But let it be for time being. Generate the build.xml for all the plug-ins for build to succeed. Later on we will see how it can be done without it.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;Passing parameters to AntRunner from command line&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;
The build generated by the above command will leave the feature jar inside the feature project and the plug-in jar inside the plug-in project folder. Of course they shouldn't scattered all around. They need to be collected to one place.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Open the build.xml for the plug-in project and inside the 'init' target there is one property called 'plugin.destination'. It is this location where the jar is finally created by the 'build.update.jar' target.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class="brush: text" style="text-align: left;"&gt;&amp;lt;property name="plugin.destination" value="${basedir}"/&amp;gt;
&lt;/pre&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Change the value of this property to "${buildDirectory}". Make the similar change for the 'feature.destination' property in the build.xml for the feature project.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
If the build is triggered now, it will fail because it can not find the value for the 'buildDirectory'. The value can be provided through command line using -D option.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: #4c4c4c; font-family: Georgia, Times, serif; font-size: 12px; line-height: 19px;"&gt;java -jar &amp;lt;eclipse-installation-path&amp;gt;\plugins\org.eclipse.equinox.launcher_&amp;lt;version&amp;gt;&amp;lt;qualifier&amp;gt;.jar -application org.eclipse.ant.core.antRunner -buildfile &amp;lt;eclipse-workspace-path&amp;gt;\&amp;lt;&lt;b&gt;feature-project-path&lt;/b&gt;&amp;gt;\&amp;lt;build-xml-path&amp;gt; &lt;b&gt;-DbuildDirectory=&amp;lt;build-storage-location&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;
example
&lt;/div&gt;
&lt;pre class="brush: text" style="text-align: left;"&gt;java -jar C:\eclipse\plugins\org.eclipse.equinox.launcher_1.1.0.v20100507.jar -application org.eclipse.ant.core.antRunner -buildfile C:\workspace\com.example.helloworld.feature\build.xml -DbuildDirectory=c:\build\buildOutput
&lt;/pre&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
When the build is run, ${buildDirectory} will be replaced by the value(location) provided and jars will get created there.&lt;br /&gt;
&lt;br /&gt;
More parameters can be supplied using &lt;span class="Apple-style-span" style="color: #4c4c4c; font-family: Georgia, Times, serif; font-size: 12px; line-height: 19px;"&gt;-D&amp;lt;variable-name&amp;gt;=&amp;lt;value&amp;gt;&lt;/span&gt; from the command line.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ant properties file&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Passing parameters from the command line is not very scalable or maintainable. A better way is to pass the parameters using a properties file.&lt;br /&gt;
&lt;br /&gt;
Create a properties file, say, 'custom_build.properties' inside a folder, say, 'buildConfiguration'. The name 'custom_build.properties' have been chosen to distinguish it from 'build.properties'. Carefully note that though both are name=value kind properties file, it is common(rather better) practice to not mix them. Since 'build.properties' has a special meaning in context of PDE, it is recommended that a different name is used to avoid any confusion.&lt;br /&gt;
&lt;br /&gt;
Store the property and its value in the properties file.
&lt;br /&gt;
&lt;pre class="brush: xml"&gt;buildDirectory=c:/build/buildConfiguration
&lt;/pre&gt;
Note the forward slashes instead of backslash. The backslashes will work too but needs to be escaped.&lt;br /&gt;
&lt;br /&gt;
Now open the build.xml for the feature project and add the 'loadproperties' entry under the 'project' tag.
&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;project name="com.example.helloworld.feature" default="build.update.jar" basedir="."&amp;gt;
 &amp;lt;loadproperties srcfile="../../buildConfiguration/build.properties" /&amp;gt;
        ...
&lt;/pre&gt;
This entry needs to be made only in feature project's build.xml and is not required for the plug-in projects' build.xml. They still can use the same variable name and will get the value from the properties file.&lt;br /&gt;
&lt;br /&gt;
Note that the value for the 'srcfile' is a relative path and the ../../ (grand-parent directory) indicates that the properties file has been kept in one folder outside the folder (or workspace) containing the projects.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-7395544360050605965?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=8YvIMkQyuCo:TmmeWvfG0wA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=8YvIMkQyuCo:TmmeWvfG0wA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=8YvIMkQyuCo:TmmeWvfG0wA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=8YvIMkQyuCo:TmmeWvfG0wA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=8YvIMkQyuCo:TmmeWvfG0wA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=8YvIMkQyuCo:TmmeWvfG0wA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=8YvIMkQyuCo:TmmeWvfG0wA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=8YvIMkQyuCo:TmmeWvfG0wA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=8YvIMkQyuCo:TmmeWvfG0wA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/8YvIMkQyuCo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7395544360050605965?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7395544360050605965?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/8YvIMkQyuCo/headless-build-for-beginners-part-ii.html" title="Headless Build for Beginners - part II" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><feedburner:origLink>http://blog.ankursharma.org/2010/06/headless-build-for-beginners-part-ii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQEQn8zeyp7ImA9WxFVFEQ.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-2309903490678931104</id><published>2010-06-14T12:05:00.000+05:30</published><updated>2010-06-14T12:05:03.183+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-14T12:05:03.183+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="build.xml" /><category scheme="http://www.blogger.com/atom/ns#" term="Build" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Headless Build" /><title>Headless Build for Beginners - part I</title><content type="html">&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
The easiest way to generate the plug-in jars is through &lt;a href="http://help.eclipse.org/galileo/topic/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_wizards.htm"&gt;Export Wizard&lt;/a&gt;. Assuming we already know this, lets try to play with headless build.&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;Headless Build&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
Here the workbench (IDE or UI) is referred to as 'head'. Headless build essentially means running the builds from command line in non-UI mode. This can be achieved by various means, however, we will start with java command line and org.eclipse.equinox.launcher jar.&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;Java -jar&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
This is standard Java part. Java executable has &lt;a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html"&gt;many command line options&lt;/a&gt; and -jar is one of them. The curious souls can learn more about &lt;a href="http://java.sun.com/docs/books/tutorial/deployment/jar/"&gt;packaging&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://java.sun.com/docs/books/tutorial/deployment/jar/run.html"&gt;executing&lt;/a&gt;&amp;nbsp;jars.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;org.eclipse.equinox.launcher&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
Eclipse has its own OSGi implementation which is known as &lt;a href="http://www.eclipse.org/equinox/"&gt;Equinox&lt;/a&gt;. '&lt;a href="http://org.eclipse.equinox.launcher/"&gt;org.eclipse.equinox.launcher&lt;/a&gt;' is a plug-in as well as executable jar that launches the OSGi Runtime. It is located under plug-ins folder as&amp;nbsp;org.eclipse.equinox.launcher_&amp;lt;version&amp;gt;&amp;lt;qualifier.jar&amp;gt; ( for example&amp;nbsp;org.eclipse.equinox.launcher_1.1.0.v20100507.jar).&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;-application&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
This '-application' option tells 'org.eclipse.equinox.launcher' that which application has to be launched. The application is identified by its id. The application is discovered using the Application Admin service. The &lt;a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/runtime_app_model.htm"&gt;Runtime Application Model&lt;/a&gt; explains how it works.&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;org.eclipse.ant.core.antRunner&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Its the application id for the &lt;a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/ant_running_buildfiles_programmatically.htm"&gt;AntRunner &lt;/a&gt;application. It is contributed by&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 13px;"&gt;&lt;b&gt;org.eclipse.ant.core&lt;/b&gt;&amp;nbsp;plug-in and i&lt;/span&gt;ts purpose it to run Ant build files.&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;build.xml&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Its the Ant script to build the plug-in. Good news is the we need not be expert in Ant (however it good to have some &lt;a href="http://ant.apache.org/manual/tutorials.html"&gt;knowledge&lt;/a&gt; about it). The PDE Build can generate this help for us. Right click on the build.properties and select PDE Tools -&amp;amp;gt; Create Ant Build File. This will generate&amp;nbsp;build.xml and&amp;nbsp;javaCompiler...args files. There may be more and specially name of the later may vary depending on the &lt;a href="http://blog.ankursharma.org/2009/11/source-and-output.html"&gt;output.&lt;library&gt;&lt;/library&gt;&lt;/a&gt; entry in the build.properties file.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;Putting the pieces together&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Assuming that the name of the plugins project is 'com.example.helloworld' the command to build it headlessly will be&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
java -jar &amp;lt;eclipse-installation-path&amp;gt;\plugins\org.eclipse.equinox.launcher_&amp;lt;version&amp;gt;&amp;lt;qualifier&amp;gt;.jar -application org.eclipse.ant.core.antRunner -buildfile &amp;lt;eclipse-workspace-path&amp;gt;\&amp;lt;project-name&amp;gt;\&amp;lt;build-xml-path&amp;gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;i&gt;example&lt;/i&gt;&lt;/div&gt;
&lt;pre class="brush: text" style="text-align: left;"&gt;java -jar C:\eclipse\plugins\org.eclipse.equinox.launcher_1.1.0.v20100507.jar -application org.eclipse.ant.core.antRunner -buildfile C:\workspace\com.example.helloworld\build.xml
&lt;/pre&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;Result&lt;/b&gt;&lt;br /&gt;
This will build the plug-in project according to build.xml script. Since it was generated for us from build.propertied, it is essentially this file that governs the build. Note that build.xml is not generated automatically not kept in sync with build.properties. For any&amp;nbsp;modifications&amp;nbsp;to be reflected, the build.xml file has to be regenerated.&lt;br /&gt;
Assuming our plug-in does not have the Bundle-Classpath entry in the Manifest.MF file and source.. and output.. are the only source and output entries in our build.properties. The resultant build of such a plug-in will be in a folder '@Dot' in the project along with the log-file&amp;nbsp;@dot.log&amp;nbsp;.&lt;br /&gt;
This is not quite we expected. We were hoping to see a com.example.helloworld_1.0.0.v201006141121.jar kind of file. This happened because the default target (task) will just compile the classes. To make it generate the jar, edit build.xml and make the default target 'build.update.jar' (mentioned in the very first line).&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;project name="com.example.helloworld" default="build.update.jar" basedir="."&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
This shall generate the &lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;com.example.helloworld_&amp;lt;version&amp;gt;&amp;lt;qualifier&amp;gt;.jar in the project folder. The build.xml can be modified to have it created in a desired location instead. Also note that the timestamp that replaces 'qualifier' is not the build time but the time when the build.xml was generated.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-2309903490678931104?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=3V2dStEqatM:hgr-pq0t9fk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=3V2dStEqatM:hgr-pq0t9fk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=3V2dStEqatM:hgr-pq0t9fk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=3V2dStEqatM:hgr-pq0t9fk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=3V2dStEqatM:hgr-pq0t9fk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=3V2dStEqatM:hgr-pq0t9fk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=3V2dStEqatM:hgr-pq0t9fk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=3V2dStEqatM:hgr-pq0t9fk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=3V2dStEqatM:hgr-pq0t9fk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/3V2dStEqatM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2309903490678931104?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2309903490678931104?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/3V2dStEqatM/headless-build-for-beginners-part-i.html" title="Headless Build for Beginners - part I" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><feedburner:origLink>http://blog.ankursharma.org/2010/06/headless-build-for-beginners-part-i.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQER30zfip7ImA9WxFXFU4.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-3300905634209519180</id><published>2010-05-22T19:11:00.001+05:30</published><updated>2010-05-22T19:21:46.386+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-22T19:21:46.386+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Friend of Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Admirer of Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title>Admirer of Eclipse</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Helios is looking for 360 friends&amp;nbsp;&lt;a href="http://www.eclipse.org/helios/friends.php"&gt;http://www.eclipse.org/helios/friends.php&lt;/a&gt;&amp;nbsp;I am sure with generous Eclipse community, this won't be hard to get. However, we can do something more.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;I am suggesting a smaller donation package named 'Admirer of Eclipse'. For a donation of $15 or $20, the&amp;nbsp;donor will get a batch like Friend of Eclipse and Early access to&amp;nbsp;Helios&amp;nbsp;release.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;There are two main reasons I came up with this suggestion.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;1. There is much less donation from AP region compared to other geographies. This is probably because $35 when converted to local currency becomes a significant figure. I feel may be $15 or $20 is more affordable.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;2. One of the major benefit the 'Friends of Eclipse' enjoy is the faster downloads. Now since most Eclipse users at least here in India (and probably adjoining Geos) have 128 kbps or less internet connection. Hence, the larger bandwidth from Eclipse servers is no more a benefit for them.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Please vote a Yes or a No for the idea below (or &lt;a href="http://poll.fm/1xfa3"&gt;http://poll.fm/1xfa3&lt;/a&gt; if can't see it)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;script charset="utf-8" src="http://static.polldaddy.com/p/3239067.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;noscript&gt;
 &lt;a href="http://polldaddy.com/poll/3239067/"&gt;Admirer of Eclipse is a good idea?&lt;/a&gt;&lt;span style="font-size: 9px;"&gt;&lt;a href="http://polldaddy.com/features-surveys/"&gt;online surveys&lt;/a&gt;&lt;/span&gt;
&lt;/noscript&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-3300905634209519180?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=WZTQkFaVYHs:8dH2fTlXaGE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=WZTQkFaVYHs:8dH2fTlXaGE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=WZTQkFaVYHs:8dH2fTlXaGE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=WZTQkFaVYHs:8dH2fTlXaGE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=WZTQkFaVYHs:8dH2fTlXaGE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=WZTQkFaVYHs:8dH2fTlXaGE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=WZTQkFaVYHs:8dH2fTlXaGE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=WZTQkFaVYHs:8dH2fTlXaGE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=WZTQkFaVYHs:8dH2fTlXaGE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/WZTQkFaVYHs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/3300905634209519180/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=3300905634209519180" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/3300905634209519180?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/3300905634209519180?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/WZTQkFaVYHs/admirer-of-eclipse.html" title="Admirer of Eclipse" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.ankursharma.org/2010/05/admirer-of-eclipse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcEQnkzcCp7ImA9WxFRF0Q.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-7783446214798097844</id><published>2010-05-02T15:05:00.009+05:30</published><updated>2010-05-02T15:23:23.788+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T15:23:23.788+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Debug" /><category scheme="http://www.blogger.com/atom/ns#" term="Remote Eclipse Debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="Remote Debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="vmargs" /><category scheme="http://www.blogger.com/atom/ns#" term="Launch Config" /><title>Remote Debugging Eclipse</title><content type="html">&lt;div style="text-align: justify;"&gt;
Recently I ran into a nasty bug that will get reproduced only in host Eclipse &lt;sup&gt;1&lt;/sup&gt;.The best way to catch them is by remote debugging.&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Remote Debugging&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Remote debugging is a java feature. Since Eclipse is java application (running inside a JVM) we can remote debug it given the JVM used to launch Eclipse supports it. Most JVMs supports remote debugging from pre-1.4 era.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v4r0/index.jsp?topic=/com.ibm.websphere.v4.doc/olt_content/debugger/concepts/cbwremdb.htm"&gt;WebSphere&lt;/a&gt; give a nice definition "&lt;i&gt;Debugging a program running on one system while controlling the program  from another system is known as remote debugging. The debugger supports remote  debugging by allowing you to run the debugger user interface on one system, while running the  debug engine on another system. The system running the debugger user interface is known  as the &lt;i&gt;local&lt;/i&gt; system. The system where the debug engine runs is known as the &lt;i&gt;remote&lt;/i&gt;  system.&lt;/i&gt;"&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;How to remote debug Eclipse?&lt;/b&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt; Start the Eclipse as server&lt;/b&gt;&lt;/li&gt;
We need to pass -Xdebug VM argument to Eclipse to tell JVM to get launched with debugger. We need to pass certain more options to tell it to start in server mode and listen to a particular socket. &lt;br /&gt;
&lt;br /&gt;
This command shall be entered on the command prompt
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;i&gt;eclipse.exe -vmargs -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&lt;/i&gt; &lt;a href="http://2.bp.blogspot.com/_dqhq-tO9EaM/S90vyBhGaTI/AAAAAAAACc0/L-5a1W5fdXU/s1600/cmd_eclipse_remote_debug.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="86" src="http://2.bp.blogspot.com/_dqhq-tO9EaM/S90vyBhGaTI/AAAAAAAACc0/L-5a1W5fdXU/s400/cmd_eclipse_remote_debug.JPG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
See the complete details for the options and their meaning at &lt;a href="http://java.sun.com/j2se/1.4.2/docs/guide/jpda/conninv.html"&gt;Connection and Invocation Details page&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Creating a Remote Java Application debug config&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;div style="text-align: justify;"&gt;
Start another instance of Eclipse where we will debug the other instance launched in Step 1. Also check out the code that you want to debug. Once this is done, open debug launch configurations and choose '&lt;i&gt;Remote Java Application&lt;/i&gt;' and create a new debug config.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_dqhq-tO9EaM/S90547y9-UI/AAAAAAAACc8/ScMg4BW7_NA/s1600/launch_config_remote_java_app.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="260" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/S90547y9-UI/AAAAAAAACc8/ScMg4BW7_NA/s400/launch_config_remote_java_app.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
The &lt;i&gt;project&lt;/i&gt; text box shall contain the project which has the code that needs to be debugged. The connection type shall be &lt;i&gt;standard socket attach&lt;/i&gt; while &lt;i&gt;port &lt;/i&gt;will contain the socket address we gave in Step 1. The &lt;i&gt;host&lt;/i&gt; is &lt;i&gt;localhost&lt;/i&gt; we both instances are running of same machine.
&lt;/div&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Connecting and attaching to the remote server&lt;/b&gt;&lt;/li&gt;
&lt;div style="text-align: justify;"&gt;
Launch the debug config like any other debug config. This will launch the debug mode. Place the breakpoints and do the relevant actions in the server Eclipse instance to hit the.&lt;/div&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Debugging&lt;/b&gt;
&lt;/li&gt;
&lt;div style="text-align: justify;"&gt;
The debug process is same as normal debug. No differences. However, if you change the code then the updated code is not what that would run. Remember the server Eclipse is still running in separate JVM. So what you are getting is only a reflection of the code execution. The debug session will end when the serve Eclipse instance is closed or the client Eclipse is disconnected using the disconnect button in the debug view.  &lt;/div&gt;
&lt;/ol&gt;
&lt;span style="font-size: xx-small;"&gt;1. Host Eclipse: The default eclipse instance is referred to as Host Eclipse. When self-hosting, a new Eclipse is launched from it, it is referred to as Guest Eclipse or Nested Eclipse Instance.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-7783446214798097844?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=BkljMVczFvw:KXyLulqU6cQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=BkljMVczFvw:KXyLulqU6cQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=BkljMVczFvw:KXyLulqU6cQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=BkljMVczFvw:KXyLulqU6cQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=BkljMVczFvw:KXyLulqU6cQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=BkljMVczFvw:KXyLulqU6cQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=BkljMVczFvw:KXyLulqU6cQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=BkljMVczFvw:KXyLulqU6cQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=BkljMVczFvw:KXyLulqU6cQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/BkljMVczFvw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/7783446214798097844/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=7783446214798097844" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7783446214798097844?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7783446214798097844?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/BkljMVczFvw/remote-debugging-eclipse.html" title="Remote Debugging Eclipse" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_dqhq-tO9EaM/S90vyBhGaTI/AAAAAAAACc0/L-5a1W5fdXU/s72-c/cmd_eclipse_remote_debug.JPG" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://blog.ankursharma.org/2010/05/remote-debugging-eclipse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUINRXo8fCp7ImA9WxFREko.&quot;"><id>tag:blogger.com,1999:blog-5914783.post-8966104835516804022</id><published>2010-04-26T14:46:00.001+05:30</published><updated>2010-04-26T14:49:54.474+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-26T14:49:54.474+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse Day" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title>Eclipse Day India 2010 - thank you</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Bangalore hosted the first edition of Eclipse Day last Friday. And what a gathering it was. More hundred (actually around 110) Eclipse enthusiasts attended the event.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The event was scheduled to have 2 track of sessions after the keynote. But because of&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Eyjafjallajökull (I actually spent 30 minutes learning its&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.forvo.com/word/eyjafjallaj%C3%B6kull#is"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;pronunciation&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;)&amp;nbsp;eruptions&amp;nbsp;grounded most of the European flights, &lt;a href="http://wiki.eclipse.org/User:Daniel_megert.ch.ibm.com"&gt;Daniel Megert&lt;/a&gt; could not make it for the event. And as we were&amp;nbsp;scrambling&amp;nbsp;for a keynote speaker, &lt;/span&gt;&lt;a href="http://in.linkedin.com/pub/rajesh-thakkar/1/152/5b1"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Rajesh Thakkar&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; came to our rescue. Thanks &lt;/span&gt;&lt;a href="http://www.linkedin.com/pub/pradeep-balachandran/0/297/26a"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Pradeep&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; also persuading him.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Keynote:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Rajesh spoke about 'Agile and Open Source'. He walked us through agile principles and helped us visualize how they fit into open source world. In Eclipse, we are already following many of its principles. We have small iterations. We build and&amp;nbsp;re-factor&amp;nbsp;often. We react to changing requirements rather quickly. Our stakeholders can see what we are building anytime they want. And more importantly Rajesh cautioned us about the myths around the buzzword 'agile'.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;After keynote we broke into 2 tracks. All the presentations were well&amp;nbsp;received. The number of interested attendees varied from talk to talk but then we gave them tough choices too of which one to attend. The mood, however, was very exciting.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I wish I could sit and attend all the presentations but had to run around to ensure all talks continue on time and without&amp;nbsp;hiccups. Anyway...am contended as I could meet so many Eclipse enthusiasts. But those who could attend the various talks, do blog about them.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Needless to say such events can not be&amp;nbsp;successful&amp;nbsp;without support from sponsors. So once again a special thanks goes to Eclipse Foundation, IBM Rational Software, Progress Software and Genuitec for supporting the event. We hope the event was up to your expectation and you also benefited from it as much we did.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Thank you all the speakers. You all did a great job and we really appreciate your efforts. A special mention needs to go for Kopal Kothari and Sarika Sinha - the two attendees who volunteered for anchoring the event. Without you it would have been impossible to keep the event on schedule. Since the entry was through registrations, we really thank all the volunteers at the registration desk - Lakshmi, Manju, Kopal, Raksha, Ayushman, Deepak and Satyam. Chetan, Kamalnath and Madhu Samuel did all the photography for the events. Hope they will get the time soon to upload the photographs. Others also who clicked pics please upload it to Flickr and tag is as 'EclipseDayIndia'.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;All the presentations will soon be added to slideshare and the link will be made available on event web-site. Meantime, I would request the attendees to fill up a small &lt;a href="http://www.surveymonkey.com/s/K3S6SSK"&gt;feedback form&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-8966104835516804022?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=EEaGoE9OixM:yc7O759O7Cw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=EEaGoE9OixM:yc7O759O7Cw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=EEaGoE9OixM:yc7O759O7Cw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=EEaGoE9OixM:yc7O759O7Cw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=EEaGoE9OixM:yc7O759O7Cw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=EEaGoE9OixM:yc7O759O7Cw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=EEaGoE9OixM:yc7O759O7Cw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?a=EEaGoE9OixM:yc7O759O7Cw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EclipsePdeAndMe?i=EEaGoE9OixM:yc7O759O7Cw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EclipsePdeAndMe/~4/EEaGoE9OixM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/8966104835516804022/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=8966104835516804022" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/8966104835516804022?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/8966104835516804022?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EclipsePdeAndMe/~3/EEaGoE9OixM/eclipse-day-india-2010-thank-you.html" title="Eclipse Day India 2010 - thank you" /><author><name>Ankur Sharma</name><uri>https://profiles.google.com/114582282039645611012</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-jZvUP-lmI9Q/AAAAAAAAAAI/AAAAAAAACpc/FndFlYiR9sc/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.ankursharma.org/2010/04/eclipse-day-india-2010-thank-you.html</feedburner:origLink></entry></feed>

