<?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/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0"><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 type="text">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/search/label/PlanetEclipse" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/-/PlanetEclipse/-/PlanetEclipse?start-index=26&amp;max-results=25" /><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>40</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/ankursharma/blog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="ankursharma/blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry><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><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 type="text">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;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5275957081109876280" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5275957081109876280" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2011/12/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></entry><entry><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><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse Day" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title type="text">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;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/8867963643593733781" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/8867963643593733781" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2011/04/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></entry><entry><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><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 type="text">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;br /&gt; &lt;target name="ApiUseTarget"&gt;&lt;br /&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;br /&gt;  &lt;apitooling.apiuse_reportconversion htmlfiles="C:\MyRCPProduct\Reports\APIUseReport\HTML" xmlfiles="C:\MyRCPProduct\Reports\APIUseReport\XML"&gt;&lt;br /&gt; &lt;/apitooling.apiuse_reportconversion&gt;&lt;/apitooling.apiuse&gt;&lt;/target&gt;&lt;br /&gt;&lt;/project&gt;&lt;br /&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;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/3788593479197750044" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/3788593479197750044" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2011/02/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" /></entry><entry><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><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 type="text">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;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/1903211282219268594" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/1903211282219268594" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2011/02/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" /></entry><entry><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><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 type="text">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;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5595284630754509495" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5595284630754509495" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2011/02/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" /></entry><entry><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><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 type="text">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;&lt;br /&gt;       allElements.xml&lt;br /&gt;       build.properties&lt;br /&gt;       customAssembly.xml&lt;br /&gt;       customTargets.xml&lt;br /&gt;&amp;lt;buildDirectory&amp;gt;&lt;br /&gt;       plugins/&lt;br /&gt;              com.example.helloworld&lt;br /&gt;              com.example.product&lt;br /&gt;                     example.product&lt;br /&gt;       features/&lt;br /&gt;              com.example.helloworld.feature&lt;br /&gt;&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;&lt;br /&gt; &amp;lt;p2.publish.featuresAndBundles&lt;br /&gt;  repository="file:/${buildDirectory}/repository"&lt;br /&gt;  source="${buildDirectory}/tmp/${archivePrefix}" &lt;br /&gt;  compress="true"&lt;br /&gt; &amp;gt;&lt;br /&gt; &amp;lt;/p2.publish.featuresAndBundles&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;       &lt;br /&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;br /&gt;&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;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/4465210355234542417" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/4465210355234542417" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/08/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></entry><entry><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><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Headless Build" /><title type="text">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;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2508007688980367675" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2508007688980367675" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/08/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></entry><entry><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><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 type="text">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;&lt;br /&gt;       plugins/&lt;br /&gt;      &amp;nbsp;       com.example.helloworld&lt;br /&gt;      &amp;nbsp;       com.example.product&lt;br /&gt;      &amp;nbsp;      &amp;nbsp;       example.product&lt;br /&gt;       features/&lt;br /&gt;      &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;br /&gt;&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;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7621465854658896826" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7621465854658896826" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/07/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" /></entry><entry><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><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 type="text">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;br /&gt;&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;br /&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;br /&gt;&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;br /&gt;&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;&lt;br /&gt; &amp;lt;loadproperties srcfile="../../buildConfiguration/build.properties" /&amp;gt;&lt;br /&gt;        ...&lt;br /&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;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7395544360050605965" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7395544360050605965" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/06/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></entry><entry><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><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 type="text">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;br /&gt;&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;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2309903490678931104" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2309903490678931104" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/06/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></entry><entry><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><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 type="text">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;</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" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/3300905634209519180" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/05/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></entry><entry><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><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 type="text">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;</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" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7783446214798097844" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/05/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></entry><entry><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><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse Day" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title type="text">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;</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" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/8966104835516804022" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/04/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></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-4775440062615754274</id><published>2010-04-13T02:30:00.000+05:30</published><updated>2010-04-13T02:30:59.356+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse Day" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title type="text">Eclipse Day India 2010</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.eclipseday.in/"&gt;Eclipse Day India 2010&lt;/a&gt; will be held on April 23, 2010 at Monarch Luxur, Bangalore. Around 150 Eclipse enthusiasts from over 35 companies are expected to attend this event. This shows Eclipse is getting lot of love from Bangalore and many companies are either using it for their development needs or relying on it as a base for their products.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The &lt;a href="http://www.eclipseday.in/p/schedule.html"&gt;agenda&lt;/a&gt; for the event has been&amp;nbsp;announced. Dani will be delivering the keynote address to Eclipse Day India attendees.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;If you are attending the event do meet up in the networking lobby. We won't have a frosty beverage but nice coffee and yummy food instead :-)&amp;nbsp;I am very excited about this event and eager to know the ways in which developers are using Eclipse in their projects.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Unconference&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;There will be an hour session where attendees can share their ideas, experiences and knowledge of Eclipse and related technologies. So please do come forward and share your stories.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-4775440062615754274?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/4775440062615754274/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=4775440062615754274" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/4775440062615754274" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/4775440062615754274" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/04/eclipse-day-india-2010.html" title="Eclipse Day India 2010" /><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-839305814898171916</id><published>2010-04-03T23:56:00.000+05:30</published><updated>2010-04-03T23:56:10.008+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Feature based launching" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Launch Config" /><title type="text">Feature based launching</title><content type="html">Recently we made an conscious effort for&amp;nbsp;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284882"&gt;making features first class citizens in target definitions&lt;/a&gt;. As a part of that effort PDE introduced&amp;nbsp;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284885"&gt;Feature based launching&lt;/a&gt;. This is available in&amp;nbsp;&lt;a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.6M6-201003121448/index.php"&gt;3.6 M6&lt;/a&gt; build.&lt;br /&gt;&lt;br /&gt;Till now there was only a not so elegant way to self-host using features -&amp;nbsp;&lt;a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.pde.doc.user/tips/pde_tips.htm"&gt;Feature-based self-hosting.&lt;/a&gt;&amp;nbsp;This has now been deprecated.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.6M6-201003121448/eclipse-news-M6.html#PDE"&gt;Feature-based launching&lt;/a&gt;&lt;/b&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/S7d75YF52wI/AAAAAAAACZw/rVsWltFQpvQ/s1600/launch_config_feature_based_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="277" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/S7d75YF52wI/AAAAAAAACZw/rVsWltFQpvQ/s400/launch_config_feature_based_1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;An eclipse application can now also be launch just by picking the feature to launch with. This will be very helpful as in most&amp;nbsp;scenarios as we have plug-ins grouped under features and we will want to have all plug-ins in a feature launched.&lt;/div&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/S7d-D9skdSI/AAAAAAAACZ4/DDXTLZu5PEQ/s1600/launch_config_feature_based_2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="277" src="http://1.bp.blogspot.com/_dqhq-tO9EaM/S7d-D9skdSI/AAAAAAAACZ4/DDXTLZu5PEQ/s400/launch_config_feature_based_2.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;(This is M7 look. M6 look differs only with an extra &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305263"&gt;version column&lt;/a&gt;)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;How will it work?&lt;/b&gt;&lt;br /&gt;It will work much like plug-ins only. However, few important points.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;The checkbox "Use feature from workspace if available" if self-explanatory. When checked, workspace feature will be used (instead one from target) to find the required plug-ins.&lt;/li&gt;&lt;li&gt;Plug-in Location can be Default, Workspace or External (that is, Target Platform). Default means the value will be Workspace or External as selected using "Default Plug-in Location" option under "Restore Defaults" button.&lt;/li&gt;&lt;li&gt;Plug-in Location means the location from where the plug-ins of a certain feature will be resolved. Thus, a feature might be getting picked from Target but its plug-ins can be picked from the Workspace instead.&lt;/li&gt;&lt;li&gt;"Add Required Features" will only add (select) those features to the launch config which are mentioned as dependent features in feature manifest. It will not try to see if the dependent plug-ins map to any feature.&lt;/li&gt;&lt;li&gt;Dependent plug-ins will be implicitly added to the launch. These are the plug-ins which do not belong to any feature and but the plug-ins of the selected features depend on them. e.g. com.ibm.icu&lt;/li&gt;&lt;li&gt;These implicit plug-ins will be picked from same location from where the dependent plug-ins were picked from. If a finer control is needed then good old plug-in based launch is more suited.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Do report bugs if you find anything is not working as mentioned or expected.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-839305814898171916?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/839305814898171916/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=839305814898171916" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/839305814898171916" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/839305814898171916" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/04/feature-based-launching.html" title="Feature based launching" /><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/S7d75YF52wI/AAAAAAAACZw/rVsWltFQpvQ/s72-c/launch_config_feature_based_1.JPG" height="72" width="72" /><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-4621160973509176951</id><published>2010-02-16T15:33:00.000+05:30</published><updated>2010-02-16T15:33:33.837+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse Day" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title type="text">Eclipse Day Submissions</title><content type="html">Thanks everyone for showing such&amp;nbsp;enthusiasm for Eclipse Day. We already have&amp;nbsp;received some nice proposals. And as requested by many we are relaxing the last date to submit the talk proposals till Feb 28, 2010.&lt;br /&gt;&lt;br /&gt;You may find the submitted proposals here&amp;nbsp;&amp;nbsp;&lt;a href="http://bit.ly/EclipseDaySubmissions"&gt;http://bit.ly/EclipseDaySubmissions&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-4621160973509176951?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/4621160973509176951/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=4621160973509176951" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/4621160973509176951" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/4621160973509176951" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/02/eclipse-day-submissions.html" title="Eclipse Day Submissions" /><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>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-261813927637153349</id><published>2010-02-09T00:51:00.000+05:30</published><updated>2010-02-09T00:51:03.298+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse Day" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title type="text">Did you register for Eclipse Day India 2010?</title><content type="html">&lt;div style="text-align: justify;"&gt;Registrations opened today for Eclipse Day India 2010 and it has been a great response. Half the seats already booked on day one. Attendees from over 20 companies have already registered and the number will only go up further only so &lt;a href="http://eclipsedayindia.eventbrite.com/"&gt;register&lt;/a&gt; quickly.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;We will be publishing the agenda by mid-March. So if you are an Eclipse enthusiast then it will be a great opportunity to not only attend some really nice presentations but also network with the community.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;And if you are a company which consumes Eclipse, then what better occasion to show your support by becoming a joint sponsor. &lt;a href="http://www-01.ibm.com/software/rational/"&gt;IBM Rational&lt;/a&gt; has already come forward to joint sponsor event.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;We would love to hear from you if you have been doing some nice work with Eclipse and plug-ins. Do submit your thoughts at &lt;a href="http://eclipseday.in/"&gt;http://EclipseDay.in&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-261813927637153349?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/261813927637153349/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=261813927637153349" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/261813927637153349" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/261813927637153349" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/02/did-you-register-for-eclipse-day-india.html" title="Did you register for Eclipse Day India 2010?" /><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>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-269724534706676057</id><published>2010-01-15T21:06:00.000+05:30</published><updated>2010-01-15T21:06:51.450+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse Day" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title type="text">Eclipse Day India 2010</title><content type="html">&lt;b&gt;Eclipse Day India 2010&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I and &lt;a href="http://blog.eclipse-tips.com/"&gt;Prakash&lt;/a&gt; are organizing Eclipse Day India 2010 on Friday, April 9, 2010. Since this is the first time it is being organized in India, we are keeping the theme fairly broad and simple - Eclipse Plug-in Development. You can find the details at &lt;a href="http://eclipseday.in/"&gt;http://eclipseday.in&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Sponsorship&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Unlike &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_November_2009/Bangalore"&gt;Eclipse Demo Camp&lt;/a&gt; last year, this will be on a slightly bigger scale and thus we need sponsors. If you wish to support the event by extending a sponsorship please do get in touch with us. This will be a great opportunity to reach a gathering of more than 100 Eclipse developers and users from around a dozen companies.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Call for Talks&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The Eclipse Day India is now inviting proposals for talk. Last day to submit&amp;nbsp; your proposals is Feb 15, 2010. See the details on the event wiki. &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Attendee Registration&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The event is &lt;i&gt;FREE&lt;/i&gt;. There is no cost to attend however preregistration is must due to limited seats. Registrations open Feb 1, 2010.&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-269724534706676057?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/269724534706676057/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=269724534706676057" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/269724534706676057" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/269724534706676057" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/01/eclipse-day-india-2010.html" title="Eclipse Day India 2010" /><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>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-3840416860525736474</id><published>2010-01-06T00:43:00.000+05:30</published><updated>2010-01-06T00:43:06.527+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title type="text">I came third</title><content type="html">This came as a complete surprise to me. Am at number three in '&lt;b&gt;Most contributed patches approved for IP Log&lt;/b&gt;' list.&lt;br /&gt;&lt;br /&gt;Reproducing the list from &lt;a href="http://dev.eclipse.org/blogs/eclipsewebmaster/2010/01/04/2009-from-bugzillas-perspective/"&gt;Denis Roy's post&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Most contributed patches approved for IP Log&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;68 Ian Tewksbury       @ibm.com&lt;br /&gt;51 Matthew Piggott     @piggot.ca&lt;br /&gt;&lt;span style="background-color: yellow;"&gt;46 Ankur Sharma        @ibm.com&lt;/span&gt;&lt;br /&gt;46 Chris Jaun          @ibm.com&lt;br /&gt;44 Ian Bull            @eclipsesource.com&lt;br /&gt;40 Tim Buschtoens      @eclipsesource.com&lt;br /&gt;37 Pawel Pogorzelski   @ibm.com&lt;br /&gt;36 Benjamin Cabé       @sierrawireless.com&lt;br /&gt;31 Danny Ju            @oracle.com&lt;br /&gt;&lt;span style="background-color: #fff2cc;"&gt;29 Raksha Vasisht      @ibm.com&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Am also glad for Raksha (who is part of same team as I am) that she too made it in Top Ten. We got committers right in September '09 so playing in a bigger league now. Hope to report (if not resolve) lots of bugs in 2010 :)&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-3840416860525736474?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/3840416860525736474/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=3840416860525736474" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/3840416860525736474" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/3840416860525736474" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2010/01/i-came-third.html" title="I came third" /><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></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-6025717370760787984</id><published>2009-12-31T06:00:00.000+05:30</published><updated>2010-01-01T13:44:12.564+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="E4Application" /><category scheme="http://www.blogger.com/atom/ns#" term="Part" /><category scheme="http://www.blogger.com/atom/ns#" term="Application.xmi" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Part Sash Container" /><category scheme="http://www.blogger.com/atom/ns#" term="Part Stack" /><category scheme="http://www.blogger.com/atom/ns#" term="How to" /><title type="text">Writing an RCP application using e4 modeled UI - part II</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;b&gt;Understanding what we did and why&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In the &lt;a href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4.html"&gt;previous post&lt;/a&gt; we wrote a very minimalistic RCP application using e4 modeled UI. Before adding more stuff to it, lets quickly revisit few steps and try to make sense of them.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In &lt;a href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4.html#step1"&gt;Step 1&lt;/a&gt; we unchecked the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Generate an activator&lt;/span&gt; &lt;span style="font-family: inherit;"&gt;button&lt;/span&gt;. This was because right now we don't want to do anything on bundle start or stop events. We will later add one if we find the need to do so.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In &lt;a href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4.html#step2"&gt;Step 2&lt;/a&gt;, we add a dependency to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.eclipse.core.runtime&lt;span style="font-family: inherit;"&gt; plug-in. This was to bring the extension &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.eclipse.core.runtime.products&lt;span style="font-family: inherit;"&gt; in visible scope. If we don't add this dependency, we will get prompted to add it when we add the extension.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;We also gave the value &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;product&lt;/span&gt; to the extension id. This was to get the product registered as projectname.product. That is why we created a new product config in &lt;a href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4.html#step5"&gt;Step 5&lt;/a&gt;, the product &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.example.e4.rcpapp.product&lt;span style="font-family: inherit;"&gt; was already available to us.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;e4 provides an out of the box application which understands the modeled UI. This application is &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.eclipse.e4.ui.workbench.swt.E4Application&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; which is why we assigned it to the application property of our product.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: inherit;"&gt;The &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;applicationXMI&lt;/span&gt; property is what points to the UI model which the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;E4Application&lt;/span&gt; will use to render the&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/span&gt;UI. The format for the value is the plugin-name/project-relative-path. The file extension doesn't really matter. But an xmi extension will make it open the Toolkit Model Editor.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In &lt;a href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4.html#step3"&gt;Step 3&lt;/a&gt;, we had to manually add and modify the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Application.xmi&lt;/span&gt; file. The New wizard doesn't have a option for it yet. &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284413"&gt;Bug 284413&lt;/a&gt; shall address the issue.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In &lt;a href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4.html#step4"&gt;Step 4&lt;/a&gt;, we gave proper shape to the model.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Application&lt;/span&gt; - this node represents the complete application. It will contain all UI elements plus their handlers, etc. Basically everything has to be child of this node.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Window&lt;/span&gt; - represents the visible window that will form the RCP application GUI. Whatever Label we give to it, is what we will see in the window title bar. Lets play with it a bit. Change the Label property to give it a new title. Give the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;X&lt;/span&gt; and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Y&lt;/span&gt; property as 10 each. Save the editor and launch the application. You will see the application now has the new title and it shows up very close to the top-left corner of the screen. The X and Y properties represents the distance from the top-left corner of the screen.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Part Sash Container&lt;span style="font-family: inherit;"&gt; - is a container for our &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Part&lt;/span&gt;. In e4 both view and editor are treated equally as &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Part&lt;/span&gt;. All the children Parts will share the space among them.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Part Stack&lt;/span&gt; - is a collection of sibling Parts. Only one visible as a time - like we deck various views currently.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Part&lt;/span&gt; - represents a view or a editor. As usual, the Label property will control the name getting displayed on the view tab. We also added it a property &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;URI&lt;/span&gt; and gave it a value &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;platform:/plugin/org.example.e4.rcpapp/org.example.e4.rcpapp.views.MyView&lt;span style="font-family: inherit;"&gt;. This looks like a class name because it is a class name. We don't really need it as of now, but without it you will get a error and just to suppress it I added it. Getting an error on your first e4 RCP app won't look too elegant ;) In next post we will added this class and use it to create UI in the Part space.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4.html#step5"&gt;Step 5&lt;/a&gt; created a product configuration to help invoke the application. Nothing new here.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4.html#step6"&gt;Step 6&lt;/a&gt; created a run configuration using the product created in Step 5.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4.html#step7"&gt;Step 7&lt;/a&gt; simple launched this run config.Only point to note here would be the Plug-ins tab in Run configuration shall select all the target plug-ins. This is because the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Add Required Plug-ins&lt;/span&gt; button can not yet cope with the Dependency Injection used by modeled UI. Not doing so will run you into NPE at org.eclipse.e4.workbench.ui.internal.E4Workbench.init(E4Workbench.java:93).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;Next&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;We will add more Parts and render some useful UI in it.&lt;br /&gt;&lt;/span&gt;&lt;/span&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-6025717370760787984?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/6025717370760787984/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=6025717370760787984" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/6025717370760787984" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/6025717370760787984" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4_31.html" title="Writing an RCP application using e4 modeled UI - 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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-7598577000594371337</id><published>2009-12-31T01:23:00.002+05:30</published><updated>2010-01-01T13:44:12.568+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="e4" /><category scheme="http://www.blogger.com/atom/ns#" term="RCP" /><category scheme="http://www.blogger.com/atom/ns#" term="Application.xmi" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="How to" /><category scheme="http://www.blogger.com/atom/ns#" term="Modeled UI" /><title type="text">Writing an RCP application using e4 modeled UI - part I</title><content type="html">&lt;div style="text-align: justify;"&gt;Prakash was couple of hours quicker on posting the same topic &lt;a href="http://blog.eclipse-tips.com/2009/11/first-e4-rcp-application.html"&gt;here&lt;/a&gt;. I have a slightly different approach and may be more to add. Lets see.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="step1"&gt;&lt;b&gt;Step 1: Create a simple plug-in project.&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Open the plug-in wizard and create a new plug-in project. Let's give a name &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.example.e4.rcpapp&lt;/span&gt;. Be sure to uncheck the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Generate an activator&lt;/span&gt; option. Click Finish. Do not go to template page (they are not yet updated for e4).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&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/SzuBE3Jql9I/AAAAAAAACUU/a4bGOxyF-7A/s1600-h/new_plugin_wizard_e4_rcpapp.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_dqhq-tO9EaM/SzuBE3Jql9I/AAAAAAAACUU/a4bGOxyF-7A/s400/new_plugin_wizard_e4_rcpapp.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="step2"&gt;&lt;b&gt;Step 2: Adding product extension.&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Open the manifest editor and go to Dependencies tab. Add &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.eclipse.core.runtime&lt;/span&gt; as required plug-in. Now open the Extensions page. Add a new extension &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.eclipse.core.runtime.products&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Select the extension and give it a ID &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;product&lt;/span&gt; in extension details section.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Right click the extension and select New -&amp;gt; Product. Select the product and give it a nice name - &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;e4 RCP app&lt;/span&gt;. Change the application id to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.eclipse.e4.ui.workbench.swt.E4Application&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Now right click the product in extension section and add two new properties. In the extension section give the name and values like this&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Name : &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;appName&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Value : &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Hello e4&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Name : &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;applicationXMI&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Value : &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.example.e4.rcpapp/Application.xmi&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;After this your plugin.xml will look like this&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;extension&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;    id="product"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; point="org.eclipse.core.runtime.products"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;product&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; application="org.eclipse.e4.ui.workbench.swt.E4Application"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="e4 RCP app"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property&lt;br /&gt;&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;nbsp; name="appName"&lt;br /&gt;&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;nbsp; value="Hello e4"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property&lt;br /&gt;&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;nbsp; name="applicationXMI"&lt;br /&gt;&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;nbsp; value="org.example.e4.rcpapp/Application.xmi"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/product&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/extension&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="step3"&gt;&lt;b&gt;Step 3: Application.xmi&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Create a new file to the root of the project and call it &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Application.xmi&lt;/span&gt;. It will open by default in a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Toolkit model editor&lt;/span&gt; with errors (because it doesn't have the expected header). The editor will show a button &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Open with Text Editor&lt;/span&gt;. Click it and the file will open in a text editor. Add following skeleton to it. Save and close it.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;?xml version="1.0" encoding="ASCII"?&amp;gt;&lt;br /&gt;&amp;lt;application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:application="http://www.eclipse.org/ui/2008/UIModel"&amp;gt;&lt;br /&gt;&amp;lt;/application:Application&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reopen the file and it will now open properly.&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/SzufVfeTPHI/AAAAAAAACUc/rWSwP3mgf-E/s1600-h/application_xmi_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_dqhq-tO9EaM/SzufVfeTPHI/AAAAAAAACUc/rWSwP3mgf-E/s400/application_xmi_1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="step4"&gt;&lt;b&gt;Step 4: Creating Modeled UI&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;When you right click any node in this editor, there will options to add a new Child and/or Siblings. The &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Properties&lt;/span&gt; view will show the properties of each node. If it is not already visible you can invoke it by selecting the node and choosing &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Show Properties View&lt;/span&gt; option from the context menu.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Select the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Application&lt;/span&gt; node and add a new child &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Window&lt;/span&gt; to it. See its properties and give it a nice name in the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Label&lt;/span&gt; property like &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Hello e4&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Select the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Window&lt;/span&gt; node and add a child &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Part Sash Container&lt;/span&gt;.&lt;br /&gt;Select &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;PartSashContainer&lt;/span&gt; node and add a child &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Part Stack&lt;/span&gt;.&lt;br /&gt;Finally select &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;PartStack&lt;/span&gt; node and add a child &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Part&lt;/span&gt; to it. Visit the Properties view for the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Part&lt;/span&gt; node and give it a name in the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Label&lt;/span&gt; property like &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;My view&lt;/span&gt;. And in the URI property give a path &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;platform:/plugin/org.example.e4.rcpapp/org.example.e4.rcpapp.views.MyView&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Save the editor and it shall now look like this.&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/Szui9PjDntI/AAAAAAAACUk/htk8O9N0VzY/s1600-h/application_xmi_2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_dqhq-tO9EaM/Szui9PjDntI/AAAAAAAACUk/htk8O9N0VzY/s640/application_xmi_2.JPG" /&gt;&lt;/a&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;br /&gt;To be sure that we did everything right, open the Application.xmi in text editor and its contents should look like this&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;?xml version="1.0" encoding="ASCII"?&amp;gt;&lt;br /&gt;&amp;lt;application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:application="http://www.eclipse.org/ui/2008/UIModel"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;children xsi:type="application:Window" label="Hello e4"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;children xsi:type="application:PartSashContainer"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;children xsi:type="application:PartStack"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;children xsi:type="application:Part" URI="platform:/plugin/org.example.e4.rcpapp/org.example.e4.rcpapp.views.MyView" label="My View"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/children&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/children&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/children&amp;gt;&lt;br /&gt;&amp;lt;/application:Application&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="step5"&gt;&lt;b&gt;Step 5: Product Configuration&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Create a new Product Configuration. Select the product &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.example.e4.rcpapp.product&lt;/span&gt; from the combo by enabling the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Use an existing product&lt;/span&gt; option in the New Product Configuration wizard.&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/Szul4B9oFEI/AAAAAAAACUs/gCZ0G8owtmI/s1600-h/new_product_config_wizard_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_dqhq-tO9EaM/Szul4B9oFEI/AAAAAAAACUs/gCZ0G8owtmI/s400/new_product_config_wizard_1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The product editor will now open and 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://4.bp.blogspot.com/_dqhq-tO9EaM/SzuoqAimjwI/AAAAAAAACU0/fktK2IOT8NE/s1600-h/product_editor_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="206" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/SzuoqAimjwI/AAAAAAAACU0/fktK2IOT8NE/s320/product_editor_1.JPG" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="step6"&gt;&lt;b&gt;Step 6: Creating a Run Configuration&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Open the Run Configurations wizard and create a new Eclipse Application config. Name it &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;rcpapp.product&lt;/span&gt;.&lt;br /&gt;Choose the product &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;org.example.e4.rcpapp.product&lt;/span&gt; in the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Run a product&lt;/span&gt; option.&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/Szupv_FbdWI/AAAAAAAACU8/tcbZfIggN9Y/s1600-h/run_config_wizard_eclipse_app_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/Szupv_FbdWI/AAAAAAAACU8/tcbZfIggN9Y/s400/run_config_wizard_eclipse_app_1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Go to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Plug-ins&lt;/span&gt; tab and make sure &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;all workspace and enabled target plug-ins&lt;/span&gt; option is selected in the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Launch with&lt;/span&gt; combo.&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/SzuqVcvs8oI/AAAAAAAACVE/2wJPqv86xYs/s1600-h/run_config_wizard_eclipse_app_plugins_tab_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="206" src="http://3.bp.blogspot.com/_dqhq-tO9EaM/SzuqVcvs8oI/AAAAAAAACVE/2wJPqv86xYs/s320/run_config_wizard_eclipse_app_plugins_tab_1.JPG" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="step7"&gt;&lt;b&gt;Step 7: Launching the RCP Application&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Click Run button in run configuration to execute the RCP application. Your first e4 RCP application 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://2.bp.blogspot.com/_dqhq-tO9EaM/Szuqv7DNDVI/AAAAAAAACVM/xRHEfuitduI/s1600-h/e4_rcpapp_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_dqhq-tO9EaM/Szuqv7DNDVI/AAAAAAAACVM/xRHEfuitduI/s400/e4_rcpapp_1.JPG" /&gt;&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Next&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In the following posts we will revisit what we did above and try to see why we did it so.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note to e4 gurus and committers &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This series is post is outcome of hit-and-trial self learning. Please do add you views or point out any mistakes you see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5914783-7598577000594371337?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/7598577000594371337/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=7598577000594371337" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7598577000594371337" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/7598577000594371337" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2009/12/writing-rcp-application-using-e4.html" title="Writing an RCP application using e4 modeled UI - 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><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_dqhq-tO9EaM/SzuBE3Jql9I/AAAAAAAACUU/a4bGOxyF-7A/s72-c/new_plugin_wizard_e4_rcpapp.JPG" height="72" width="72" /><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-5332508916908623390</id><published>2009-12-23T23:34:00.000+05:30</published><updated>2009-12-23T23:34:23.339+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="LinkedIn" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title type="text">LinkedIn IT Trends and Compensation Report (Aus-India) 2009</title><content type="html">&lt;div style="text-align: justify;"&gt;LinkedIn’s Technology Trends &amp;amp; Compensation Study Australia - India Report for 2009 was released recently. You may download the PDF from &lt;a href="https://linkedin.box.net/shared/aldfodxog8"&gt;here&lt;/a&gt;. Apart from various trends, I found a couple for slides with a mention of Eclipse too.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;1. Eclipse is the 4th most popular development tool.&lt;/b&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/SzJYffVKpMI/AAAAAAAACUE/jAnCsk9uook/s1600-h/misc_linkedin_survey_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/SzJYffVKpMI/AAAAAAAACUE/jAnCsk9uook/s400/misc_linkedin_survey_1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I was expecting Eclipse to be in top 5 so being number 4 is not so disappointing. I feel some of the survey participants might have counted Eclipse under 'Other open source dev tools' which is at number 2.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. 46% developers 'very satisfied' with Eclipse.&lt;/b&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/SzJY9PK7tmI/AAAAAAAACUM/N-vSE6HoU_A/s1600-h/misc_linkedin_survey_2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/SzJY9PK7tmI/AAAAAAAACUM/N-vSE6HoU_A/s400/misc_linkedin_survey_2.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Eclipse got second highest votes for 'very satisfied'. Surprisingly second to Apple!! What can I say. May be because I don't have a iPhone :-) But even more shocking was SAP better than Apple and Eclipse in average scores. Now I have seen only one SAP application and that sucks bad. Perhaps they really are doing a fantastic job.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Since the report from Australia-India geo its a partial view. Am sure this pictures differs a lot from the one at global level.&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-5332508916908623390?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/5332508916908623390/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=5332508916908623390" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5332508916908623390" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/5332508916908623390" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2009/12/linkedin-it-trends-and-compensation.html" title="LinkedIn IT Trends and Compensation Report (Aus-India) 2009" /><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/SzJYffVKpMI/AAAAAAAACUE/jAnCsk9uook/s72-c/misc_linkedin_survey_1.JPG" height="72" width="72" /><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-2629522014730619552</id><published>2009-12-07T21:28:00.000+05:30</published><updated>2009-12-07T21:28:03.680+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Heap Status" /><category scheme="http://www.blogger.com/atom/ns#" term="Heap" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="Preferences" /><category scheme="http://www.blogger.com/atom/ns#" term="Quick Tip" /><category scheme="http://www.blogger.com/atom/ns#" term="Heap Size" /><title type="text">Heap Status</title><content type="html">If you wish to keep an eye on heap status of your eclipse instance then a quick way to do it is 'Heap Status' preference. You don't need any memory profiler for this.&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://4.bp.blogspot.com/_dqhq-tO9EaM/Sx0hiezDlvI/AAAAAAAACT0/2dlOQQCFlU8/s1600-h/preferences_heap_status.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/Sx0hiezDlvI/AAAAAAAACT0/2dlOQQCFlU8/s400/preferences_heap_status.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This starts displaying the heap status in the status bar.&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/Sx0iwb-nFvI/AAAAAAAACT8/JB6-45mFBDM/s1600-h/statusbar_heap_status.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/Sx0iwb-nFvI/AAAAAAAACT8/JB6-45mFBDM/s320/statusbar_heap_status.JPG" /&gt;&lt;/a&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: left;"&gt;The garbage can icon is for running the Garbage Collection. It basically makes call to &lt;code&gt;System.gc()&lt;/code&gt; and &lt;code&gt;System.runFinalization()&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; 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-2629522014730619552?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/2629522014730619552/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=2629522014730619552" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2629522014730619552" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/2629522014730619552" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2009/12/heap-status.html" title="Heap Status" /><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/Sx0hiezDlvI/AAAAAAAACT0/2dlOQQCFlU8/s72-c/preferences_heap_status.JPG" height="72" width="72" /><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-3941216540037745332</id><published>2009-11-21T03:19:00.003+05:30</published><updated>2009-11-21T03:52:28.270+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="output.." /><category scheme="http://www.blogger.com/atom/ns#" term="source.." /><category scheme="http://www.blogger.com/atom/ns#" term="Source Folders" /><category scheme="http://www.blogger.com/atom/ns#" term="Java Build Path" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="build.properties" /><category scheme="http://www.blogger.com/atom/ns#" term="Output Folders" /><title type="text">source.&lt;library&gt; and output.&lt;library&gt;</title><content type="html">&lt;div style="text-align: justify;"&gt;The source and output properties in build.properties control the folders to be compiled and where to place the resulting output. The &lt;a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.pde.doc.user/reference/pde_feature_generating_build.htm" linkindex="126"&gt;eclipse help&lt;/a&gt; briefly talks about it.&lt;br /&gt;&lt;/div&gt;&lt;pre class="brush: text"&gt;    * source.&amp;lt;library&amp;gt; - lists source folders that will be compiled (e.g. source.xyz.jar=src/, src-ant/). If the library is specified in your plug-in.xml or manifest.mf, the value should match it;&lt;br /&gt;    * output.&amp;lt;library&amp;gt; - lists the output folder receiving the result of the compilation;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Source Folders and Output Folders&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Source and Output folder have already been discussed in &lt;a href="http://blog.ankursharma.org/2009/10/source-folders-and-srcincludes_11.html" linkindex="127"&gt;this&lt;/a&gt; post. Only the source folders gets compiled and the generated class files get stored in the corresponding output folder. A project can have one or more source folder. If a source folder does not have a output folder attached to it explicitly, its output will go to the default output folder. The &lt;code&gt;.classpath&lt;/code&gt; file stores all this information.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;source.. and output..&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The real syntax is source.&amp;lt;library&amp;gt; and output.&amp;lt;library&amp;gt; where &amp;lt;library&amp;gt; is generally the name of the jar. Here the second dot signifies the default library. Any source folder assigned to it gets it output reside in the root when the plug-in is build. The &lt;code&gt;output..&lt;/code&gt; entry tells the PDE Build where to pick the classes for &lt;code&gt;source..&lt;/code&gt; from. &lt;br /&gt;&lt;/div&gt;Typical entries look like this&lt;br /&gt;&lt;pre class="brush: text"&gt;source.. = src/&lt;br /&gt;output.. = bin/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;When a plug-in with above entries is build the structure of the plug-in jar will look like this&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;org.example.sample_1.0.0&lt;br /&gt;│   plugin.xml&lt;br /&gt;│&lt;br /&gt;├───icons&lt;br /&gt;│       sample.gif&lt;br /&gt;│&lt;br /&gt;├───META-INF&lt;br /&gt;│       MANIFEST.MF&lt;br /&gt;│&lt;br /&gt;└───org&lt;br /&gt;    └───example&lt;br /&gt;        └───sample&lt;br /&gt;            │   Activator.class&lt;br /&gt;            │&lt;br /&gt;            └───actions&lt;br /&gt;                    SampleAction.class&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;More complex plug-ins have more than one source folder. org.eclipse.pde.core is one such plug-in. It is good practice to assign separate output folder for separate source folders. This is not mandatory.&lt;br /&gt;Lets assume &lt;code&gt;src&lt;/code&gt; and &lt;code&gt;src_an&lt;/code&gt; are the two source folders and their corresponding output folders are &lt;code&gt;bin&lt;/code&gt; and &lt;code&gt;bin_ant&lt;/code&gt;. Then a &lt;code&gt;build.properties&lt;/code&gt; like &lt;br /&gt;&lt;/div&gt;&lt;pre class="brush: text"&gt;source.. = src/&lt;br /&gt;output.. = bin/&lt;br /&gt;source.ant_tasks/anttasks.jar = src_ant/&lt;br /&gt;output.ant_tasks/anttasks.jar = bin_ant/&lt;br /&gt;&lt;/pre&gt;will create a plug-in which will look something like this&lt;br /&gt;&lt;pre&gt;org.example.sample_1.0.0&lt;br /&gt;│   plugin.xml&lt;br /&gt;│&lt;br /&gt;├───ant_tasks&lt;br /&gt;│       anttasks.jar&lt;br /&gt;│&lt;br /&gt;├───icons&lt;br /&gt;│       sample.gif&lt;br /&gt;│&lt;br /&gt;├───META-INF&lt;br /&gt;│       MANIFEST.MF&lt;br /&gt;│&lt;br /&gt;└───org&lt;br /&gt;    └───example&lt;br /&gt;        └───sample&lt;br /&gt;            │   Activator.class&lt;br /&gt;            │&lt;br /&gt;            └───actions&lt;br /&gt;                    SampleAction.class&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;The contents of the &lt;code&gt;src_ant&lt;/code&gt; folder will get compiled and jared in to &lt;code&gt;anttasks.jar&lt;/code&gt; inside &lt;code&gt;ant_tasks&lt;/code&gt; folder because of the &lt;code&gt;source.ant_tasks/anttasks.jar = src_ant/&lt;/code&gt; entry.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Classpath vs source/output entries&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The source folder and output folder information is already available in class path then why source/output entries are needed? The classpath entries are used to compile source code. But the PDE Build relies on the source/output entries while building (or exporting) the plug-ins. Suppose a plug-in A refers to a class C in plug-in B. Then while building the plug-in A PDE Build will look into &lt;code&gt;build.properties&lt;/code&gt; of plug-in B to locate the &lt;code&gt;C.class&lt;/code&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Rules of using source. and output. entries&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Every source folder should appear in a source. entry.&lt;/li&gt;&lt;li&gt;A source folder can appear in one and only one source. entry.&lt;/li&gt;&lt;li&gt;The source and output folders are specified as their path relative to the root of the project.&lt;/li&gt;&lt;li&gt;All source folders whose output folder is same should belong to same source. entry.&lt;/li&gt;&lt;li&gt;The corresponding output folders should be mentioned in the corresponding output.entry.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;Note that &lt;i&gt;should&lt;/I&gt; in above rules means that rule is a good practice and not an obligation but if not followed the result of PDE Build might be unexpected.&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-3941216540037745332?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/3941216540037745332/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=3941216540037745332" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/3941216540037745332" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/3941216540037745332" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2009/11/source-and-output.html" title="source.&amp;lt;library&amp;gt; and output.&amp;lt;library&amp;gt;" /><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>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5914783.post-8630080817528995268</id><published>2009-10-21T06:51:00.003+05:30</published><updated>2009-11-03T14:38:09.995+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="enumIdentifier" /><category scheme="http://www.blogger.com/atom/ns#" term="Execution Environment" /><category scheme="http://www.blogger.com/atom/ns#" term="Compilation Environment" /><category scheme="http://www.blogger.com/atom/ns#" term="jre.compilation.profile" /><category scheme="http://www.blogger.com/atom/ns#" term="assertIdentifer" /><category scheme="http://www.blogger.com/atom/ns#" term="javacWarnings" /><category scheme="http://www.blogger.com/atom/ns#" term="javacTarget" /><category scheme="http://www.blogger.com/atom/ns#" term="javacSource" /><category scheme="http://www.blogger.com/atom/ns#" term="Bundle-RequiredExecutionEnvironment" /><category scheme="http://www.blogger.com/atom/ns#" term="PlanetEclipse" /><title type="text">Execution Environment and javac entries</title><content type="html">&lt;b&gt;Execution Environment&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Execution Environments have been explained in detail in this &lt;a href="http://wiki.eclipse.org/index.php/Execution_Environments" linkindex="20" target="_blank"&gt;article&lt;/a&gt;. And from PDE API tooling perspective it has been explained &lt;a href="http://wiki.eclipse.org/PDE/Resources/Execution_Environments" linkindex="21" target="_blank"&gt;here&lt;/a&gt;. In one line, EE represents the JRE. It is a set of properties, each marking a level of compliance. I am reproducing this table from '&lt;a href="http://help.eclipse.org/galileo/topic/org.eclipse.pde.doc.user/tasks/pde_compilation_env.htm" linkindex="22" target="_blank"&gt;Setting the Compilation Environment&lt;/a&gt;' help page.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="1" cellpadding="1" cellspacing="1" style="height: 54px; margin-left: auto; margin-right: auto; text-align: left; width: 60%;"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td style="text-align: center; vertical-align: top;"&gt;Environment&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;Source&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;Target&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;CDC-1.0/Foundation-1.0&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.3&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;CDC-1.1/Foundation-1.1&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.3&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.2&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;OSGi/Minimum-1.0&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.3&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;OSGi/Minimum-1.1&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.3&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.2&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;JRE-1.1&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;J2SE-1.2&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.2&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;J2SE-1.3&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.3&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;J2SE-1.4&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.3&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.2&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;J2SE-1.5&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.5&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.5&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;JavaSE-1.6&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.6&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.6&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;PersonalJava-1.1&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;PersonalJava-1.2&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;CDC-1.0/PersonalBasis-1.0&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.3&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;CDC-1.0/PersonalJava-1.0&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.3&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.1&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;CDC-1.1/PersonalBasis-1.1&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.3&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.2&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="vertical-align: top;"&gt;CDC-1.1/PersonalJava-1.1&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.3&lt;br /&gt;&lt;/td&gt; &lt;td style="vertical-align: top;"&gt;1.2&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;There are more properties and are provided by &lt;i&gt;org.eclipse.jdt.core&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;i&gt;org.eclipse.jdt.launching&lt;/i&gt; plug-in provides an extension point (id =  &lt;i&gt;org.eclipse.jdt.launching.executionEnvironments&lt;/i&gt;) for contributing EEs. JDT Launching plug-in also extends it and provides the EEs that are listed in the above table. If you really want to see the code then check out &lt;i&gt;JavaCore.java &lt;/i&gt;and &lt;i&gt;CompilerOptions.java&lt;/i&gt; in &lt;i&gt;org.eclipse.jdt.core&lt;/i&gt; plug-in.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Manifest.MF&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The execution environment for a bundle can be  defined in the Manifest.MF file. A typical entry for Java 1.4 environment will look like this.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre style="text-align: justify;"&gt;Bundle-RequiredExecutionEnvironment: J2SE-1.4&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The manifest editor provides an easier way on the &lt;i&gt;Overview &lt;/i&gt;tab.&lt;br /&gt;&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/Su_x2BiuAMI/AAAAAAAACQk/r8pIfrqK64I/s1600-h/manifest_overview_ee_1.JPG" imageanchor="1" linkindex="23" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="174" src="http://4.bp.blogspot.com/_dqhq-tO9EaM/Su_x2BiuAMI/AAAAAAAACQk/r8pIfrqK64I/s320/manifest_overview_ee_1.JPG" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;blockquote&gt;Execution Environment section on Overview page of Manifest Editor&lt;br /&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br /&gt;The &lt;i&gt;Add&lt;/i&gt; button opens a selection dialog with the list of available execution environments (contributed to the extension point &lt;i&gt;org.eclipse.jdt.launching.executionEnvironments&lt;/i&gt;). By default the list is same as those listed in the table above.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-weight: bold;"&gt;jre.compilation.profile&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The execution environment in build.properties is mentioned using the &lt;i&gt;jre.compilation.profile&lt;/i&gt; entry. It takes same value as BREE entry in manifest.MF. Thus, the entry for Java 1.4 will look like this.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;jre.compilation.profile = J2SE-1.4&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;javacSource, javacTarget and javacWarnings&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;These entries can be used to override the jre.compilation.profile entry in build.properties. A certain EE mandates a particular version for Java source and generated class file compliance. These versions can be overridden using these entries. These entries can be used without jre profile entry as well. If you just want to specify the java source version then only javacSource entry will suffice.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Looking at the table above we can see that J2SE-1.4 is Java source at version 1.3 and class files version 1.2 compliant. This can be mentioned in build.properties as&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;javacSource = 1.3&lt;br /&gt;javacTarget = 1.2&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Please note that the above two entries are not equivalent to jre profile entry for J2SE-1.4. This is because an EE is other properties too like system packages, boot delegation, assert and enum identifiers. See the schema description for the EE extension point discussed above.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Eclipse uses batch compiler to build the plug-ins. It is located inside org.eclipse.jdt.core. Since version 3.2, it is also available as separate download - ecj.jar - Eclipse Compiler for Java. The batch compiler accepts many options and a list and details can be found &lt;a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm" linkindex="24" target="_blank"&gt;here&lt;/a&gt;. The javacSource and javacTarget entries map to -source and -target options.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;javacWarnings.&amp;lt;library&amp;gt; entry is used to pass the warning options (-warn) to the compiler. The entry to suppress warnings for assert and enum identifiers in library.jar will look like this&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre style="text-align: justify;"&gt;javacWarnings.library.jar = -assertIdentifer, -enumIdentifier&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&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-8630080817528995268?l=blog.ankursharma.org' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ankursharma.org/feeds/8630080817528995268/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5914783&amp;postID=8630080817528995268" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/8630080817528995268" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5914783/posts/default/8630080817528995268" /><link rel="alternate" type="text/html" href="http://blog.ankursharma.org/2009/10/execution-environment-and-javac-entries_21.html" title="Execution Environment and javac entries" /><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/Su_x2BiuAMI/AAAAAAAACQk/r8pIfrqK64I/s72-c/manifest_overview_ee_1.JPG" height="72" width="72" /><thr:total>0</thr:total></entry></feed>

