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

<channel>
	<title>Lorenzo Bettini</title>
	<atom:link href="http://www.lorenzobettini.it/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lorenzobettini.it</link>
	<description>My Home Page</description>
	<lastBuildDate>Sun, 12 May 2013 07:21:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>The XImportSection in Xbase 2.4</title>
		<link>http://www.lorenzobettini.it/2013/01/the_ximportsection_in_xbase_2_4/</link>
		<comments>http://www.lorenzobettini.it/2013/01/the_ximportsection_in_xbase_2_4/#comments</comments>
		<pubDate>Tue, 15 Jan 2013 14:36:41 +0000</pubDate>
		<dc:creator>Lorenzo Bettini</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[xbase]]></category>
		<category><![CDATA[xtext]]></category>

		<guid isPermaLink="false">http://www.lorenzobettini.it/?p=363</guid>
		<description><![CDATA[I know that Xtext 2.4 has not been released yet, but I could not resist blogging about a very cool new feature in Xbase: improved automatic import functionalities! Actually, import functionalities were already great when using Xbase also in previous versions of Xtext, but now they provide a much better experience for the user of [...]]]></description>
				<content:encoded><![CDATA[<p>I know that Xtext 2.4 has not been released yet, but I could not resist blogging about a very cool new feature in Xbase: improved automatic <strong>import</strong> functionalities!</p>
<p>Actually, import functionalities were already great when using Xbase also in previous versions of Xtext, but now they provide a much better experience for the user of your DSL! Indeed, all the import functionalities you are used to with JDT (like automatic import insertion, and organize imports) are available also for your Xbase language; these features were already available in Xtend, and they have been ported to Xbase itself.</p>
<p>At the time of writing, you need to get the very latest updates of Xtext 2.4, using the update site <strong>http://download.eclipse.org/modeling/tmf/xtext/updates/composite/latest/</strong> .</p>
<p>Before you used to do something like</p>
<pre class="brush:plain">grammar org.xtext.example.helloinferrer.HelloInferrer with 
	org.eclipse.xtext.xbase.Xbase

generate helloInferrer "http://www.xtext.org/example/helloinferrer/HelloInferrer"

Model:
	imports += Import*
	greetings+=Greeting*;

Import:
  'import' importedNamespace = QualifiedNameWithWildcard
;

...</pre>
<p>Now, you can use in your grammar the new Xbase rule: <strong>XImportSection</strong>:</p>
<pre class="brush:plain">grammar org.xtext.example.helloinferrer.HelloInferrer with 
	org.eclipse.xtext.xbase.Xbase

generate helloInferrer "http://www.xtext.org/example/helloinferrer/HelloInferrer"

Model:
	importSection=XImportSection?
	greetings+=Greeting*;

...</pre>
<p>In this post I&#8217;m reusing some experiments you can find here (<a href="https://github.com/LorenzoBettini/Xtext2-experiments" target="_blank">https://github.com/LorenzoBettini/Xtext2-experiments</a>, I had blogged about these experiments in <a href="http://www.rcp-vision.com/?cat=67&amp;lang=en" target="_blank">previous posts</a>).</p>
<p>If you now rerun the MWE2 generator, and make sure you merge the <em>plugin.xml_gen</em> with <em>plugin.xml</em> in the .ui project, your editor will provide some interesting features for free (if you use my examples, you can find a project wizard &#8220;New Project&#8221; =&gt; &#8220;Xtext&#8221; =&gt; &#8220;HelloInferrer Project&#8221;):</p>
<p>Imports with wildcards are deprecated:</p>
<p><a href="http://www.lorenzobettini.it/2013/01/the_ximportsection_in_xbase_2_4/use_of_wildcards_deprecated/" rel="attachment wp-att-365"><img class="aligncenter size-full wp-image-365" alt="use_of_wildcards_deprecated" src="http://www.lorenzobettini.it/wp-content/uploads/2013/01/use_of_wildcards_deprecated.png" width="1024" height="766" /></a></p>
<p>You now have the context menu &#8220;<strong>Organize Imports</strong>&#8221; (Shift + Control + O); try that one in the presence of such deprecation warning and imports are organized for you:</p>
<p><a href="http://www.lorenzobettini.it/2013/01/the_ximportsection_in_xbase_2_4/after_organize_imports/" rel="attachment wp-att-366"><img class="aligncenter size-full wp-image-366" alt="after_organize_imports" src="http://www.lorenzobettini.it/wp-content/uploads/2013/01/after_organize_imports.png" width="1024" height="766" /></a></p>
<p>Similarly, unused imports are reported as warnings:</p>
<p><a href="http://www.lorenzobettini.it/2013/01/the_ximportsection_in_xbase_2_4/imports_never_used/" rel="attachment wp-att-367"><img class="aligncenter size-full wp-image-367" alt="imports_never_used" src="http://www.lorenzobettini.it/wp-content/uploads/2013/01/imports_never_used.png" width="1024" height="766" /></a></p>
<p>Again, use &#8220;Organize Imports&#8221; to fix that!</p>
<p>The new feature I like most is the automatic insertion of imports! (just like in JDT and Xtend): try to get content assist for a Java type, for instance,</p>
<p><a href="http://www.lorenzobettini.it/2013/01/the_ximportsection_in_xbase_2_4/code_completion/" rel="attachment wp-att-368"><img class="aligncenter size-full wp-image-368" alt="code_completion" src="http://www.lorenzobettini.it/wp-content/uploads/2013/01/code_completion.png" width="1026" height="767" /></a></p>
<p>Accept a proposal and the import will be automatically inserted (instead of the fully qualified name):</p>
<p><a href="http://www.lorenzobettini.it/2013/01/the_ximportsection_in_xbase_2_4/code_completion2/" rel="attachment wp-att-369"><img class="aligncenter size-full wp-image-369" alt="code_completion2" src="http://www.lorenzobettini.it/wp-content/uploads/2013/01/code_completion2.png" width="1024" height="766" /></a></p>
<p>Xtext rocks! <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lorenzobettini.it/2013/01/the_ximportsection_in_xbase_2_4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building an Eclipse RCP Product with Buckminster</title>
		<link>http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/</link>
		<comments>http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/#comments</comments>
		<pubDate>Tue, 08 Jan 2013 22:20:13 +0000</pubDate>
		<dc:creator>Lorenzo Bettini</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[buckminster]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[p2]]></category>
		<category><![CDATA[RCP]]></category>

		<guid isPermaLink="false">http://www.lorenzobettini.it/?p=237</guid>
		<description><![CDATA[Revision History 9 May 2013 Updated listings to reflect the git repository sources. Put a tip on using a mirror aggregated with b3. In this tutorial I&#8217;ll show how to use Buckminster to build an Eclipse RCP Product, both in the IDE and headlessly (with ant). The application I&#8217;m building is the standard Eclipse Mail [...]]]></description>
				<content:encoded><![CDATA[<table summary="Revision History">
<tbody>
<tr>
<th colspan="4" align="left" valign="top"><b>Revision History</b></th>
</tr>
<tr>
<td align="left">9 May 2013</td>
<td align="left">Updated listings to reflect the git repository sources. Put a tip on using a mirror aggregated with b3.</td>
</tr>
</tbody>
</table>
<p>In this tutorial I&#8217;ll show how to use Buckminster to build an Eclipse RCP Product, both in the IDE and headlessly (with ant). The application I&#8217;m building is the standard Eclipse Mail RCP example with the addition of Self-Update functionalities.</p>
<p>We will build two products configured with update sites; the first one will rely on standard Eclipse repositories for required features, while the second one will rely only on our own repositories.</p>
<p>The sources of this example can be found at <a href="http://sourceforge.net/p/buckyexamples/bucky-mail-rcp/?branch=ref%2Fmaster" target="_blank">http://sourceforge.net/p/buckyexamples/bucky-mail-rcp/?branch=ref%2Fmaster.</a></p>
<h1>Motivations</h1>
<p>There are some nice tutorials about building Eclipse RCP Products with Buckminster (such as, e.g., <a href="http://www.ralfebert.de/blog/eclipsercp/rcp_builds/" target="_blank">Ralf Ebert</a>&#8216;s, <a href="http://codeandme.blogspot.it/2011/09/buckminster-rcp-build.html" target="_blank">Code and Me</a>&#8216;s, and <a href="http://wiki.eclipse.org/Building_an_RCP_application_with_hudson_%28Buckminster%29" target="_blank">wiki pages</a>).</p>
<p>However, I found these pages out-of-date in the sense that they use Indigo or Helios for building products; with Juno things are more complicated not due to Buckminster, but to new dependencies in Juno Eclipse features and bundles (for instance, org.eclipse.rcp internally depends on <strong>org.eclipse.emf.common</strong> and <strong>org.eclipse.emf.ecore</strong>) even if you do not use the new e4 application model; see for instance the dependencies in the screenshot</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/12/emf_dependency.png"><img class="aligncenter size-full wp-image-238" title="emf_dependency" alt="" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/emf_dependency.png" width="635" height="326" /></a></p>
<p>This means that you will have to deal with that in the target platform definition.</p>
<p>Furthermore, due to the way p2 repositories are built, you will soon get the dreaded &#8220;java returned 13&#8243; when using Buckminster to build an Eclipse product (which relies on the p2 director actually), due to the above mentioned dependencies. Even for simple products like the Eclipse RCP Mail application&#8230; you can imagine when products are bigger <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  By the way, you get similar problems even if you try to use the standard <em>Eclipse Product export wizard</em>.</p>
<p>In this post I&#8217;ll detail my experience in dealing with these problems by using Buckminster and Eclipse standard mechanisms for dealing (automatically) with dependencies; similarly, I&#8217;m not using standard Target platform definitions (which again have problems if you want to build for multiple architectures), but I&#8217;m using the nice Buckminster materialization features for materializing the target platform. The same techniques can be used with much more complex products to build them without problems due to dependencies and required software.</p>
<p>The tutorial is quite long since I&#8217;ll also try to provide some explanations to the problems you have when building products (in general I guess) &#8211; although the explanations are not necessary, I think they might be useful to understand things better about features, bundles, products and p2.</p>
<h1>Materializing the Target Platform</h1>
<p>First of all, you need to install Buckminster in your Eclipse, using this repository</p>
<p><strong>http://download.eclipse.org/tools/buckminster/updates-4.2</strong></p>
<p>you will need only the features shown in the screenshot</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/12/install-buckminster-in-the-IDE.png"><img class="aligncenter size-full wp-image-241" title="install-buckminster-in-the-IDE" alt="" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/install-buckminster-in-the-IDE.png" width="727" height="737" /></a></p>
<p>Then, we need to create a project which with all our releng functionalities; this will be a general Eclipse project, with a Buckminster Component Specification (CSPEC); this CSPEC basically declares the target platform features as dependencies. The reasons why I&#8217;m not using a standard Eclipse Target platform definition can be found in my <a title="Materializing and Provisioning your Target Platform as local p2 site with Buckminster" href="http://www.lorenzobettini.it/2012/11/materializing-and-provisioning-your-target-platform-as-local-p2-site-with-buckminster/" target="_blank">other post</a>, in the section &#8220;Why not the Target Editor?&#8221;; they can be summarized with the fact that, with this technique you can get a target platform for building for multiple platforms and with all the required software automatically.</p>
<p>We call this releng project <strong>org.eclipse.buckminster.examples.rcp.mail.releng</strong> and the <strong>buckminster.cspec</strong> looks like this (we will enrich this cspec later to perform headless builds):</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;cs:cspec xmlns:cs="http://www.eclipse.org/buckminster/CSpec-1.0" 
         name="org.eclipse.buckminster.examples.rcp.mail.releng" 
         componentType="buckminster" version="1.0.0"&gt;
    &lt;cs:dependencies&gt;
        &lt;cs:dependency name="org.eclipse.equinox.executable" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.equinox.p2.user.ui" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.rcp" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.rcp.source" componentType="eclipse.feature"/&gt;
    &lt;/cs:dependencies&gt;
&lt;/cs:cspec&gt;</pre>
<p>We basically want a target paltform with <strong>org.eclipse.rcp</strong> (and its sources, since they are useful when developing), <strong>org.eclipse.equinox.executable</strong> to build executable applications, and <strong>org.eclipse.equinox.p2.user.ui</strong> to enable the p2 update manager in our RCP application.</p>
<p>Then, we define a Resource Map (RMAP) which tells Buckminster where to find these dependencies; we will use of course official Eclipse p2 site repositories for these dependencies; we store this map into a file <strong>build.rmap</strong>:</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rm:rmap xmlns:rm="http://www.eclipse.org/buckminster/RMap-1.0"
	xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0"&gt;
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rm:rmap xmlns:rm="http://www.eclipse.org/buckminster/RMap-1.0"
	xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0"&gt;

	&lt;rm:property key="projects.location" value="${workspace.root}" /&gt;
	&lt;rm:property key="eclipse.download" value="http://download.eclipse.org" /&gt;
	&lt;rm:property key="eclipse.target.platform" value="${eclipse.download}/releases/juno" /&gt;

	&lt;rm:locator pattern="^org\.eclipse\.buckminster\.examples\.rcp\.mail(?:\..+)?$"
		searchPathRef="localsources" /&gt;

	&lt;rm:locator searchPathRef="eclipse" /&gt;

	&lt;rm:searchPath name="eclipse"&gt;
		&lt;rm:provider componentTypes="eclipse.feature,osgi.bundle"
			readerType="p2" source="false" mutable="false"&gt;
			&lt;rm:property key="buckminster.source" value="false" /&gt;
			&lt;rm:property key="buckminster.mutable" value="false" /&gt;
			&lt;rm:uri format="{0}"&gt;
				&lt;bc:propertyRef key="eclipse.target.platform" /&gt;
			&lt;/rm:uri&gt;
		&lt;/rm:provider&gt;
	&lt;/rm:searchPath&gt;
	&lt;rm:searchPath name="localsources"&gt;
		&lt;rm:provider componentTypes="eclipse.feature,osgi.bundle,buckminster"
			readerType="local" mutable="false"&gt;
			&lt;rm:uri format="{0}/{1}"&gt;
				&lt;bc:propertyRef key="projects.location" /&gt;
				&lt;bc:propertyRef key="buckminster.component" /&gt;
			&lt;/rm:uri&gt;
		&lt;/rm:provider&gt;
	&lt;/rm:searchPath&gt;

&lt;/rm:rmap&gt;</pre>
<p>This basically tells Buckminster to take</p>
<ul>
<li>all the components with name which starts with <em>org.eclipse.buckminster.examples.rcp.mail</em> (which will be used for all our bundles and features in this example) from the local hard disk</li>
<li>and everything else from the main Juno releases repository.</li>
</ul>
<p>Now, we define a Component Query (CQUERY) which materializes this very component; when Buckminster resolves a component if first, transitively, resolves all its dependencies; thus resolving our releng component corresponds to materialize our target platform. The <strong>build.cquery</strong> looks like this (note the reference to the build.rmap we wrote above):</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" 
            resourceMap="build.rmap"&gt;
    &lt;cq:rootRequest name="org.eclipse.buckminster.examples.rcp.mail.releng" componentType="buckminster"/&gt;
    &lt;cq:property key="target.arch" value="*"/&gt;
    &lt;cq:property key="target.os" value="*"/&gt;
    &lt;cq:property key="target.ws" value="*"/&gt;
    &lt;cq:advisorNode namePattern=".*" useTargetPlatform="false"/&gt;
&lt;/cq:componentQuery&gt;</pre>
<p>Before starting the materialization, it is better to start from a plain and empty target platform (just like you do with a standard target definition with the target editor); one nice way of doing this, as <a href="http://wiki.eclipse.org/Extending_or_Contributing_to_Buckminster#Prepare_an_empty_target_platform" target="_blank">illustrated also here</a>, is</p>
<ol>
<li>Create a new general project named <strong>TP</strong> (or some name of your preference) in the workspace</li>
<li>In<em> “Window”</em> =&gt; <em>“Preferences” =&gt;</em> <em>“Plug-in Development” =&gt;</em> <em>“Target Platform”<br />
</em>Select Add…</li>
<li>Start with an empty target definition</li>
<li>Enter <strong>TP</strong> in the <em>Name:</em> field (or some name of your preference)</li>
<li>Add a directory</li>
<li>Click on <em>“Variables…” s</em>croll down and select <em>“workspace_loc”</em> and then type <strong>TP</strong> in the <em>Argument:</em> field</li>
<li>Press &#8220;<em>Ok</em>&#8221; and &#8220;<em>Finish</em>&#8221; twice, and</li>
<li>set this as the active platform</li>
</ol>
<p>With the build.cquery opened in Component Query Editor, we can start the materialization by pressing &#8220;Resolve and Materialize&#8221;</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/12/build-cquery-materialize.png"><img class="aligncenter size-full wp-image-245" title="build-cquery-materialize" alt="" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/build-cquery-materialize.png" width="827" height="579" /></a></p>
<p>This might take some time depending on your Network connection.</p>
<p>(TIP: you may want to aggregate a local mirror using <a href="http://www.eclipse.org/b3/" target="_blank">Eclipse b3</a>; the aggregator file for the mirror is in <strong>aggregator/target-platform-mirror.b3aggr</strong> ; you can aggregate the mirror from Eclipse, after installing b3, or headlessly using the target &#8220;b3_aggregation&#8221; of build.ant. Then, you can use the <strong>build-local.cquery</strong> you find in the releng project in the git repository; see also the README.txt file you find in the releng project).</p>
<p>When the materialization finishes you find the target platform in the TP project in your workspace (if you followed the instructions above).</p>
<p><strong>TIP:</strong> after a materialization of the target platform, it might be better to restart Eclipse, since sometimes Buckminster tends not to catch up correctly with the new target platform.</p>
<h1>Creating our mail projects</h1>
<p>We now create the bundle for our RCP application, using the Eclipse wizard and the <em>RCP Mail template</em>; this part is standard so I will not detail it here: <strong>org.eclipse.buckminster.examples.rcp.mail.bundle</strong> contains the RCP Mail bundle created with the wizard, and appropriately modified in order to enable the same update UI functionalities used in the SDK inside our RCP app (this is illustrated in <a href="http://wiki.eclipse.org/Equinox/p2/Adding_Self-Update_to_an_RCP_Application#Reusing_the_Eclipse_SDK_UI_in_its_entirety" target="_blank">this wiki page</a>, the modifications to <em>ApplicationWorkbenchWindowAdvisor</em> and <em>ApplicationActionBarAdvisor</em> are marked in the code with &#8216;XXX&#8217; task tags). We also create <strong>org.eclipse.buckminster.examples.rcp.mail.optional.bundle</strong> which contains an optional menu (and toolbar button).</p>
<p>We then create the feature project <strong>org.eclipse.buckminster.examples.rcp.mail.product.feature</strong> which contains our product definition:</p>
<ol>
<li>In this project we create a new product definition, <strong>mail.product</strong>, based on features (make sure that there is no &lt;plugins&gt; section in your feature-based product: open mail.product with the Text editor and delete the &lt;plugins&gt; section if found)</li>
<li>Give the product an ID (which must be different from the ID of the containing feature), <em>org.eclipse.buckminster.examples.rcp.mail.product</em></li>
<li>In the Product definition section choose the Product <em>org.eclipse.buckminster.examples.rcp.mail.bundle.product</em> from Application <em>org.eclipse.buckminster.examples.rcp.mail.bundle.application</em> (don&#8217;t get confused by the term &#8216;product&#8217; which is overloaded in this context: it is used both for the org.eclipse.core.runtime.products extension point, and for the product configuration which will be used to create the final product <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ol>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mail-product.png"><img class="aligncenter size-full wp-image-248" title="mail-product" alt="" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mail-product.png" width="825" height="579" /></a></p>
<p>In the Dependencies tab, add as the only dependency the feature we are in, <strong>org.eclipse.buckminster.examples.rcp.mail.product.feature</strong>. (We also do some branding and customizations, but they&#8217;re not interesting in this context).</p>
<p>Now, we have to &#8220;fill&#8221; the <strong>feature.xml</strong> of <strong>org.eclipse.buckminster.examples.rcp.mail.product.feature</strong>, keeping in mind that what&#8217;s in this feature will make our final product. Thus we add:</p>
<ul>
<li><strong>org.eclipse.buckminster.examples.rcp.mail.bundle</strong>, in the plug-in section, for our Mail RCP application</li>
<li><strong>org.eclipse.rcp</strong>, as included feature, required to build an RCP product</li>
<li><strong>org.eclipse.equinox.p2.user.ui</strong>, as included feature, to enable the p2 update manager in our RCP application</li>
<li>Note that <strong>org.eclipse.buckminster.examples.rcp.mail.optional.bundle</strong> is <strong>NOT</strong> part of product.feature, since this is meant to represent an optional functionality that can be installed later</li>
</ul>
<p><a href="http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/product-feature-plugins/" rel="attachment wp-att-314"><img class="aligncenter size-full wp-image-314" alt="product.feature.plugins" src="http://www.lorenzobettini.it/wp-content/uploads/2013/01/product.feature.plugins.png" width="545" height="344" /></a> <a href="http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/product-feature-features/" rel="attachment wp-att-315"><img class="aligncenter size-full wp-image-315" alt="product.feature.features" src="http://www.lorenzobettini.it/wp-content/uploads/2013/01/product.feature.features.png" width="527" height="346" /></a></p>
<p>We can create a launch configuration (Eclipse Application) by selecting our product, and then select only our feature <strong>org.eclipse.buckminster.examples.rcp.mail.product.feature</strong> and then press &#8220;Select Required&#8221;.</p>
<p><a href="http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/mail-product-launch1/" rel="attachment wp-att-271"><img class="aligncenter size-full wp-image-271" alt="mail-product-launch1" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mail-product-launch1.png" width="1075" height="740" /></a> <a href="http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/mail-product-launch2/" rel="attachment wp-att-272"><img class="aligncenter size-full wp-image-272" alt="mail-product-launch2" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mail-product-launch2.png" width="1075" height="740" /></a></p>
<p>The mail application should like this (note the Preferences menu and the Update functionalities)</p>
<p><a href="http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/mail-application-running/" rel="attachment wp-att-275"><img class="aligncenter size-full wp-image-275" alt="mail-application-running" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mail-application-running.png" width="1023" height="711" /></a></p>
<p>In <strong>org.eclipse.buckminster.examples.rcp.mail.product.feature</strong> we also add a touchpoint advice file <strong>p2.inf</strong> (See <a title="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_actions_touchpoints.html" href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_actions_touchpoints.html" target="_blank" rel="nofollow">the online help</a> for more details) to configure the repositories (update sites) that should initially be present in the application:</p>
<pre class="brush:shell">instructions.configure=org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/updates/,type:0,name:Buckminster Mail RCP Example Site,enabled:true); \
  org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/updates/,type:1,name:Buckminster Mail RCP Example Site,enabled:true); \
  org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/releases/juno/,type:0,name:Juno,enabled:true); \
  org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/releases/juno/,type:1,name:Juno,enabled:true); \
  org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/tools/orbit/downloads/drops/R20120526062928/repository/,type:0,name:Orbit,enabled:true); \
  org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/tools/orbit/downloads/drops/R20120526062928/repository/,type:1,name:Orbit,enabled:true);</pre>
<p>We add the Juno release repository, the Orbit repository (not required, but just as a demonstration), and the repository on Sourceforge, where we deploy our p2 repository for our application (see the next section).</p>
<p>This file will be used during product build (see later).</p>
<h1>Build a p2 Repository for our application</h1>
<p>To build an update site (in the new terminology, &#8220;p2 repository&#8221;) for our product feature, we create a new feature project, <strong>org.eclipse.buckminster.examples.rcp.mail.product.site</strong>, and in the <em>feature.xml</em> we include our product feature (<strong>org.eclipse.buckminster.examples.rcp.mail.product.feature</strong>); we also create <strong>org.eclipse.buckminster.examples.rcp.mail.optional.feature</strong> (which includes <strong>org.eclipse.buckminster.examples.rcp.mail.optional.bundle</strong>) and we also include this feature in <strong>product.site</strong>; this way, once the repository is deployed, the optional functionalities can be installed in an existing mail application.</p>
<p>Since we&#8217;d like to have a category for our features, we add a <strong>category.xml</strong> file like the following one:</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;site&gt;
   &lt;feature id="org.eclipse.buckminster.examples.rcp.mail.product.feature"&gt;
      &lt;category name="mail.category"/&gt;
   &lt;/feature&gt;
   &lt;feature id="org.eclipse.buckminster.examples.rcp.mail.optional.feature"&gt;
      &lt;category name="mail.category"/&gt;
   &lt;/feature&gt;
   &lt;category-def name="mail.category" label="Buckminster Mail RCP Example"&gt;
      &lt;description&gt;
         Buckminster Mail RCP Example
      &lt;/description&gt;
   &lt;/category-def&gt;
&lt;/site&gt;</pre>
<p><strong>Remember</strong>: when building the site.p2 on a feature project with Buckminster, you will build a p2 repository NOT for the very feature, but for the included features.</p>
<p>Before creating the repository we use a properties file like the following to specify additional parameters for the repository creation:</p>
<pre class="brush:shell"># This can be used only to build a site.p2, not a product
# since we can only build a site for multiple architectures

# Where all the output should go
buckminster.output.root=${user.home}/tmp/mail/buckminster.output
# Where the temp files should go
buckminster.temp.root=${user.home}/tmp/mail/buckminster.temp
# How .qualifier in versions should be replaced
# get the build timestamp instead of time of last modified resource
qualifier.replacement.*=generator:lastModified
generator.lastModified.format='v'yyyyMMdd-HHmm

# alternative: get the build timestamp instead of time of last modified resource
# qualifier.replacement.*=generator:buildTimestamp
# generator.buildTimestamp.format='v'yyyyMMdd-HHmm

# don't build source bundles and features
cbi.include.source=false

target.os=*
target.ws=*
target.arch=*</pre>
<p>these properties specify:</p>
<ul>
<li>the output directory</li>
<li>how the .qualifier in bundles and features version is replaced (in this example we replace it with a timestamp of the latest changed resource, with some formatting)</li>
<li>by default, Buckminster will generate also source features and source bundles when creating the p2 repository, but for a product it might not make sense to make sources installable, thus we disable the generation of sources</li>
<li>we create a repository for all supported architectures and operating systems</li>
</ul>
<p>We can now run on this project the <em>site.p2</em> Buckminster action: <em>right click on the feature project =&gt; Buckminster =&gt; Invoke Action&#8230;</em>, select the properties file above and select site.p2.</p>
<p><a href="http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/site-p2-action/" rel="attachment wp-att-334"><img class="aligncenter size-full wp-image-334" alt="site.p2.action" src="http://www.lorenzobettini.it/wp-content/uploads/2013/01/site.p2.action.png" width="786" height="562" /></a></p>
<p>The p2 repository will be generated (if you used the above properties file) into <em>&lt;your home&gt;/tmp/mail/buckminster.output/org.eclipse.buckminster.examples.rcp.mail.product.site_1.0.0-eclipse.feature/site.p2</em> ; you can test your newly created repository by using the <em>Install New Software</em> dialog in a running Eclipse, specifying the complete local path of the created site.p2</p>
<p><a href="http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/produc-site-contents/" rel="attachment wp-att-320"><img class="aligncenter size-full wp-image-320" alt="produc.site.contents" src="http://www.lorenzobettini.it/wp-content/uploads/2013/01/produc.site_.contents.png" width="745" height="743" /></a></p>
<p>The generated repository can then deployed to a remote site (in our example we deploy it to Sourceforge where we host also this tutorial code: <em>http://master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/updates</em> (if you want to browse it, use <a href="http://sourceforge.net/projects/buckyexamples/files/bucky-mail-rcp/updates" target="_blank">http://sourceforge.net/projects/buckyexamples/files/bucky-mail-rcp/updates/</a>).</p>
<h1>Building the product</h1>
<p>Buckminster does not provide direct means to build a product, since it relies on the standard Eclipse <strong>org.eclipse.equinox.p2.director</strong> application, you just need to set up a few more files, with pretty standard contents.</p>
<h2>Small digression about the p2 director</h2>
<p>I think it might be worthwhile to know a few basic things about how the <a href="http://help.eclipse.org/juno/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_director.html" target="_blank">Eclipse p2 director application</a> works to understand what follows (you can also using it for doing cool things like <a title="Installing Eclipse Features via the command line" href="http://www.lorenzobettini.it/2012/10/installing-eclipse-features-via-the-command-line/" target="_blank">installing features into your eclipse installations from the command line</a>).</p>
<p>If you provide the director application with</p>
<ul>
<li>a repository (or a list of repositories separated by commas),</li>
<li>the ID of an installable unit,</li>
<li>a profile,</li>
<li>the architecture details</li>
<li>and a destination folder,</li>
</ul>
<p>the director will create/install (provision) in that destination folder the requested product.</p>
<p>For instance, try to run the following command, replacing the path of your eclipse executable (in Windows you should use the command line version, eclipsec.exe), the destination path and the architecture details for your system</p>
<pre class="brush:shell">&lt;/path/to/your/eclipse/executable&gt; -noSplash
   -application org.eclipse.equinox.p2.director
   -repository http://download.eclipse.org/releases/kepler
   -installIU org.eclipse.sdk.ide
   -tag InitialState
   -destination &lt;destination path&gt;
   -profile SDKProfile
   -profileProperties org.eclipse.update.install.features=true
   -p2.os linux
   -p2.ws gtk
   -p2.arch x86_64</pre>
<p>and you&#8217;ll get a brand new Eclipse SDK from the Kepler site.</p>
<p>So what we will do to build our product is</p>
<ol>
<li>first create a p2 repository with <strong>all</strong> the features and bundles needed by our RCP application</li>
<li>and then run the p2 director with appropriate arguments (relying on the p2 repository we created).</li>
</ol>
<h2>Setting up a project for building the product</h2>
<p>Since we have already a feature project for building the p2 repository, <strong>org.eclipse.buckminster.examples.rcp.mail.product.site</strong>, we will use it also for building the product.</p>
<p>Inside this project we create a folder (<strong>build</strong>) with the following <strong>product.ant</strong> file which calls the <em>p2.director</em> ant task (in the following we will provide also some explanations):</p>
<pre class="brush:xml">&lt;project name="Product packaging"&gt;

    &lt;target name="create.product"&gt;

        &lt;property name="product.install.directory" location="${sp:destination}" /&gt;
        &lt;delete dir="${product.install.directory}" includeemptydirs="true" failonerror="false" /&gt;
        &lt;mkdir dir="${product.install.directory}" /&gt;
        &lt;buckminster.valuepath value="${fs:repositories}" id="repositories.valuepath" /&gt;
        &lt;pathconvert 
                pathsep="," 
                targetos="unix"
                property="product.repositories" 
                refid="repositories.valuepath"&gt;
            &lt;map from="" to="file:/" /&gt;
        &lt;/pathconvert&gt;
        &lt;echoproperties /&gt;
        &lt;echo message="Repositories: ${product.repositories}" /&gt;
        &lt;echo message="Install Dir : ${product.install.directory}" /&gt;

        &lt;p2.director 
            destination="${product.install.directory}" 
            metadataRepository="${product.repositories}" 
            artifactRepository="${product.repositories}" 
            profile="${profile}" 
            arch="${target.arch}" 
            os="${target.os}" 
            ws="${target.ws}" 
            roaming="true" 
            extraarguments="-profileProperties org.eclipse.update.install.features=true"&gt;
            &lt;iu id="${iu}" /&gt;
        &lt;/p2.director&gt;
    &lt;/target&gt;
&lt;/project&gt;</pre>
<p>For each plugin and feature projects Buckminster automatically infers a Component Specification (you can view that by <em>right clicking on the project =&gt; Buckminster =&gt; View CSpec&#8230;</em>) with its standard actions; we must extend this specification with additional actions to create the product, creating inside our feature project a <strong>buckminster.cspex</strong> file (note cspex, with the final <em>x</em> instead of <em>c</em>):</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;cspecExtension xmlns:com="http://www.eclipse.org/buckminster/Common-1.0"
                    xmlns="http://www.eclipse.org/buckminster/CSpec-1.0"&gt;
    &lt;actions&gt;
        &lt;public name="create.product" actor="ant"&gt;
            &lt;actorProperties&gt;
                &lt;property key="buildFile" value="build/product.ant" /&gt;
                &lt;property key="targets" value="create.product" /&gt;
            &lt;/actorProperties&gt;
            &lt;properties&gt;
                &lt;property key="profile" value="BuckyRcpMailProfile" /&gt;
                &lt;property key="iu" value="org.eclipse.buckminster.examples.rcp.mail.product" /&gt;
            &lt;/properties&gt;
            &lt;prerequisites alias="repositories"&gt;
                &lt;attribute name="site.p2" /&gt;
            &lt;/prerequisites&gt;
            &lt;products alias="destination" base="${buckminster.output}"&gt;
                &lt;path path="BuckyRcpMail.${target.ws}.${target.os}.${target.arch}/" /&gt;
            &lt;/products&gt;
        &lt;/public&gt;
        &lt;public name="create.product.zip" actor="ant"&gt;
            &lt;actorProperties&gt;
                &lt;property key="buildFileId" value="buckminster.pdetasks" /&gt;
                &lt;property key="targets" value="create.zip" /&gt;
            &lt;/actorProperties&gt;
            &lt;prerequisites alias="action.requirements"&gt;
                &lt;attribute name="create.product" /&gt;
            &lt;/prerequisites&gt;
            &lt;products alias="action.output" base="${buckminster.output}"&gt;
                &lt;path path="BuckyRcpMail.${target.ws}.${target.os}.${target.arch}.zip" /&gt;
            &lt;/products&gt;
        &lt;/public&gt;
    &lt;/actions&gt;
&lt;/cspecExtension&gt;</pre>
<p>This cspex extends the default actions of our feature projects with the new actions <em>create.product</em> and <em>create.product.zip</em>; note that the latter depends on the former and simply creates a zip of the directory containing the generated product. The <em>create.product</em> action calls the ant task with the same name in product.ant passing the profile and the IU of our product configuration, i.e., the one we chose above during the creation of product configuration, <strong>org.eclipse.buckminster.examples.rcp.mail.product</strong> in our example (this is the value we inserted for the field ID in the &#8220;General Information&#8221; section of the product configuration editor).</p>
<p>The action <em>create.product</em> has as prerequisite the (standard Buckminster) action <em>site.p2</em> (since the component name is not specified, the component we are in is assumed); the alias of site.p2 action, <em>repositories</em>, will be passed to the product.ant; indeed, what is being passed to the ant file is the path resulting from site.p2, in the shape of <em>fs:repositories</em>, which is a <em>path group</em> (you can read more in the <a href="http://www.eclipse.org/downloads/download.php?file=/tools/buckminster/doc/BuckyBook.pdf" target="_blank">Eclipse Buckminster, The Definitive Guide</a>, Section &#8220;Access to prerequisites and product locations&#8221; &#8211; in product.ant, we extract the actual path and do some conversion for Windows backslashes so that we obtain a valid URL for the director). We also pass a name for the profile of our product, the operating system details and the destination.</p>
<p>Summarizing, the steps to create the product with the p2 director are:</p>
<ol>
<li>create a p2 repository for this feature (actually, for the features and bundles included in this feature)</li>
<li>run the director application specifying our product identifier as the installable unit, and the above created p2 repository (together with the other parameters for the director)</li>
</ol>
<p>Before running the create.product action in the IDE we must specify a property file (similar to the one we used for mail.site project): creating the product will not work with <code>*</code> for <code>os/ws/arch</code>, because you can create the product only for a specific platform at time. For instance, this is the one I use for my Linux system</p>
<pre class="brush:shell"># Where all the output should go
buckminster.output.root=${user.home}/tmp/mail/buckminster.output
# Where the temp files should go
buckminster.temp.root=${user.home}/tmp/mail/buckminster.temp
# How .qualifier in versions should be replaced
qualifier.replacement.*=generator:lastModified
generator.lastModified.format='v'yyyyMMdd-HHmm

# don't build source bundles and features
cbi.include.source=false

target.os=linux
target.ws=gtk
target.arch=x86_64</pre>
<p>In the sources of this tutorial, you can find <a href="https://sourceforge.net/p/buckyexamples/bucky-mail-rcp/ci/master/tree/org.eclipse.buckminster.examples.rcp.mail.product.site/configurations/" target="_blank">property files for most common configurations</a>.</p>
<p>You can then right click on <strong>org.eclipse.buckminster.examples.rcp.mail.product.site</strong>, select the <em>create.product</em> action, and the property file for the architecture you want to build your product for</p>
<p><a href="http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/create-product-action/" rel="attachment wp-att-290"><img class="aligncenter size-full wp-image-290" alt="create.product.action" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/create.product.action.png" width="762" height="554" /></a></p>
<p>In the console view you can see that first the site.p2 for the current feature project is created and then the director is called to install the product&#8230; but&#8230; you get this error:</p>
<pre class="brush:shell">[ant] Cannot complete the install because one or more required items could not be found.
[ant] Software being installed: Mail RCP Product 1.0.0.qualifier 
(org.eclipse.buckminster.examples.rcp.mail.product 1.0.0.qualifier)
[ant] Missing requirement: 
Eclipse e4 Rich Client Platform 1.1.0.v20120521-2329-8yFTIGIbGGduEZ6-7-jLx41nXj 
(org.eclipse.e4.rcp.feature.group 1.1.0.v20120521-2329-8yFTIGIbGGduEZ6-7-jLx41nXj) 
requires 'org.eclipse.emf.common.feature.group [2.7.0,3.0.0)' 
but it could not be found
[ant] Cannot satisfy dependency:
[ant] A problem occured while invoking the director.</pre>
<p>To understand what is going on, let&#8217;s do another digression</p>
<h2>Small digression about the p2 publisher</h2>
<p>When a p2 repository is generated for a feature, the repository will contain:</p>
<ul>
<li>the included features (the tab <em>&#8220;Included Features&#8221;</em> in the feature editor)</li>
<li>the plug-ins and fragments (the tab <em>&#8220;Plug-ins&#8221;</em> in the feature editor)</li>
<li>but <strong>NOT</strong> the <em>required software</em> (required features and required bundles)</li>
</ul>
<p>The required plug-ins and features can be made explicit in the <em>&#8220;Dependencies&#8221;</em> tab in the feature editor; even if they are not specified, the dependencies are computed automatically and they are still needed by the director when the product is installed.</p>
<p>Since these dependencies will not be part of the generated p2 repository, we get an error when installing the product&#8230;</p>
<h2>Back to our product building</h2>
<p>In our case we get an error about the feature <em>org.eclipse.emf.common</em> which is required by <em>org.eclipse.e4.rcp</em>. The feature <em>org.eclipse.rcp</em> (which is included in our product.feature) INCLUDES<em> org.eclipse.e4.rcp</em>, but <em>org.eclipse.e4.rcp</em> REQUIRES (not includes) <em>org.eclipse.emf.common</em> (and also <em>org.eclipse.emf.ecore</em>):</p>
<p><a href="http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/e4-rcp-deps/" rel="attachment wp-att-291"><img class="aligncenter size-full wp-image-291" alt="e4.rcp.deps" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/e4.rcp_.deps_.png" width="706" height="375" /></a></p>
<p>Thus, <em>org.eclipse.emf.common</em> will be not present in the generated p2 repository and the installation fails. With Indigo, this problem was not experienced, since <em>org.eclipse.rcp</em> was self-contained (and indeed, <a href="http://www.ralfebert.de/blog/eclipsercp/rcp_builds/" target="_blank">Ralf Ebert&#8217;s tutorial did not experience this problem</a>). You would experience similar problems if your product is more involved than the simple Mail example application and requires more features and bundles: in that case the dependencies are much more.</p>
<p>In the following, I&#8217;ll describe 3 possible solutions to deal with that. The third one is (in my humble opinion) the best one, and is the one I&#8217;ll use in this tutorial.</p>
<h2>Pass additional repositories to the director</h2>
<p>We can pass the director (in our case we must modify the product.ant) additional p2 repositories, i.e., the ones we used in the RMAP, that we used to materialize the target platform (in our example the Juno release repository and the Orbit repository).</p>
<p>The drawbacks of this approach is that you depend on remote sites each time you build the products (you can use local mirrors though) and most of all, you do not have control on what is taken from which repository, i.e., you do not have the same control you had when defining the target platform; thus, you risk to build a product which does not use the same things of your target platform. This is especially true when building complex products with a complex target platform taking different software from several different repositories.</p>
<h2>Fix the feature manually with missing requirements</h2>
<p>You can add as included features into your <strong>product.site</strong> feature project (NOT the product.feature project) the missing features one by one; this way, when the site.p2 is built the required features will go there as well, and the director will find them when installing the product.</p>
<p>There will surely be more than one missing feature, and the director will issue an error only on the first missing feature; thus, it will take some time to include them all.</p>
<p>Furthermore, including features will not be enough: you will surely have to add also bundles (plug-ins and possible fragments) to your product.site feature. For instance, <em>org.eclipse.equinox.p2.user.ui</em> (the one we added to our product to handle update functionalities) includes the plug-in <em>org.eclipse.equinox.p2.ui.importexport</em>,</p>
<p><a href="http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/p2-user-ui-bundles/" rel="attachment wp-att-293"><img class="aligncenter size-full wp-image-293" alt="p2.user.ui.bundles" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/p2.user_.ui_.bundles.png" width="642" height="581" /></a></p>
<p>which <em>depends</em> (i.e., <em>requires</em>, not <em>includes</em>) the bundle <em>org.eclipse.ui.forms</em>,</p>
<p><a href="http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/p2-ui-importexport-deps/" rel="attachment wp-att-294"><img class="aligncenter size-full wp-image-294" alt="p2.ui.importexport.deps" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/p2.ui_.importexport.deps_.png" width="655" height="586" /></a></p>
<p>which, again, will not be part of our site.p2 unless explicitly added as a bundle!</p>
<p>Thus, it will take some time to have a site.p2 that makes the director happy <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Finally, I think that having all the dependencies hardcoded in the feature.xml makes the project highly coupled with that specific target environment (in Indigo the additional software might not even be available, in Kepler new requirements might have to be added)&#8230; why should I deal with dependencies myself?</p>
<h2>Provision your target platform as a p2 repository</h2>
<p>The idea is to have a p2 repository which contains EVERY feature and bundle of our current target platform (the one we materialized at the beginning); I had <a title="Materializing and Provisioning your Target Platform as local p2 site with Buckminster" href="http://www.lorenzobettini.it/2012/11/materializing-and-provisioning-your-target-platform-as-local-p2-site-with-buckminster/" target="_blank">blogged about a manual technique</a>, but I like to avoid manual solutions (for maintainability and portability reasons) and prefer automatic ones.</p>
<p>Indeed, all the features and bundles for your products are in your target platform (otherwise your bundles would not compile, or your product launch would not work); yes, even the ones you were not aware of, like <em>org.eclipse.emf.common</em> and <em>org.eclipse.emf.ecore</em>, since Buckminster has materialized them for you as dependencies of <em>org.eclipse.rcp</em>. We just need a way to create a p2 repository from the current target platform.</p>
<p>There is a <a href="http://help.eclipse.org/juno/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_publishingtasks.htm" target="_blank">p2 ant task</a> for this, <strong>p2.publish.featuresAndBundles</strong>, which publishes metadata for pre-existing binary features and plug-ins. All we need to do is:</p>
<ul>
<li>modify <strong>product.ant</strong> with a target which invokes p2.publish.featuresAndBundles with all the arguments, in particular, the current target platform as the source to create the p2 repository (we get its location using a Buckminster property):</li>
</ul>
<pre class="brush:xml">&lt;project name="Product packaging"&gt;

	&lt;target name="create.product"&gt;
                 ... as before ...
	&lt;/target&gt;

	&lt;target name="create.target.platform.repository"&gt;
		&lt;buckminster.targetPlatformLocation property="target.platform.location" /&gt;
		&lt;property name="target.platform.repository" value="file:/${sp:output}" /&gt;
		&lt;property name="repository.name" value="Target Platform Repository" /&gt;		
		&lt;p2.publish.featuresAndBundles 
			repository="${target.platform.repository}" 
			repositoryName="${repository.name}" 
			source="${target.platform.location}" 
			publishArtifacts="true" /&gt;
		&lt;buckminster.publishJRE metadataRepository="${target.platform.repository}" publishArtifacts="false" /&gt;
	&lt;/target&gt;
&lt;/project&gt;</pre>
<ul>
<li>add an action, <em>site.tp</em>, in buckminster.cspex that invokes the above ant target (the action could be made private, but in case you want to run it manually to do some tests we make it public); note that we give the repository of the target platform a name since we also deploy it as we will show later. Then, the action create.product will have as a prerequisite also the <em>site.tp</em> action, besides <em>site.p2</em>:</li>
</ul>
<pre class="brush:xml">&lt;public name="create.product" actor="ant"&gt;
    &lt;actorProperties&gt;
        &lt;property key="buildFile" value="build/product.ant" /&gt;
        &lt;property key="targets" value="create.product" /&gt;
    &lt;/actorProperties&gt;
    &lt;properties&gt;
        &lt;property key="profile" value="BuckyRcpMailProfile" /&gt;
        &lt;property key="iu"
            value="org.eclipse.buckminster.examples.rcp.mail.product" /&gt;
    &lt;/properties&gt;
    &lt;prerequisites alias="repositories"&gt;
        &lt;attribute name="site.p2" /&gt;
        &lt;attribute name="site.tp" /&gt;
    &lt;/prerequisites&gt;
    &lt;products alias="destination" base="${buckminster.output}"&gt;
        &lt;path path="BuckyRcpMail.${target.ws}.${target.os}.${target.arch}/" /&gt;
    &lt;/products&gt;
&lt;/public&gt;

...

&lt;public name="site.tp" actor="ant"&gt;
	&lt;actorProperties&gt;
		&lt;property key="buildFile" value="build/product.ant" /&gt;
		&lt;property key="targets" value="create.target.platform.repository" /&gt;
	&lt;/actorProperties&gt;
	&lt;properties&gt;
		&lt;property key="repository.name" value="Buckminster Mail RCP Example Platform Site" /&gt;
	&lt;/properties&gt;
	&lt;products alias="output" base="${buckminster.output}/site.tp/" /&gt;
&lt;/public&gt;</pre>
<p>The repository for the target platform will be generated in the directory <strong>site.tp</strong>.</p>
<p>Now, if we run the <em>create.product</em> action again, the director will be provided both with the p2 repository of our product and the p2 repository of the target platform, and the director will be able to find everything it needs to install the product.</p>
<p>You should get no error now, and you can find your product ready to run in the output directory; if you used the properties file above, depending on the chosen architecture and OS, you will find the product in <em>&lt;your home&gt;/tmp/mail/buckminster.output/org.eclipse.buckminster.examples.rcp.mail.product.site_1.0.0-eclipse.feature/BuckyRcpMail.&lt;ws&gt;.&lt;os&gt;.&lt;arch&gt;</em> .</p>
<h1>Deploying your sites</h1>
<p>We have already seen that we can deploy our product.site on the net (in our case, it&#8217;s <a href="http://master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/updates" target="_blank">here</a>); however, this will still require additional Eclipse repositories (for required software which is not part of our product repository). If this reminds you of the same issue we had when building the product you&#8217;re on the right track <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>The <strong>site.tp</strong> was useful to build our product, but we could also deploy it on the Internet, <em>http://master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/cloud-updates</em> (if you want to browse it, use <a href="http://sourceforge.net/projects/buckyexamples/files/bucky-mail-rcp/cloud-updates/" target="_blank">http://sourceforge.net/projects/buckyexamples/files/bucky-mail-rcp/cloud-updates/</a>), together with our <strong>site.p2</strong> to make our product independent from other repositories.</p>
<p>To show our &#8220;independence&#8221; we create another product, a <em>&#8220;cloud&#8221;</em> version, where the preconfigured update sites are only the ones we maintain: we create <strong>org.eclipse.buckminster.examples.rcp.mail.cloud.product.feature</strong>, which is basically the same as <strong>org.eclipse.buckminster.examples.rcp.mail.product.feature</strong>, with another product configuration, another product identifier and another touchpoint advice file <strong>p2.inf</strong> with only our mantained repositories (i.e., the standard update site, site.p2, and the cloud-updates, which is the one we get from the target platform, site.tp):</p>
<pre class="brush:shell">instructions.configure=org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/updates/,type:0,name:Buckminster Mail RCP Example Site,enabled:true); \
  org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/updates/,type:1,name:Buckminster Mail RCP Example Site,enabled:true); \
  org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/cloud-updates/,type:0,name:Buckminster Mail RCP Example Platform Site,enabled:true); \
  org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/cloud-updates/,type:1,name:Buckminster Mail RCP Example Platform Site,enabled:true);</pre>
<p>To deal with this product we have additional dedicated actions in the .cspex file of product.site (see <a href="https://sourceforge.net/p/buckyexamples/bucky-mail-rcp/ci/master/tree/org.eclipse.buckminster.examples.rcp.mail.product.site/buckminster.cspex" target="_blank">the original source</a>), namely <em>create.cloud.product</em> and <em>create.cloud.product.zip,</em> which basically rely on the same product.ant&#8217;s create.product target passing a different profile name and a different product UI.</p>
<p>You can also try to install our product from the command line, using the deployed remote repositories, with the same technique we showed for installing the Eclipse SDK from the command line; you just need to use one of the two product identifiers <em>org.eclipse.buckminster.examples.rcp.mail.product</em> or <em>org.eclipse.buckminster.examples.rcp.mail.cloud.product</em>, specify the path of your eclipse executable (in Windows you should use the command line version, eclipsec.exe), the destination path and the architecture details for your system, here are some examples: the first one installs the mail product for Linux 64bit, the second one installs the mail cloud product for Windows 64bit</p>
<pre class="brush:shell">&lt;your/eclipse/dir&gt;/eclipse -noSplash \
-application org.eclipse.equinox.p2.director \
-repository \

http://master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/updates,\

http://master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/cloud-updates \
-installIU org.eclipse.buckminster.examples.rcp.mail.product \
-tag InitialState \
-destination &lt;your/destination&gt; \
-profile MailProfile \
-profileProperties org.eclipse.update.install.features=true \
-p2.os linux \
-p2.ws gtk \
-p2.arch x86_64</pre>
<pre class="brush:shell">&lt;your/eclipse/dir&gt;/eclipse -noSplash \
-application org.eclipse.equinox.p2.director \
-repository \

http://master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/updates,\

http://master.dl.sourceforge.net/project/buckyexamples/bucky-mail-rcp/cloud-updates \
-installIU org.eclipse.buckminster.examples.rcp.mail.cloud.product \
-tag InitialState \
-destination &lt;your/destination&gt; \
-profile MailCloudProfile \
-profileProperties org.eclipse.update.install.features=true \
-p2.os win32 \
-p2.ws win32 \
-p2.arch x86_64</pre>
<p>NOTE: there will be redundancies in the deployed repositories since some features and bundles are contained both in site.p2 and site.tp; but this is just a tutorial example (and they do not disturb the installation/updates): it is up to you to choose what to deploy and how to aggregate them, in case.</p>
<h1>Building Headlessly</h1>
<p>For continuous integration, but also for having an automated headless way to build the products for multiple architectures and build the p2 repositories with only one click, it is very useful to have an Ant script that does all of the above. The <a href="https://sourceforge.net/p/buckyexamples/bucky-mail-rcp/ci/master/tree/org.eclipse.buckminster.examples.rcp.mail.releng/build.ant" target="_blank"><strong>build.ant</strong></a> is stored in the project <em>org.eclipse.buckminster.examples.rcp.mail.releng</em>, and it relies on the <strong><a href="https://sourceforge.net/p/buckyexamples/bucky-mail-rcp/ci/master/tree/org.eclipse.buckminster.examples.rcp.mail.releng/common.ant" target="_blank">common.ant</a></strong> file which does most of the work. The Ant script relies on Buckminster headless; I won&#8217;t detail here how to install Buckminster headless, also because the Ant script checks whether it is already installed in your computer, and if it is not, it will install it for you <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  (it first installs Buckminster director whose zip file is in the <em>tools</em> subdirectory of the releng project). In the <em>launches</em> directory of the releng project you also find some launch configurations to experiment with.</p>
<p>Buckminster headless will need a way of importing the projects into the headless workspace to build them; the build.cquery we already described can be used to materialize in the workspace the releng project, but then the buckminster.cspec needs to be modified in order to materialize also the other projects. We just need to add dependencies to projects which depend on all of the other projects (since Buckminster will automatically materialize all dependencies). The feature project <strong>org.eclipse.buckminster.examples.rcp.mail.product.site</strong> depends on all the other ones. So we add this dependency (the rmap already provides all the locators for materializing all our projects). The final buckminster.cspec looks like this:</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;cs:cspec xmlns:cs="http://www.eclipse.org/buckminster/CSpec-1.0" name="org.eclipse.buckminster.examples.rcp.mail.releng" componentType="buckminster" version="1.0.0"&gt;
    &lt;cs:dependencies&gt;
        &lt;cs:dependency name="org.eclipse.buckminster.examples.rcp.mail.product.site" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.equinox.executable" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.equinox.p2.user.ui" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.rcp" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.rcp.source" componentType="eclipse.feature"/&gt;
    &lt;/cs:dependencies&gt;
&lt;/cs:cspec&gt;</pre>
<p>The build.ant script then invokes Buckminster headless with two text files containing the headless commands: <strong>headless-resolve-commands.txt</strong> to materialize all the projects and the target platform (by resolving build.cquery)</p>
<pre class="brush:shell">setpref targetPlatformPath="${target.platform}"
resolve "${projects.location}/org.eclipse.buckminster.examples.rcp.mail.releng/build.cquery"</pre>
<p>and <strong>headless-perform-commands.txt</strong> which performs all the actions to build what we want.</p>
<pre class="brush:shell">build

# build the site for installing the product, i.e., mail feature and platform feature
# IMPORTANT: build the site first for all architectures, so that we can create
# products for multiple architectures
perform -D target.os=* -D target.ws=* -D target.arch=* org.eclipse.buckminster.examples.rcp.mail.product.site#site.p2

# now build the products and zip them
perform -D target.os=linux -D target.ws=gtk -D target.arch=x86_64 org.eclipse.buckminster.examples.rcp.mail.product.site#create.product.zip
perform -D target.os=linux -D target.ws=gtk -D target.arch=x86 org.eclipse.buckminster.examples.rcp.mail.product.site#create.product.zip
perform -D target.os=win32 -D target.ws=win32 -D target.arch=x86_64 org.eclipse.buckminster.examples.rcp.mail.product.site#create.product.zip
perform -D target.os=win32 -D target.ws=win32 -D target.arch=x86 org.eclipse.buckminster.examples.rcp.mail.product.site#create.product.zip
perform -D target.os=macosx -D target.ws=cocoa -D target.arch=x86 org.eclipse.buckminster.examples.rcp.mail.product.site#create.product.zip
perform -D target.os=macosx -D target.ws=cocoa -D target.arch=x86_64 org.eclipse.buckminster.examples.rcp.mail.product.site#create.product.zip

# now build the cloud products and zip them
perform -D target.os=linux -D target.ws=gtk -D target.arch=x86_64 org.eclipse.buckminster.examples.rcp.mail.product.site#create.cloud.product.zip
perform -D target.os=linux -D target.ws=gtk -D target.arch=x86 org.eclipse.buckminster.examples.rcp.mail.product.site#create.cloud.product.zip
perform -D target.os=win32 -D target.ws=win32 -D target.arch=x86_64 org.eclipse.buckminster.examples.rcp.mail.product.site#create.cloud.product.zip
perform -D target.os=win32 -D target.ws=win32 -D target.arch=x86 org.eclipse.buckminster.examples.rcp.mail.product.site#create.cloud.product.zip
perform -D target.os=macosx -D target.ws=cocoa -D target.arch=x86 org.eclipse.buckminster.examples.rcp.mail.product.site#create.cloud.product.zip
perform -D target.os=macosx -D target.ws=cocoa -D target.arch=x86_64 org.eclipse.buckminster.examples.rcp.mail.product.site#create.cloud.product.zip</pre>
<p>Before building the products with the create.product actions (and zip them) it is crucial to first build the product.site repository for all platforms; this way, we will then be able to build products for several platforms (if you don&#8217;t do that, only the first product will have executable files).</p>
<p>All the output will be stored in the <em>buildroot</em> directory in the same root of our projects; the target platform will be materialized in the subdirectory <em>target.platform</em>, the repositories and the products can be found in the subdirectory <em>buckminster.output</em> (each of them in the subdirectories we saw before).</p>
<h1>Try the example</h1>
<p>You can find the <a href="https://sourceforge.net/projects/buckyexamples/files/bucky-mail-rcp/products/" target="_blank">packaged products on Sourceforge</a>. Download the one for your system (either the standard version or the &#8220;cloud&#8221; version); you will see the preconfigured update sites. Try to update the application with Check for Updates (there should be an update available for the product) and to install the optional feature.</p>
<h1>Conclusions</h1>
<p>I hope you found this tutorial useful <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>With the techniques described here you should be able to build even complex products seamlessly without having to deal explicitly with dependencies which are already dealt with by Eclipse PDE and p2. Once the target platform is defined correctly (and you see that with Buckminster you can do that without having to worry about required software), everything will be built automatically and your projects (especially product definitions and feature definitions) will be clean and neat <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lorenzobettini.it/2013/01/building-an-eclipse-rcp-product-with-buckminster/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Regular Expression Replacement in an Ant Property</title>
		<link>http://www.lorenzobettini.it/2012/12/regular-expression-replacement-in-an-ant-property/</link>
		<comments>http://www.lorenzobettini.it/2012/12/regular-expression-replacement-in-an-ant-property/#comments</comments>
		<pubDate>Wed, 26 Dec 2012 18:53:33 +0000</pubDate>
		<dc:creator>Lorenzo Bettini</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[ant]]></category>

		<guid isPermaLink="false">http://www.lorenzobettini.it/?p=283</guid>
		<description><![CDATA[I&#8217;m quite a newbie in Ant, but I thought it would be straightforward to do a regular expression replacement in a string contained in a property; in my case, I had to replace Windows backslashes with Unix slashes&#8230; apparently, unless you use the propertyregex task from Ant Contrib, that is not supported out-of-the-box: you have [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m quite a newbie in Ant, but I thought it would be straightforward to do a regular expression replacement in a string contained in a property; in my case, I had to replace Windows backslashes with Unix slashes&#8230; apparently, unless you use the <a href="http://ant-contrib.sourceforge.net/tasks/tasks/propertyregex.html">propertyregex</a> task from <a href="http://ant-contrib.sourceforge.net/">Ant Contrib,</a> that is not supported out-of-the-box: you have to pass through a file!</p>
<p>This <a href="http://stackoverflow.com/questions/1176071/replacing-characters-in-ant-property" target="_blank">stackoverflow post</a> shows a possible solution, and starting from that, I created a macrodef to make it easier</p>
<pre class="brush:xml">&lt;!-- = = = = = = = = = = = = = = = = =
  macrodef: replace_win_slashes          
 = = = = = = = = = = = = = = = = = --&gt;
&lt;macrodef name="replace_win_slashes"&gt;
	&lt;attribute name="property.to.process" default="default" /&gt;
	&lt;attribute name="output.property" default="default" /&gt;
	&lt;sequential&gt;
		&lt;echo message="@{property.to.process}" file="some.tmp.file" /&gt;
		&lt;loadfile property="@{output.property}" srcFile="some.tmp.file"&gt;
			&lt;filterchain&gt;
				&lt;tokenfilter&gt;
					&lt;replaceregex pattern="\\" replace="/" flags="g" /&gt;
				&lt;/tokenfilter&gt;
			&lt;/filterchain&gt;
		&lt;/loadfile&gt;
		&lt;delete file="some.tmp.file" /&gt;
	&lt;/sequential&gt;
&lt;/macrodef&gt;</pre>
<p>This macro takes the property value to process (property.to.process) and the property name where to store the result; it outputs the input value to a temporary file, reads it back with a regular expression replacement (which is supported for files) and store it in the specified property (the temporary file is then deleted).</p>
<p>Here&#8217;s an example of use</p>
<pre class="brush:xml">&lt;project name="replace win slashes" &gt;
	&lt;property name="my.prop1" value="file:C:\Users\bettini/my/path1" /&gt;

	&lt;!-- = = = = = = = = = = = = = = = = =
          macrodef: replace_win_slashes          
         = = = = = = = = = = = = = = = = = --&gt;
	&lt;macrodef name="replace_win_slashes"&gt;
		&lt;attribute name="property.to.process" default="default" /&gt;
		&lt;attribute name="output.property" default="default" /&gt;
		&lt;sequential&gt;
			&lt;echo message="@{property.to.process}" file="some.tmp.file" /&gt;
			&lt;loadfile property="@{output.property}" srcFile="some.tmp.file"&gt;
				&lt;filterchain&gt;
					&lt;tokenfilter&gt;
						&lt;replaceregex pattern="\\" replace="/" flags="g" /&gt;
					&lt;/tokenfilter&gt;
				&lt;/filterchain&gt;
			&lt;/loadfile&gt;
			&lt;delete file="some.tmp.file" /&gt;
		&lt;/sequential&gt;
	&lt;/macrodef&gt;

	&lt;replace_win_slashes property.to.process="${my.prop1}" output.property="my-prop-1" /&gt;

	&lt;echo message="my-prop-1 = ${my-prop-1}" /&gt;

&lt;/project&gt;</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lorenzobettini.it/2012/12/regular-expression-replacement-in-an-ant-property/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mirror Eclipse repositories from Eclipse</title>
		<link>http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/</link>
		<comments>http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/#comments</comments>
		<pubDate>Sat, 22 Dec 2012 15:57:37 +0000</pubDate>
		<dc:creator>Lorenzo Bettini</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[p2]]></category>

		<guid isPermaLink="false">http://www.lorenzobettini.it/?p=255</guid>
		<description><![CDATA[In a previous post, I blogged about mirroring Eclipse repositories with the p2.mirror Ant task; Since this Ant task needs to be run via the Eclipse antRunner application, you need a full installation of Eclipse on the machine that will run the task and I showed how to run this task from the command line. [...]]]></description>
				<content:encoded><![CDATA[<p>In a <a title="Mirror Eclipse repositories with p2.mirror Ant task" href="http://www.lorenzobettini.it/2012/11/mirror-eclipse-repositories-with-p2-mirror-ant-task/" target="_blank">previous post</a>, I blogged about mirroring Eclipse repositories with the p2.mirror Ant task; Since this Ant task needs to be run via the Eclipse <em>antRunner</em> application, you need a full installation of Eclipse on the machine that will run the task and I showed how to run this task from the command line.</p>
<p>It might be more comfortable sometimes to run it from Eclipse; for this, you need to create a launch configuration which runs an Eclipse Application, the same you run from the command line: <em>org.eclipse.ant.core.antRunner</em>.</p>
<p>We create a new general project (say, my.eclipse.mirror) and we create a <strong>mirror.ant</strong> file with the following example content (see the <a title="Mirror Eclipse repositories with p2.mirror Ant task" href="http://www.lorenzobettini.it/2012/11/mirror-eclipse-repositories-with-p2-mirror-ant-task/" target="_blank">previous post</a> for more details):</p>
<p><a href="http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/mirror-repos-2012-12-22-134846/" rel="attachment wp-att-257"><img class="aligncenter size-full wp-image-257" alt="mirror-repos 2012-12-22 13:48:46" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mirror-repos-2012-12-22-134846.png" width="1235" height="743" /></a></p>
<pre class="brush:xml">&lt;project name="Create Mirror" default="create-mirror" basedir="."&gt;

	&lt;target name="create-mirror"&gt;

		&lt;property name="target.dir" location="${user.home}/eclipsemirror" /&gt;

		&lt;echo message="" /&gt;
		&lt;echo message="Mirroring into ${target.dir}..." /&gt;

		&lt;p2.mirror source="http://download.eclipse.org/releases/juno"&gt;
			&lt;destination location="${target.dir}/releases/juno" /&gt;
			&lt;iu id="org.eclipse.rcp.feature.group" /&gt;
			&lt;iu id="org.eclipse.rcp.source.feature.group" /&gt;
			&lt;iu id="org.eclipse.equinox.executable.feature.group" /&gt;
			&lt;iu id="org.eclipse.equinox.p2.user.ui.feature.group" /&gt;
		&lt;/p2.mirror&gt;

		&lt;p2.mirror source="http://download.eclipse.org/tools/orbit/downloads/drops/R20120526062928/repository"&gt;
			&lt;destination location="${target.dir}/tools/orbit/downloads/drops/R20120526062928/repository" /&gt;
		&lt;/p2.mirror&gt;

		&lt;p2.mirror source="http://download.eclipse.org/tools/buckminster/headless-4.2"&gt;
			&lt;destination location="${target.dir}/tools/buckminster/headless-4.2" /&gt;
		&lt;/p2.mirror&gt;

	&lt;/target&gt;

&lt;/project&gt;</pre>
<p>This example will mirror</p>
<ul>
<li>org.eclipse.rcp.sdk, the eclipse launcher and the feature for adding update site features to your RCP, from the main Juno release site,</li>
<li>the whole Orbit repository (that version of the repository)</li>
<li>the whole Buckminster headless repository</li>
</ul>
<p>Now we select the &#8220;Run Configurations&#8230;&#8221; dialog</p>
<p><a href="http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/mirror-repos-2012-12-22-134902/" rel="attachment wp-att-259"><img class="aligncenter size-full wp-image-259" alt="mirror-repos 2012-12-22 13:49:02" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mirror-repos-2012-12-22-134902.png" width="800" height="640" /></a></p>
<p>and we create a new Eclipse Application launch configuration, which we call <strong>run_mirror</strong>; we choose, as the Program to Run, the application <strong><em>org.eclipse.ant.core.antRunner</em></strong>. Note that this application is installed by default in your SDK, but if there is a different target platform active in your workspace, which does not include the <strong>org.apache.ant</strong> bundle, this launch will fail.</p>
<p><a href="http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/mirror-repos-2012-12-22-134945/" rel="attachment wp-att-260"><img class="aligncenter size-full wp-image-260" alt="mirror-repos 2012-12-22 13:49:45" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mirror-repos-2012-12-22-134945.png" width="1024" height="640" /></a></p>
<p>In the Arguments tab, we must specify the <strong>-buildfile</strong> argument (expected by the runner) passing our ant file <strong>mirror.ant</strong>; this file is intended to be relative to the <em>Working directory</em>, thus we must modify it by selecting our project relative to the workspace:</p>
<p><a href="http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/mirror-repos-2012-12-22-135035/" rel="attachment wp-att-261"><img class="aligncenter size-full wp-image-261" alt="mirror-repos 2012-12-22 13:50:35" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mirror-repos-2012-12-22-135035.png" width="1024" height="640" /></a></p>
<p>Optionally, we save this launch configuration, using the &#8220;Common&#8221; tab, into our project</p>
<p><a href="http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/mirror-repos-2012-12-22-135100/" rel="attachment wp-att-262"><img class="aligncenter size-full wp-image-262" alt="mirror-repos 2012-12-22 13:51:00" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mirror-repos-2012-12-22-135100.png" width="1024" height="640" /></a></p>
<p>By default, the mirror will be saved into the folder <strong>eclipsemirror</strong> into your home folder; you may want to change this by specifying the additional program argument <strong>-Dtarget.dir=&lt;path&gt;</strong>, for instance,</p>
<p><a href="http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/mirror-repos-2012-12-22-135127/" rel="attachment wp-att-263"><img class="aligncenter size-full wp-image-263" alt="mirror-repos 2012-12-22 13:51:27" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mirror-repos-2012-12-22-135127.png" width="1024" height="640" /></a></p>
<p>Choose <em>Apply</em> and then <em>Run</em>; in your console view you should see that the mirror task has started</p>
<p><img alt="" src="data:image/png;base64,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" /></p>
<p>You can ignore possible problems of dependencies which cannot be satisfied</p>
<p><img alt="" src="data:image/png;base64,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" /></p>
<p>Depending on your Network connection it might take some time, but in the end you should see something like</p>
<p><a href="http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/mirror-repos-2012-12-22-153946/" rel="attachment wp-att-264"><img class="aligncenter size-full wp-image-264" alt="mirror-repos 2012-12-22 15:39:46" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mirror-repos-2012-12-22-153946.png" width="745" height="257" /></a></p>
<p>And you can see that the mirror directory will mimic the original repositories structure</p>
<p><a href="http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/mirror-repos-2012-12-22-165433/" rel="attachment wp-att-265"><img class="aligncenter size-full wp-image-265" alt="mirror-repos 2012-12-22 16:54:33" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/mirror-repos-2012-12-22-165433.png" width="427" height="419" /></a></p>
<p>This example project can be found at <a href="https://github.com/LorenzoBettini/eclipse-mirror-example" target="_blank">https://github.com/LorenzoBettini/eclipse-mirror-example</a></p>
<p>Happy mirroring! <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>One Eclipse Installation and Multiple Configurations</title>
		<link>http://www.lorenzobettini.it/2012/12/one-eclipse-installation-and-multiple-configurations/</link>
		<comments>http://www.lorenzobettini.it/2012/12/one-eclipse-installation-and-multiple-configurations/#comments</comments>
		<pubDate>Mon, 03 Dec 2012 10:48:43 +0000</pubDate>
		<dc:creator>Lorenzo Bettini</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://www.lorenzobettini.it/?p=222</guid>
		<description><![CDATA[I used to have many Eclipse installations in my machines; typically they were different Juno versions downloaded from ecipse.org, for instance, Eclipse for RCP developers, Eclipse for DSL developers, Eclipse Modeling Tools, etc. Moreover, most of them were customized with the same plugins (for instance, Mylyn connectors) which I had to install on all of [...]]]></description>
				<content:encoded><![CDATA[<p>I used to have many Eclipse installations in my machines; typically they were different Juno versions downloaded from ecipse.org, for instance, Eclipse for RCP developers, Eclipse for DSL developers, Eclipse Modeling Tools, etc. Moreover, most of them were customized with the same plugins (for instance, Mylyn connectors) which I had to install on all of them. I preferred to have separate installations not to have a monolithic single Eclipse instance (where some features might also interfere with each other).</p>
<p>Then I started to use the ability of Eclipse to deal with multiple configurations, which is really a cool feature.</p>
<p>The idea is that you have a single Eclipse installation with all the features you always used and that you would desire in all of your Eclipse installations; then you have different directories for each &#8220;configuration&#8221;.</p>
<p>You can start Eclipse with a command line like the following, which uses the command line argument <strong>-configuration</strong>:</p>
<pre class="brush:shell">eclipse-main/eclipse -configuration eclipse-other/configuration</pre>
<p>Assuming that the main Eclipse installation is in <em>eclipse-main</em> directory, and that the new separate configuration will be stored in <em>eclipse-other/configuration</em> (which will be automatically created if it does not yet exist). What you get is a running Eclipse instance with all the features and plugins of the main Eclipse installation, but all the new features which will be installed from this running instance will go in the new configuration, thus they won&#8217;t disturb the main installation!</p>
<p>If you try to install new software from this Eclipse running instance, you&#8217;ll see that the list of available software sites is empty, so you will have to fill such list with the typical Eclipse software sites, such as http://download.eclipse.org/releases/juno and http://download.eclipse.org/eclipse/updates/4.2.</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/12/multi_conf_no_update_sites.png"><img class="aligncenter size-full wp-image-224" title="multi_conf_no_update_sites" src="http://www.lorenzobettini.it/wp-content/uploads/2012/12/multi_conf_no_update_sites.png" alt="" width="723" height="289" /></a></p>
<p>And then you can install new features in this Eclipse, and they will be available only in this configuration. You can then check the <em>plugins</em> and <em>features</em> directories in <em>eclipse-other</em> which will contain the new installed features and bundles (which will <strong>not</strong> be stored in the same directories of <em>eclipse-main</em>); similarly, the <em>plugins</em> and <em>features</em> directories in <em>eclipse-other</em> will <strong>not</strong> contain the features and bundles which are stored in the same directories of <em>eclipse-main</em>, though they are available in the new Eclipse configuration.</p>
<p>Of course, you&#8217;ll have to use the above command line each time you want this Eclipse version (you should have shell scripts to run a specific Eclipse).</p>
<p>Main advantages in this approach are</p>
<ol>
<li>The features you want to use in all configurations are stored in only one place, and they will be maintained only in the eclipse-main installation (e.g., kept up to date)</li>
<li>you save some space in your hard disk (I had 4 Eclipse installations which required 2.5 Gb; with the new approach, i.e., one Eclipse main installation and 3 configurations I only need 500 Mb!)</li>
</ol>
<p>If you can still use command line to install new features in the separate configurations (I <a title="Installing Eclipse Features via the command line" href="http://www.lorenzobettini.it/2012/10/installing-eclipse-features-via-the-command-line/" target="_blank">blogged</a> about that); you just need to adjust the command line with the <strong>-configuration</strong> parameter.</p>
<p>For instance, to have an Eclipse configuration in <em>eclipse-texlipse/configuration</em> (based on the main Eclipse installation stored in <em>eclipse-main</em>) with the addition of Texlipse and Subversion features I run these commands</p>
<pre class="brush:shell">./eclipse-main/eclipse \
-configuration ./eclipse-texlipse/configuration \
-application org.eclipse.equinox.p2.director -noSplash \
-repository http://download.eclipse.org/releases/juno,http://download.eclipse.org/eclipse/updates/4.2,\
http://texlipse.sourceforge.net/ \
-installIUs \
net.sourceforge.texlipse.feature.group,\
de.vonloesch.pdf4eclipse.feature.group \
-vmargs -Declipse.p2.mirrors=true -Djava.net.preferIPv4Stack=true

./eclipse-main/eclipse \
-configuration ./eclipse-texlipse/configuration \
-application org.eclipse.equinox.p2.director -noSplash \
-repository http://download.eclipse.org/releases/juno,http://download.eclipse.org/eclipse/updates/4.2 \
-installIUs \
org.eclipse.team.svn.feature.group \
-vmargs -Declipse.p2.mirrors=true -Djava.net.preferIPv4Stack=true</pre>
<p>Note that using the command line for installing new features will also store in the Eclipse configuration the specified update sites (so you will find them in the Install New Software dialog).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lorenzobettini.it/2012/12/one-eclipse-installation-and-multiple-configurations/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Reduce disk access in Windows 7</title>
		<link>http://www.lorenzobettini.it/2012/11/reduce-disk-access-in-windows-7/</link>
		<comments>http://www.lorenzobettini.it/2012/11/reduce-disk-access-in-windows-7/#comments</comments>
		<pubDate>Mon, 26 Nov 2012 10:34:17 +0000</pubDate>
		<dc:creator>Lorenzo Bettini</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.lorenzobettini.it/?p=212</guid>
		<description><![CDATA[Although I&#8217;m not a big user of Windows, sometimes I use it to test my software and products. When switching to Windows Vista and Windows 7 I&#8217;ve always noticed a huge use of the disk. Here are some tricks I&#8217;ve used to reduce such use First of all make sure to disable indexing for the [...]]]></description>
				<content:encoded><![CDATA[<p>Although I&#8217;m not a big user of Windows, sometimes I use it to test my software and products. When switching to Windows Vista and Windows 7 I&#8217;ve always noticed a huge use of the disk.</p>
<p>Here are some tricks I&#8217;ve used to reduce such use</p>
<p>First of all make sure to disable indexing for the whole hard disk (checkbox &#8220;Allow files on this drive&#8230;&#8221;)</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/no_indexing.png"><img class="aligncenter size-full wp-image-213" title="no_indexing" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/no_indexing.png" alt="" width="377" height="505" /></a></p>
<p>Then stop the Windows Search service and&#8230;</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/no_search1.png"><img class="aligncenter size-full wp-image-214" title="no_search1" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/no_search1.png" alt="" width="820" height="600" /></a></p>
<p>make sure it is disabled (right click and the Properties)</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/no_search2.png"><img class="aligncenter size-full wp-image-215" title="no_search2" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/no_search2.png" alt="" width="420" height="474" /></a></p>
<p>Finally, make sure that you have no scheduled defragmentation (you can check this by pressing &#8220;Defragment now&#8230;&#8221;</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/no_defrag1.png"><img class="aligncenter size-full wp-image-217" title="no_defrag1" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/no_defrag1.png" alt="" width="377" height="505" /></a></p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/no_defrag2.png"><img class="aligncenter size-full wp-image-218" title="no_defrag2" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/no_defrag2.png" alt="" width="645" height="512" /></a></p>
<p>This should reduce disk access, hopefully <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>any comment and suggestion is more than welcome!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lorenzobettini.it/2012/11/reduce-disk-access-in-windows-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mirror Eclipse repositories with p2.mirror Ant task</title>
		<link>http://www.lorenzobettini.it/2012/11/mirror-eclipse-repositories-with-p2-mirror-ant-task/</link>
		<comments>http://www.lorenzobettini.it/2012/11/mirror-eclipse-repositories-with-p2-mirror-ant-task/#comments</comments>
		<pubDate>Thu, 22 Nov 2012 11:45:32 +0000</pubDate>
		<dc:creator>Lorenzo Bettini</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[p2]]></category>

		<guid isPermaLink="false">http://www.lorenzobettini.it/?p=194</guid>
		<description><![CDATA[Inspired by this nice blog post, I decided it was time to try to mirror some Eclipse repositories to speed up my builds that depend on target platforms insulate myself from outside servers be able to build also without an Internet connection reduce network traffic To do this I&#8217;m using p2 ant tasks for mirroring [...]]]></description>
				<content:encoded><![CDATA[<p>Inspired by this nice <a href="http://www.modumind.com/2012/10/25/rcp-best-practices-mirror-eclipse-repositories/" target="_blank">blog post</a>, I decided it was time to try to mirror some Eclipse repositories to</p>
<ul>
<li>speed up my builds that depend on target platforms</li>
<li>insulate myself from outside servers</li>
<li>be able to build also without an Internet connection</li>
<li>reduce network traffic <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>To do this I&#8217;m using <a href="http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fp2_repositorytasks.htm" target="_blank">p2 ant tasks for mirroring repositories</a>.</p>
<p>When mirroring eclipse repositories, my main idea is to keep the path structure of the original repository URL. For instance, if you are using something like</p>
<p><strong>http://download.eclipse.org/</strong>releases/juno</p>
<p>the mirror should differ only for the base url, e.g., something like</p>
<p><strong>/home/myhome/eclipsemirror/</strong>releases/juno</p>
<p>This is useful if the p2 repositories you use for materializing your target platform are parametrized with respect to the base URL. For instance, I&#8217;m using Buckminster to materialize my target platforms (see also <a title="Materializing and Provisioning your Target Platform as local p2 site with Buckminster" href="http://www.lorenzobettini.it/2012/11/materializing-and-provisioning-your-target-platform-as-local-p2-site-with-buckminster/" target="_blank">this post</a>), and in my RMAP files I have something like</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rm:rmap xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0" xmlns:rm="http://www.eclipse.org/buckminster/RMap-1.0"&gt;

  &lt;rm:property key="eclipse.download" value="http://download.eclipse.org"/&gt;

  &lt;rm:property key="xtext.p2.repository" 
        value="${eclipse.download}/modeling/tmf/xtext/updates/composite/releases/"/&gt;
  &lt;rm:property key="eclipse.target.platform" 
        value="${eclipse.download}/releases/juno"/&gt;
  &lt;rm:property key="swtbot.repository" 
        value="${eclipse.download}/technology/swtbot/helios/dev-build/update-site"/&gt;
  &lt;rm:property key="orbit.repository" 
        value="${eclipse.download}/tools/orbit/downloads/drops/R20120526062928/repository/"/&gt;

...

&lt;/rm:rmap&gt;</pre>
<p>You see that the URLs are parametrized over the property <em>eclipse.download</em> (which defaults to http://download.eclipse.org). If I mirror those repositories keeping the same structure</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/local-mirror-structure.png"><img class="aligncenter size-full wp-image-197" title="local-mirror-structure" alt="" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/local-mirror-structure.png" width="333" height="445" /></a></p>
<p>then, switching to my local mirror for target materialization it&#8217;s just a matter of passing for the property <em>eclipse.download</em> the URL of my local directory, e.g., <em>file:/home/bettini/eclipsemirror</em>, without even changing my RMAP files.</p>
<p>So let&#8217;s start mirroring! We need to define an Ant script for the p2 antRunner.</p>
<p>For instance, for mirroring the whole orbit repository (with that particular drops version) we create this script, let&#8217;s call it <em>mirror-orbit.xml</em>:</p>
<pre class="brush:xml">&lt;project name="Create Mirror" default="create-mirror" basedir="."&gt;

  &lt;target name="create-mirror"&gt;
    &lt;p2.mirror source="http://download.eclipse.org/tools/orbit/downloads/drops/R20120526062928/repository"&gt;
      &lt;destination location="${target.dir}/tools/orbit/downloads/drops/R20120526062928/repository"  /&gt;
    &lt;/p2.mirror&gt;
  &lt;/target&gt;

&lt;/project&gt;</pre>
<p>Note that we keep in the target dir the same path structure of the original repository.</p>
<p>Since these Ant tasks need to be run via the Eclipse <em>antRunner</em> application, you need a full installation of Eclipse on the machine that will run the task. And you run this task with a command line like the following</p>
<pre class="brush:shell">/path/to/eclipse -noSplash \
   -application org.eclipse.ant.core.antRunner \
   -buildfile mirror-orbit.xml \
   -Dtarget.dir=$HOME/eclipsemirror</pre>
<p>Of course you can choose any target dir; the idea is however to always use the same target dir so that all repositories will be mirrored in that path.</p>
<p>Mirroring an entire repository might not always be the case, especially for Juno main release repository, which is quite huge. But you can specify in the Ant task the installable units you&#8217;re interested in; then, the p2 task will only mirror those installable units (and all its dependencies). For instance,</p>
<pre class="brush:xml">&lt;project name="Create Mirror" default="create-mirror" basedir="."&gt;
  &lt;target name="create-mirror"&gt;
    &lt;p2.mirror source="http://download.eclipse.org/releases/juno"&gt;
      &lt;destination location="${target.dir}/releases/juno"  /&gt;
      &lt;iu id="org.eclipse.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.equinox.executable.feature.group" /&gt;
      &lt;iu id="org.eclipse.emf.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.emf.query.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.net4j.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.net4j.db.feature.group" /&gt;
      &lt;iu id="org.eclipse.emf.cdo.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.draw2d.sdk.feature.group" /&gt;
    &lt;/p2.mirror&gt;
  &lt;/target&gt;

&lt;/project&gt;</pre>
<p>This task will mirror all the features that should let you define a target platform for RCP development with EMF and CDO.</p>
<p>NOTE: if you try to mirror <strong>org.eclipse.platform.sdk</strong> from the releases/juno repository, you will see that it will actually mirror the whole repository! (see also <a href="http://www.eclipse.org/forums/index.php/mv/msg/425709/984219/#msg_984219" target="_blank">this forum post</a>).</p>
<p>If you get some warnings during the mirror about unsolvable dependencies, you can ignore them: basically those dependencies are in a different repositories, and probably you will mirror those repositories too later.</p>
<p>Of course you can use several p2.mirror elements in the same Ant task. For example, this is the one we use in <a href="http://code.google.com/a/eclipselabs.org/p/emf-components/" target="_blank">Emf Components</a>, to have a mirror for our target platform: it also mirrors Swtbot and Xtext SDKs:</p>
<pre class="brush:xml">&lt;project name="Create Mirror" default="create-mirror" basedir="."&gt;

  &lt;target name="create-mirror"&gt;

    &lt;p2.mirror source="http://download.eclipse.org/releases/juno"&gt;
      &lt;destination location="${target.dir}/releases/juno"  /&gt;
      &lt;iu id="org.eclipse.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.equinox.executable.feature.group" /&gt;
      &lt;iu id="org.eclipse.emf.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.emf.query.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.net4j.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.net4j.db.feature.group" /&gt;
      &lt;iu id="org.eclipse.emf.cdo.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.draw2d.sdk.feature.group" /&gt;
    &lt;/p2.mirror&gt;

    &lt;p2.mirror source="http://download.eclipse.org/tools/orbit/downloads/drops/R20120526062928/repository"&gt;
      &lt;destination location="${target.dir}/tools/orbit/downloads/drops/R20120526062928/repository"  /&gt;
    &lt;/p2.mirror&gt;

    &lt;p2.mirror source="http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases"&gt;
      &lt;destination location="${target.dir}/modeling/tmf/xtext/updates/composite/releases"  /&gt;
      &lt;iu id="org.eclipse.xtext.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.xtend.sdk.feature.group" /&gt;
      &lt;iu id="org.eclipse.xpand.sdk.feature.group" /&gt;
    &lt;/p2.mirror&gt;

    &lt;p2.mirror source="http://download.eclipse.org/technology/swtbot/helios/dev-build/update-site"&gt;
      &lt;destination location="${target.dir}/technology/swtbot/helios/dev-build/update-site"  /&gt;
      &lt;iu id="org.eclipse.swtbot.eclipse.feature.group" /&gt;
      &lt;iu id="org.eclipse.swtbot.ide.feature.group" /&gt;
      &lt;iu id="org.eclipse.swtbot.eclipse.test.junit4.feature.group" /&gt;
      &lt;iu id="org.eclipse.swtbot.forms.feature.group" /&gt;
      &lt;iu id="org.eclipse.swtbot.feature.group" /&gt;
    &lt;/p2.mirror&gt;

  &lt;/target&gt;

&lt;/project&gt;</pre>
<p>Final warning: it might take some time for the mirror task to complete (usually hours depending on your connection and download.eclipse.org load) and it will also take some hard disk space (for the above mirror it takes about 2 Gb).</p>
<p>You may have to experiment a bit to get all the features you need in the mirror; for instance, I didn&#8217;t know about the draw2d above, but I had to add it since during target materialization that feature was requested by some other feature. If you&#8217;re lost about that, you can always mirror the whole thing <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>There&#8217;s also a <a title="Mirror Eclipse repositories from Eclipse" href="http://www.lorenzobettini.it/2012/12/mirror-eclipse-repositories-from-eclipse/" target="_blank">follow up post showing how to run this ant task from Eclipse</a>!</p>
<p>But then your builds will be faster <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lorenzobettini.it/2012/11/mirror-eclipse-repositories-with-p2-mirror-ant-task/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Building Xtext projects with Buckminster</title>
		<link>http://www.lorenzobettini.it/2012/11/building-xtext-projects-with-buckminster/</link>
		<comments>http://www.lorenzobettini.it/2012/11/building-xtext-projects-with-buckminster/#comments</comments>
		<pubDate>Wed, 14 Nov 2012 09:51:39 +0000</pubDate>
		<dc:creator>Lorenzo Bettini</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[buckminster]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[xtext]]></category>

		<guid isPermaLink="false">http://www.lorenzobettini.it/?p=146</guid>
		<description><![CDATA[One of the new cool features which came with Xtext 2.3.0 is a wizard which generates all the artifacts to build your Xtext DSL project with Buckminster; this will allow you to easily build your Xtext project p2 site and also to build your project and its tests headlessly (e.g., from the command line, and, [...]]]></description>
				<content:encoded><![CDATA[<p>One of the new cool features which came with Xtext 2.3.0 is a wizard which generates all the artifacts to build your Xtext DSL project with Buckminster; this will allow you to easily build your Xtext project p2 site and also to build your project and its tests headlessly (e.g., from the command line, and, more importantly from within a continuous integration system like Jenkins).</p>
<p>This new feature was not advertised much, nor documented, so I decided to write a tutorial about that, also with the permission of the developer of this feature <a href="https://plus.google.com/u/0/109977816718694007083" target="_blank">Dennis Hübner</a>.</p>
<p>In this tutorial I will show how to</p>
<ul>
<li>create the p2 repository from the IDE</li>
<li>build your project (and run the tests) headlessly from the command line (through ant)</li>
<li>build your project (and run the tests) headlessly in a continuous integration system like Jenkins</li>
</ul>
<p>In the end, I will also try to describe/explain all the Buckminster files that the wizard created for you, so that one can customize them.</p>
<p>The sources used in this tutorial can be found at</p>
<p><a href="https://github.com/LorenzoBettini/Xtext-Buckminster-Example" target="_blank">https://github.com/LorenzoBettini/Xtext-Buckminster-Example</a></p>
<h2>Create an Xtext project</h2>
<p>So, first of all, let&#8217;s create a simple Xtext hello project; for this example I will use the following settings:</p>
<ul>
<li>project name: <strong>org.xtext.example.hellobuck</strong></li>
<li>name: <strong>org.xtext.example.hellobuck.HelloBuck</strong></li>
<li>extension: <strong>greetings</strong></li>
<li>check &#8220;Create SDK feature project&#8221;</li>
</ul>
<p>and then, of course, we generate Xtext artifacts.</p>
<p>The DSL is basically the standard Greetings DSL; in this case, I&#8217;m using the JvmModelInferrer to generate Java classes from &#8220;Hello&#8221; specifications. Indeed, the DSL itself is not important in this tutorial. I&#8217;ve also added two Junit tests in the corresponding org.xtext.example.hellobuck.tests project:</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext.bucky_.tests_.project.png"><img class="aligncenter size-full wp-image-149" title="xtext.bucky.tests.project" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext.bucky_.tests_.project.png" alt="" width="305" height="404" /></a></p>
<p>Note the <strong>org.xtext.example.hellobuck.tests.launch</strong> Launch configuration that Xtext created for you (which basically runs all the Junit tests in this project. We will see how this will be used later.</p>
<h2>Use the Xtext Build with Buckminster Wizard</h2>
<p>Now we can use the Xtext wizard &#8220;Build with Buckminster&#8221;: <em>New =&gt; Other =&gt; Xtext =&gt; Continuous Integration =&gt; Build with Buckminster</em>:</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky1.png"><img class="aligncenter size-full wp-image-153" title="xtext-bucky1" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky1.png" alt="" width="605" height="580" /></a></p>
<p>You will have to specify the sdk feature of your Xtext project (that has been created by the Xtext new project wizard); the releng and site projects will have predefined names. For the Buckminster installation directory you have 3 choices:</p>
<ul>
<li>if you have already an headless installation of Buckminster in your system you can specify the path;</li>
<li>you can install it using the link in the dialog</li>
<li>you can leave that path empty and specify it later in the build.ant generated file (or pass it on the command line when invoking ant)</li>
</ul>
<p>In any case, specifying the headless Buckminster installation path is only useful if you intend to build your projects headlessly with ant (it is not requested for building in the IDE, nor if you plan to build it with Jenkins by setting job using the Buckminster Jenkins plugin, as we will see later).</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky2.png"><img class="aligncenter size-full wp-image-154" title="xtext-bucky2" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky2.png" alt="" width="605" height="594" /></a></p>
<p>Before pressing Finish, we also want to specify the tests to launch during the headless build, so we press the button Add and we select the launch configuration in the .tests project which the Xtext wizard created for us.</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky3.png"><img class="aligncenter size-full wp-image-155" title="xtext-bucky3" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky3.png" alt="" width="489" height="528" /></a></p>
<p>If you want to build an existing Xtext project and you do not have that launch configuration, all you need to do is to simply create a new plain Junit launch configuration from the IDE, for instance, to run your existing Junit test suite, and save it in the .tests project yourself. You can also configure the headless build to run tests later on.</p>
<p>When the wizard finishes, you will end up with two additional projects</p>
<ul>
<li><strong>org.xtext.example.hellobuck.buckminster</strong> with all the Buckminster (CQUERY and RMAP, build.ant, etc.) files to build your project headlessly;</li>
<li><strong>org.xtext.example.hellobuck.site</strong> which is a feature project to create the p2 repository for your Xtext project.</li>
</ul>
<h2>Build the p2 repository from the IDE</h2>
<p>Although the .buckminster project created by the wizard is thought to be used in an headless environment, the .site project is useful also to build the p2 repository from the IDE itself! Indeed, if you created an old style update site, you could build the update site from the IDE itself. But if you switched to the new category.xml format, then building the corresponding p2 repository from the IDE is not straightforward.</p>
<p>If you want to run Buckminster from Eclipse, you first need to install it in the IDE of course, by using this repository: <em>http://download.eclipse.org/tools/buckminster/updates-4.2</em></p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky_ide_install.png"><img class="aligncenter size-full wp-image-96" title="bucky_ide_install" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky_ide_install.png" alt="" width="807" height="797" /></a></p>
<p>Before creating the p2 repository, you may want to tweak some Buckminster properties, for instance, you may want to create a buckminster.properties file in the .buckminster project (or in the .site project) like the following</p>
<pre class="brush:shell"># Where all the output should go
buckminster.output.root=${user.home}/tmp/hellobuck/build
# Where the temp files should go
buckminster.temp.root=${user.home}/tmp/hellobuck
# How .qualifier in versions should be replaced
qualifier.replacement.*=generator:lastRevision

target.os=*
target.ws=*
target.arch=*</pre>
<p>so that Buckminster will generate all its artifacts in the tmp/hellobuck directory of your home folder.</p>
<p>We now right click on the .site project, and select <em>Buckminster =&gt; Invoke Action&#8230;</em> , we select <em>site.p2</em> action, and optionally refer to the buckminster.properties file</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-run-sitep2.png"><img class="aligncenter size-full wp-image-158" title="xtext-bucky-run-sitep2" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-run-sitep2.png" alt="" width="622" height="520" /></a></p>
<p>When the action finishes, you will file the p2.site in the directory <em>$HOME/tmp/hellobuck/build/org.xtext.example.hellobuck.site_1.0.0-eclipse.feature/site.p2/</em></p>
<h2>Build with ant</h2>
<p>The wizard created for us, in the .buckminster project a <strong>build.ant</strong> file that we can use to build the project, run the tests, and create the p2 repository with ant</p>
<p>Note that this file has the location of your Buckminster headless installation path hardcoded (recall the wizard we used before for creating Buckminster projects); if that is not correct, you can still pass this information to ant when invoking it</p>
<pre class="brush:shell">ant -Dbuckminster.home=&lt;PATH&gt; -f build.ant</pre>
<p>This ant script will build your project in the directory <strong>buildroot</strong> which will be created in the directory where all your projects are located (e.g., in the workspace or in another path); in particular it will</p>
<ol>
<li>materialize the target platform for your project (the first time you run it), and this requires an Internet connection and might take some time</li>
<li>build your projects</li>
<li>run the Junit tests</li>
<li>build the p2 site repository</li>
</ol>
<p>This should be the output (where WORKSPACE is actually the location of your projects):</p>
<pre class="brush:shell">Buildfile: WORKSPACE/org.xtext.example.hellobuck.buckminster/build.ant
cleanup:
buckminster:
     [echo] IMPORTANT: Populating an empty target platform may took over 10 minutes.
     [exec] INFO:  setpref 'targetPlatformPath=WORKSPACE/buildroot/target.platform'
     [exec] WARN:  Target platform directory 'WORKSPACE/buildroot/target.platform' does not exist and will be created
     [exec] INFO:  resolve 'WORKSPACE/org.xtext.example.hellobuck.buckminster/projects-platform.cquery'
     [exec] INFO:  Resetting target platform Directory WORKSPACE/buildroot/target.platform
     [exec] INFO:  Import complete.
     [exec] INFO:  resolve 'WORKSPACE/org.xtext.example.hellobuck.buckminster/project.cquery'
     [exec] INFO:  Import complete.
     [exec] INFO:  build
     [exec] INFO:  junit '-l' 'org.xtext.example.hellobuck.tests/org.xtext.example.hellobuck.tests.launch' '--flatXML' '--output' 'WORKSPACE/buildroot/buckminster.output/test.results/org.xtext.example.hellobuck.tests.launch.xml'
     [exec] INFO:  Starting test session org.xtext.example.hellobuck.tests
     [exec] INFO:  Running test org.xtext.example.hellobuck.tests.HelloBuckCompilerTest.testGeneratedJava...
     [exec] INFO:    ...OK [0.877s]
     [exec] INFO:  Running test org.xtext.example.hellobuck.tests.HelloBuckCompilerTest.compareGeneratedJava...
     [exec] INFO:    ...OK [0.189s]
     [exec] INFO:  Running test org.xtext.example.hellobuck.tests.HelloBuckParserTest.testParsingAndValidation...
     [exec] INFO:    ...OK [0.096s]
     [exec] INFO:  Tests finished.
     [exec] INFO:  Elapsed time: 1.164 seconds.
     [exec] INFO:  Total number of tests executed: 3
     [exec] INFO:  Successful tests: 3
     [exec] INFO:  Failed tests: 0
     [exec] INFO:  Errors: 0
     [exec] INFO:  Ignored tests: 0
     [exec] INFO:  Overall status: OK
     [exec] INFO:  perform 'org.xtext.example.hellobuck.site#site.p2'
     [exec] INFO:  [start org.xtext.example.hellobuck:osgi.bundle$1.0.0.qualifier#eclipse.build]
     [exec] INFO:  [end org.xtext.example.hellobuck:osgi.bundle$1.0.0.qualifier#eclipse.build]
     [exec] INFO:  [start org.xtext.example.hellobuck:osgi.bundle$1.0.0.qualifier#manifest]
     [exec] INFO:  [end org.xtext.example.hellobuck:osgi.bundle$1.0.0.qualifier#manifest]
     [exec] INFO:  [start org.xtext.example.hellobuck:osgi.bundle$1.0.0.qualifier#bundle.jar]
     [exec] INFO:  [end org.xtext.example.hellobuck:osgi.bundle$1.0.0.qualifier#bundle.jar]
     [exec] INFO:  [start org.xtext.example.hellobuck.ui:osgi.bundle$1.0.0.qualifier#eclipse.build]
     [exec] INFO:  [end org.xtext.example.hellobuck.ui:osgi.bundle$1.0.0.qualifier#eclipse.build]
     [exec] INFO:  [start org.xtext.example.hellobuck.ui:osgi.bundle$1.0.0.qualifier#manifest]
     [exec] INFO:  [end org.xtext.example.hellobuck.ui:osgi.bundle$1.0.0.qualifier#manifest]
     [exec] INFO:  [start org.xtext.example.hellobuck.ui:osgi.bundle$1.0.0.qualifier#bundle.jar]
     [exec] INFO:  [end org.xtext.example.hellobuck.ui:osgi.bundle$1.0.0.qualifier#bundle.jar]
     [exec] INFO:  [start org.xtext.example.hellobuck.sdk:eclipse.feature$1.0.0.qualifier#manifest]
     [exec] INFO:  [end org.xtext.example.hellobuck.sdk:eclipse.feature$1.0.0.qualifier#manifest]
     [exec] INFO:  [start org.xtext.example.hellobuck.sdk:eclipse.feature$1.0.0.qualifier#feature.jar]
     [exec] INFO:  [end org.xtext.example.hellobuck.sdk:eclipse.feature$1.0.0.qualifier#feature.jar]
     [exec] INFO:  [start org.xtext.example.hellobuck:osgi.bundle$1.0.0.qualifier#source.manifest]
     [exec] INFO:  [end org.xtext.example.hellobuck:osgi.bundle$1.0.0.qualifier#source.manifest]
     [exec] INFO:  [start org.xtext.example.hellobuck:osgi.bundle$1.0.0.qualifier#source.bundle.jar]
     [exec] INFO:  [end org.xtext.example.hellobuck:osgi.bundle$1.0.0.qualifier#source.bundle.jar]
     [exec] INFO:  [start org.xtext.example.hellobuck.ui:osgi.bundle$1.0.0.qualifier#source.manifest]
     [exec] INFO:  [end org.xtext.example.hellobuck.ui:osgi.bundle$1.0.0.qualifier#source.manifest]
     [exec] INFO:  [start org.xtext.example.hellobuck.ui:osgi.bundle$1.0.0.qualifier#source.bundle.jar]
     [exec] INFO:  [end org.xtext.example.hellobuck.ui:osgi.bundle$1.0.0.qualifier#source.bundle.jar]
     [exec] INFO:  [start org.xtext.example.hellobuck.sdk:eclipse.feature$1.0.0.qualifier#source.manifest]
     [exec] INFO:  [end org.xtext.example.hellobuck.sdk:eclipse.feature$1.0.0.qualifier#source.manifest]
     [exec] INFO:  [start org.xtext.example.hellobuck.sdk:eclipse.feature$1.0.0.qualifier#source.feature.jar]
     [exec] INFO:  [end org.xtext.example.hellobuck.sdk:eclipse.feature$1.0.0.qualifier#source.feature.jar]
     [exec] INFO:  [start org.xtext.example.hellobuck.site:eclipse.feature$1.0.0.qualifier#copy.subfeatures]
     [exec] INFO:  [end org.xtext.example.hellobuck.site:eclipse.feature$1.0.0.qualifier#copy.subfeatures]
     [exec] INFO:  [start org.xtext.example.hellobuck.site:eclipse.feature$1.0.0.qualifier#copy.plugins]
     [exec] INFO:  [end org.xtext.example.hellobuck.site:eclipse.feature$1.0.0.qualifier#copy.plugins]
     [exec] INFO:  [start org.xtext.example.hellobuck.site:eclipse.feature$1.0.0.qualifier#manifest]
     [exec] INFO:  [end org.xtext.example.hellobuck.site:eclipse.feature$1.0.0.qualifier#manifest]
     [exec] INFO:  [start org.xtext.example.hellobuck.site:eclipse.feature$1.0.0.qualifier#site.p2]
     [exec] INFO:  [end org.xtext.example.hellobuck.site:eclipse.feature$1.0.0.qualifier#site.p2]
     [echo]  
     [echo] Updatesite output in: WORKSPACE/buildroot/buckminster.output/org.xtext.example.hellobuck.site_*-eclipse.feature/site.p2/
BUILD SUCCESSFUL
Total time: 3 minutes 39 seconds</pre>
<p>It will also tell you where you can find the generated p2 site.</p>
<p>IMPORTANT: there&#8217;s a <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=393976" target="_blank">bug</a> in the currently generated build.ant file, which prevent you from building with ant in Windows; until the fixed version of the wizard is released, you need to make sure that the build.ant has the right contents, as in <a href="https://github.com/LorenzoBettini/Xtext-Buckminster-Example/blob/master/org.xtext.example.hellobuck.buckminster/build.ant" target="_blank">this example source</a>.</p>
<h2>Build with Jenkins</h2>
<p>To build your Xtext project in Jenkins you can either create a Job which uses ant and the build.ant script, or create a Job which uses the <a href="https://wiki.jenkins-ci.org/display/JENKINS/Buckminster+PlugIn" target="_blank">Buckminster Jenkins plugin</a> (I&#8217;ve also <a title="Using Buckminster Plugin in Jenkins" href="http://www.lorenzobettini.it/2012/10/using-buckminster-plugin-in-jenkins/" target="_blank">blogged about that</a>). I will detail both ways. Both jobs have in common the access to the git repository</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-jenkins-git.png"><img class="aligncenter size-full wp-image-165" title="xtext-bucky-jenkins-git" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-jenkins-git.png" alt="" width="644" height="274" /></a></p>
<h3>A Job using ant</h3>
<p>This requires that you configured an ant installation in your Jenkins, and that you already have a working version of Buckminster headless in Jenkins; you need to specify them in the ant build step configuration (the screeshots, of course, refer to the paths and values for my Jenkins installation):</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-jenkins-ant1.png"><img class="aligncenter size-full wp-image-166" title="xtext-bucky-jenkins-ant1" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-jenkins-ant1.png" alt="" width="545" height="233" /></a></p>
<p>then, we configure post build actions to archive both the artifacts (the p2 repository) and the Junit results:</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-jenkins-ant2.png"><img class="aligncenter size-full wp-image-167" title="xtext-bucky-jenkins-ant2" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-jenkins-ant2.png" alt="" width="574" height="279" /></a></p>
<h3>A job using Buckminster plugin</h3>
<p>To configure a Buckminster build step, we prepare a text file in the .buckminster projects with the Buckminster commands to execute (we take inspiration from the commands.txt file that the wizard created), we call it <strong>jenkins-commands.txt</strong>:</p>
<pre class="brush:shell">resolve 'org.xtext.example.hellobuck.buckminster/projects-platform.cquery'
resolve 'org.xtext.example.hellobuck.buckminster/project.cquery'
clean
build
perform -D target.os=* -D target.ws=* -D target.arch=* org.xtext.example.hellobuck.site#buckminster.clean
perform -D target.os=* -D target.ws=* -D target.arch=* org.xtext.example.hellobuck.site#site.p2
junit -l 'org.xtext.example.hellobuck.tests/org.xtext.example.hellobuck.tests.launch' --stderr -o 'tests_output/org.xtext.example.hellobuck.tests.launch.xml'</pre>
<p>Then we configure a build step (this relies on a Buckminster installation that we have already configured in Jenkins), note that we refer to the jenkins-commands.txt we created above (an alternative would be to copy the commands directly in the text area &#8220;Commands&#8221;):</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-jenkins-buckminster1.png"><img class="aligncenter size-full wp-image-170" title="xtext-bucky-jenkins-buckminster1" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-jenkins-buckminster1.png" alt="" width="518" height="298" /></a></p>
<p>To configure the post build actions, since we used different output paths, we have to specify them accordingly (in particular, we have not used the output directory buildroot, thus the default will be used):</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-jenkins-buckminster2.png"><img class="aligncenter size-full wp-image-171" title="xtext-bucky-jenkins-buckminster2" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/xtext-bucky-jenkins-buckminster2.png" alt="" width="546" height="281" /></a></p>
<h2>Details and Customization</h2>
<p>It may be interesting to learn more about the files that the Xtext Buckminster wizard generated for you (at least, I personally found instructive to look at them, and learned something about Buckminster <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  most of which I described in <a title="Materializing and Provisioning your Target Platform as local p2 site with Buckminster" href="http://www.lorenzobettini.it/2012/11/materializing-and-provisioning-your-target-platform-as-local-p2-site-with-buckminster/" target="_blank">another post of this blog</a>). The details might also help you if you need to customize the generated files.</p>
<p>The .buckminster project contains a Component Specification (CSPEC), <strong>buckminster.cspec</strong>, which looks like</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;cs:cspec xmlns:cs="http://www.eclipse.org/buckminster/CSpec-1.0" name="org.xtext.example.hellobuck.buckminster" componentType="buckminster" version="1.0.0"&gt;
    &lt;cs:dependencies&gt;
        &lt;cs:dependency name="org.eclipse.platform" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.xtext.sdk" componentType="eclipse.feature"/&gt;
    &lt;/cs:dependencies&gt;
&lt;/cs:cspec&gt;</pre>
<p>thus, due to its dependencies, it represents the target platform for your Xtext project. If your Xtext project required some further specific dependencies to build and test, this is the place to express them!</p>
<p>For instance, in <a href="http://xsemantics.sourceforge.net/" target="_blank">an Xtext project of mine, Xsemantics</a>, I run also some SwtBot tests, which also rely on pde, thus, the dependencies in the corresponding .buckminster project&#8217;s buckminster.cspec look like</p>
<pre class="brush:xml">    &lt;cs:dependencies&gt;
        &lt;cs:dependency name="org.eclipse.platform" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.xtext.sdk" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.swtbot.eclipse" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.swtbot.eclipse.test.junit4" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.swtbot.ide" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.pde" componentType="eclipse.feature"/&gt;
    &lt;/cs:dependencies&gt;</pre>
<p>To materialize components and dependencies with Buckminster, you need a Resource Map (RMAP), and the wizard created two maps: one containing p2 repositories location (for materializing the features of your target platform), called <strong>projects-platform.rmap</strong> and one for binding your projects to the workspace (when building headlessly), called <strong>project.rmap</strong>.</p>
<p>projects-platform.rmap looks like</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rm:rmap xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0" xmlns:rm="http://www.eclipse.org/buckminster/RMap-1.0"&gt;
  &lt;rm:property key="eclipse.download" value="http://download.eclipse.org"/&gt;
  &lt;rm:property key="xtext.p2.repository" value="${eclipse.download}/modeling/tmf/xtext/updates/composite/releases/"/&gt;
  &lt;rm:property key="eclipse.target.platform" value="${eclipse.download}/releases/juno"/&gt;
  &lt;rm:redirect pattern="org.xtext.example.hellobuck.buckminster" href="project.rmap"/&gt;
  &lt;rm:locator pattern="^org\.eclipse\.(?:xtext|xpand|xtend|xtend2|emf\.mwe|emf\.mwe2)(?:\..+)?$" searchPathRef="xtext"/&gt;
  &lt;rm:locator pattern="^com\.google.*" searchPathRef="xtext"/&gt;
  &lt;rm:locator pattern="^org\.antlr.*" searchPathRef="xtext"/&gt;
  &lt;rm:locator pattern="javax.inject" searchPathRef="xtext"/&gt;
  &lt;rm:locator searchPathRef="eclipse"/&gt;
  &lt;rm:searchPath name="xtext"&gt;
    &lt;rm:provider componentTypes="osgi.bundle,eclipse.feature" readerType="p2" source="false"&gt;
      &lt;rm:property key="buckminster.source" value="false"/&gt;
      &lt;rm:uri format="{0}"&gt;
        &lt;bc:propertyRef key="xtext.p2.repository"/&gt;
      &lt;/rm:uri&gt;
    &lt;/rm:provider&gt;
  &lt;/rm:searchPath&gt;
  &lt;rm:searchPath name="eclipse"&gt;
    &lt;rm:provider componentTypes="eclipse.feature,osgi.bundle" readerType="p2" source="false" mutable="false"&gt;
      &lt;rm:property key="buckminster.source" value="false"/&gt;
      &lt;rm:property key="buckminster.mutable" value="false"/&gt;
      &lt;rm:uri format="{0}"&gt;
        &lt;bc:propertyRef key="eclipse.target.platform"/&gt;
      &lt;/rm:uri&gt;
    &lt;/rm:provider&gt;
  &lt;/rm:searchPath&gt;
&lt;/rm:rmap&gt;</pre>
<p>This basically tells Buckminster to take all Xtext stuff (including additional components like Google Guice and Antlr) from the Xtext main repository, and to use the main Eclipse Juno release repository for everything else. However, it also redirects to project.rmap for resolving the main Buckminster component of our project org.xtext.example.hellobuck.buckminster.</p>
<p>Again, if your target platform needs additional features from different sites, this is the place where to express them; reusing the example above which also needed SwtBot the rmap would also have these additional stuff:</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rm:rmap xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0" xmlns:rm="http://www.eclipse.org/buckminster/RMap-1.0"&gt;
  ...
  &lt;rm:property key="swtbot.repository" value="${eclipse.download}/technology/swtbot/helios/dev-build/update-site"/&gt;
  &lt;rm:property key="orbit.repository" value="${eclipse.download}/tools/orbit/downloads/drops/R20120526062928/repository/"/&gt;
  ...
  &lt;rm:locator pattern="^org\.hamcrest*" searchPathRef="orbit"/&gt;
  &lt;rm:locator pattern="^org\.eclipse\.(?:swtbot)(?:\..+)?$" searchPathRef="swtbot"/&gt;
  ...
  &lt;rm:searchPath name="swtbot"&gt;
    &lt;rm:provider componentTypes="osgi.bundle,eclipse.feature" readerType="p2" source="false"&gt;
      &lt;rm:property key="buckminster.source" value="false"/&gt;
      &lt;rm:uri format="{0}"&gt;
        &lt;bc:propertyRef key="swtbot.repository"/&gt;
      &lt;/rm:uri&gt;
    &lt;/rm:provider&gt;
  &lt;/rm:searchPath&gt;
  &lt;rm:searchPath name="orbit"&gt;
    &lt;rm:provider componentTypes="osgi.bundle,eclipse.feature" readerType="p2" source="false"&gt;
      &lt;rm:property key="buckminster.source" value="false"/&gt;
      &lt;rm:uri format="{0}"&gt;
        &lt;bc:propertyRef key="orbit.repository"/&gt;
      &lt;/rm:uri&gt;
    &lt;/rm:provider&gt;
  &lt;/rm:searchPath&gt;
  ...
&lt;/rm:rmap&gt;</pre>
<p>The project.rmap tells Buckminster where to find the projects of our Xtext project (so that it can bind it to the workspace when building headlessly):</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rm:rmap xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0" xmlns:rm="http://www.eclipse.org/buckminster/RMap-1.0"&gt;
  &lt;rm:property key="projects.location" value="${workspace.root}"/&gt;
  &lt;rm:locator pattern="^org.xtext.example.hellobuck(?:\..+)?$" searchPathRef="project"/&gt;
  &lt;rm:searchPath name="project"&gt;
    &lt;rm:provider componentTypes="eclipse.feature,osgi.bundle,buckminster" readerType="local" mutable="false"&gt;
      &lt;rm:property key="buckminster.mutable" value="false"/&gt;
      &lt;rm:uri format="{0}/{1}"&gt;
        &lt;bc:propertyRef key="projects.location"/&gt;
        &lt;bc:propertyRef key="buckminster.component"/&gt;
      &lt;/rm:uri&gt;
    &lt;/rm:provider&gt;
  &lt;/rm:searchPath&gt;
&lt;/rm:rmap&gt;</pre>
<p>This rmap assumes that all the Eclipse projects of your Xtext project are in the same base directory; if this is not the case, because you split them, for instance, in plugins, features, doc, etc. directories, then you need to tweak this rmap accordingly, for instance, again, taken from <a href="http://xsemantics.sourceforge.net/" target="_blank">Xsemantics</a>,</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rm:rmap xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0"
	xmlns:rm="http://www.eclipse.org/buckminster/RMap-1.0"&gt;
	&lt;rm:property key="projects.location" value="${workspace.root}" /&gt;

	&lt;rm:locator pattern="^it.xsemantics(?:\..+)?$"
		searchPathRef="project" /&gt;

	&lt;rm:searchPath name="project"&gt;
		&lt;rm:provider componentTypes="eclipse.feature,buckminster" readerType="local"
			mutable="false"&gt;
			&lt;rm:uri format="{0}/releng/{1}"&gt;
				&lt;bc:propertyRef key="workspace.root" /&gt;
				&lt;bc:propertyRef key="buckminster.component" /&gt;
			&lt;/rm:uri&gt;
		&lt;/rm:provider&gt;
		&lt;rm:provider componentTypes="eclipse.feature" readerType="local"
			mutable="false"&gt;
			&lt;rm:uri format="{0}/features/{1}"&gt;
				&lt;bc:propertyRef key="workspace.root" /&gt;
				&lt;bc:propertyRef key="buckminster.component" /&gt;
			&lt;/rm:uri&gt;
		&lt;/rm:provider&gt;
		&lt;rm:provider componentTypes="osgi.bundle" readerType="local"
			mutable="false"&gt;
			&lt;rm:uri format="{0}/plugins/{1}"&gt;
				&lt;bc:propertyRef key="workspace.root" /&gt;
				&lt;bc:propertyRef key="buckminster.component" /&gt;
			&lt;/rm:uri&gt;
		&lt;/rm:provider&gt;
		&lt;rm:provider componentTypes="osgi.bundle" readerType="local"
			mutable="false"&gt;
			&lt;rm:uri format="{0}/doc/{1}"&gt;
				&lt;bc:propertyRef key="workspace.root" /&gt;
				&lt;bc:propertyRef key="buckminster.component" /&gt;
			&lt;/rm:uri&gt;
		&lt;/rm:provider&gt;
		&lt;rm:provider componentTypes="osgi.bundle" readerType="local"
			mutable="false"&gt;
			&lt;rm:uri format="{0}/examples/{1}"&gt;
				&lt;bc:propertyRef key="workspace.root" /&gt;
				&lt;bc:propertyRef key="buckminster.component" /&gt;
			&lt;/rm:uri&gt;
		&lt;/rm:provider&gt;
		&lt;rm:provider componentTypes="osgi.bundle" readerType="local"
			mutable="false"&gt;
			&lt;rm:uri format="{0}/tests/{1}"&gt;
				&lt;bc:propertyRef key="workspace.root" /&gt;
				&lt;bc:propertyRef key="buckminster.component" /&gt;
			&lt;/rm:uri&gt;
		&lt;/rm:provider&gt;
		&lt;rm:provider componentTypes="eclipse.feature,osgi.bundle,buckminster"
			readerType="local" mutable="false"&gt;
			&lt;rm:property key="buckminster.mutable" value="false" /&gt;
			&lt;rm:uri format="{0}/{1}"&gt;
				&lt;bc:propertyRef key="projects.location" /&gt;
				&lt;bc:propertyRef key="buckminster.component" /&gt;
			&lt;/rm:uri&gt;
		&lt;/rm:provider&gt;
	&lt;/rm:searchPath&gt;
&lt;/rm:rmap&gt;</pre>
<p>Then, you have to Component Query files (CQUERY): projects-platform.cquery, to materialize the target platform, and project.cquery, to materialize your projects in the workspace. The first one could also be used in the IDE to actually materialize the target platform in your workspace (instead of using a target definition file); the second one is useful when building headless.</p>
<p><strong>projects-platform.cquery</strong>:</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" resourceMap="projects-platform.rmap"&gt;
    &lt;cq:rootRequest name="org.xtext.example.hellobuck.buckminster" componentType="buckminster"/&gt;
    &lt;cq:property key="target.arch" value="*"/&gt;
    &lt;cq:property key="target.os" value="*"/&gt;
    &lt;cq:property key="target.ws" value="*"/&gt;
    &lt;cq:advisorNode namePattern="^.*\.source$" skipComponent="true"/&gt;
&lt;/cq:componentQuery&gt;</pre>
<p>Note that this cquery has an advisor node to skip .source components: thus, the materialized target platform will not contain the sources for all the features. This is useful headlessly to reduce the time to materialize the target platform. But if you use it also for materializing the target platform in the IDE, then sources are useful to inspect Java classes, and you might want to remove this advisor node (or simply create another cquery only to be used in the IDE, without that advisor node). This query refers to projects-platform.rmap.</p>
<p><strong>project.cquery</strong>:</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" resourceMap="project.rmap"&gt;
    &lt;cq:rootRequest name="org.xtext.example.hellobuck.site" componentType="eclipse.feature"/&gt;
&lt;/cq:componentQuery&gt;</pre>
<p>As it usually happens when using Buckminster, the cquery for materializing the projects in the (headless) workspace refers to a single feature project which, transitively refers to all the bundles and additional features of your application. Usually, this is the feature project for building the p2 repository, like in this case.</p>
<p>&#8220;But wait! the site feature project does not refer to test projects, since I do not want to include them in my p2 repository! So, how can Buckminster run my tests headlessly if they are not materialized?&#8221;</p>
<p>If you look at the feature project .site, you will note that it contains a Component Extension (CSPEX) which allows to extend the automatically inferred Component Specification for the feature project with additional specifications. In this case the buckminster.cspex contains</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;cs:cspecExtension xmlns:com="http://www.eclipse.org/buckminster/Common-1.0" xmlns:cs="http://www.eclipse.org/buckminster/CSpec-1.0"&gt;
	&lt;cs:dependencies&gt;
		&lt;cs:dependency name="org.xtext.example.hellobuck.tests" componentType="osgi.bundle" /&gt;
	&lt;/cs:dependencies&gt;
&lt;/cs:cspecExtension&gt;</pre>
<p>You see that this specification adds a dependency to the org.xtext.example.hellobuck.tests project, so that, when Buckminster materializes org.xtext.example.hellobuck.site, and its dependencies, it will also materialize org.xtext.example.hellobuck.tests. You can use this technique to materialize additional projects; for instance, in from <a href="http://xsemantics.sourceforge.net/" target="_blank">Xsemantics</a>, I have a main feature for tests, and a tests project for each example, thus buckminster.cspex reads as follows</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;cs:cspecExtension xmlns:com="http://www.eclipse.org/buckminster/Common-1.0" xmlns:cs="http://www.eclipse.org/buckminster/CSpec-1.0"&gt;
	&lt;cs:dependencies&gt;
		&lt;cs:dependency name="it.xsemantics.example.fj.tests" componentType="osgi.bundle" /&gt;
		&lt;cs:dependency name="it.xsemantics.example.expressions.tests" componentType="osgi.bundle" /&gt;
		&lt;cs:dependency name="it.xsemantics.example.lambda.tests" componentType="osgi.bundle" /&gt;
		&lt;cs:dependency name="it.xsemantics.tests.feature" componentType="eclipse.feature" /&gt;
	&lt;/cs:dependencies&gt;
&lt;/cs:cspecExtension&gt;</pre>
<p>Finally, in the .site project, you will also find the feature.xml</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;feature id="org.xtext.example.hellobuck.site"
	label="org.xtext.example.hellobuck.site Feature"
	version="1.0.0.qualifier"&gt;
	&lt;includes
		id="org.xtext.example.hellobuck.sdk"
		version="0.0.0"/&gt;
&lt;/feature&gt;</pre>
<p>which includes the .sdk feature of your project (Remember: when building the site.p2 on a feature project with Buckminster, you will build a p2 repository NOT for the very feature, but for the included features), and the category.xml to give categories to your features in the p2 repository:</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;site&gt;
	&lt;feature id="org.xtext.example.hellobuck.sdk" version="0.0.0"&gt;
		&lt;category name="main"/&gt;
	&lt;/feature&gt;
	&lt;feature id="org.xtext.example.hellobuck.sdk.source" version="0.0.0"&gt;
		&lt;category name="main.source"/&gt;
	&lt;/feature&gt;
   &lt;category-def name="main" label="Hellobuck"/&gt;
   &lt;category-def name="main.source" label="Source for Hellobuck"/&gt;
&lt;/site&gt;</pre>
<p>Note that the .sdk.source feature is not a &#8220;real&#8221; feature project in your workspace, but, by default, Buckminster will automatically build a source jar for all your features and bundles.</p>
<p>That&#8217;s all! Many thanks to the author of this wizard, <a href="https://plus.google.com/u/0/109977816718694007083" target="_blank">Dennis Hübner</a>, for making it and for many suggestions!</p>
<p>Have fun with Bucky and Xtext <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lorenzobettini.it/2012/11/building-xtext-projects-with-buckminster/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Install Adobe Reader in Ubuntu 12.10 Quantal Quetzal 64bit</title>
		<link>http://www.lorenzobettini.it/2012/11/install-adobe-reader-in-ubuntu-12-10-quantal-quetzal-64bit/</link>
		<comments>http://www.lorenzobettini.it/2012/11/install-adobe-reader-in-ubuntu-12-10-quantal-quetzal-64bit/#comments</comments>
		<pubDate>Sun, 11 Nov 2012 16:27:17 +0000</pubDate>
		<dc:creator>Lorenzo Bettini</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.lorenzobettini.it/?p=184</guid>
		<description><![CDATA[Acrobat Reader used to be available from Ubuntu Partner repository, but it is not available anymore in Ubuntu 12.10 Quantal Quetzal! So you have to download the .deb package from adobe.com and install it: http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.1/enu/AdbeRdr9.5.1-1_i386linux_enu.deb However, if you have a 64bit system, do not forget to install also these packages: sudo apt-get install libxml2:i386 ia32-libs [...]]]></description>
				<content:encoded><![CDATA[<p>Acrobat Reader used to be available from Ubuntu Partner repository, but it is not available anymore in Ubuntu 12.10 Quantal Quetzal!</p>
<p>So you have to download the .deb package from adobe.com and install it:</p>
<p><a href="http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.1/enu/AdbeRdr9.5.1-1_i386linux_enu.deb" target="_blank">http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.1/enu/AdbeRdr9.5.1-1_i386linux_enu.deb</a></p>
<p>However, if you have a <strong>64bit</strong> system, do not forget to install also these packages:</p>
<pre class="brush:shell">sudo apt-get install libxml2:i386 ia32-libs</pre>
<p>Otherwise, acroread will fail</p>
<blockquote><p>acroread: error while loading shared libraries: libxml2.so.2: cannot open shared object file: No such file or directory</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.lorenzobettini.it/2012/11/install-adobe-reader-in-ubuntu-12-10-quantal-quetzal-64bit/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Materializing and Provisioning your Target Platform as local p2 site with Buckminster</title>
		<link>http://www.lorenzobettini.it/2012/11/materializing-and-provisioning-your-target-platform-as-local-p2-site-with-buckminster/</link>
		<comments>http://www.lorenzobettini.it/2012/11/materializing-and-provisioning-your-target-platform-as-local-p2-site-with-buckminster/#comments</comments>
		<pubDate>Wed, 07 Nov 2012 18:46:09 +0000</pubDate>
		<dc:creator>Lorenzo Bettini</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[buckminster]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://www.lorenzobettini.it/?p=80</guid>
		<description><![CDATA[This post was inspired by another blog post I had found on the web when trying to build a p2 site corresponding to a target platform defined for my projects. For an year I&#8217;ve been using Buckminster for building my Eclipse projects (especially when I had problems building my Xtext projects with Maven/Tycho, so that [...]]]></description>
				<content:encoded><![CDATA[<p>This post was inspired by <a href="http://nirmalsasidharan.wordpress.com/2010/10/09/provisioning-your-target-platform-as-local-p2-site/" target="_blank">another blog post</a> I had found on the web when trying to build a p2 site corresponding to a target platform defined for my projects. For an year I&#8217;ve been using <a href="http://www.eclipse.org/buckminster/" target="_blank">Buckminster</a> for building my Eclipse projects (especially when I had problems building my Xtext projects with Maven/Tycho, so that I decided to switch to Buckminster).</p>
<p>Having a p2 site for the current platform has some advantages, I guess:</p>
<ul>
<li>Building RCP products will be easier (Buckminster relies on p2 directory, and all the bundles for building the product will be searched for in p2 sites);</li>
<li>It represents a (local) mirror for the target platform (for easier access).</li>
</ul>
<p>In this post/tutorial I&#8217;ll describe my experiences</p>
<ul>
<li>Define a target platform with Buckminster mechanisms (CSPEC, CQUERY and RMAP) instead of relying on target definitions with Eclipse Target Editor;</li>
<li>Build a p2 site with the contents of the so defined target platform.</li>
</ul>
<p>In this tutorial we will create a target platform consisting of the following features</p>
<ul>
<li>org.eclipse.rcp</li>
<li>org.eclipse.rcp.source</li>
<li>org.eclipse.emf.sdk</li>
<li>org.eclipse.equinox.executable</li>
</ul>
<p>The code is available at: <a href="https://github.com/LorenzoBettini/Target_to_p2_with_Buckminster" target="_blank">https://github.com/LorenzoBettini/Target_to_p2_with_Buckminster</a>,</p>
<p>This tutorial will show how to materialize the target platform and build the p2 sites</p>
<ul>
<li>in the IDE,</li>
<li>headlessly from the command line through ant, and</li>
<li>headlessly in Jenkins.</li>
</ul>
<p>For the IDE you will need to install Buckminster main features in Eclipse, using the update site <em>http://download.eclipse.org/tools/buckminster/updates-4.2</em>.</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky_ide_install.png"><img class="aligncenter size-full wp-image-96" title="bucky_ide_install" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky_ide_install.png" alt="" width="807" height="797" /></a></p>
<p><strong>NOTE:</strong> sometimes Buckminster&#8217;s cache in the IDE becomes stale, and you might experience errors about missing components; you might want to restart Eclipse and usually this makes the problem go away.</p>
<h2>Why not the Target Editor?</h2>
<p>I experienced many problems when using Eclipse Target Editor (based on p2 sites); I found it quite unreliable, especially for modifying a target definition, for updating a target definition (the Update button works 1 time out of 10); moreover, it takes some time for the target to be resolved (every time you reopen a target definition with the editor).</p>
<p>Furthermore, when you define a target for building RCP products, then you usually want to be able to build for several platforms, not only the current one; in these cases you have a checkbox to select (<em>&#8220;Include all environments</em>&#8220;):</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/target_editor_screenshot.png"><img class="aligncenter size-full wp-image-81" title="target_editor_screenshot" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/target_editor_screenshot.png" alt="" width="631" height="183" /></a></p>
<p>But in that case, you must give up on <em>&#8220;Include required software&#8221;</em>, and this might get you into troubles about missing bundles, when building your product, if it needs to include more involved features (besides the standard &#8220;Eclipse RCP SDK&#8221; and &#8220;Eclipse Platform Launcher Executables&#8221;); for instance, if your product needs also EMF Eclipse Modeling Framework SDK (which is required when using Eclipse RCP 4.2).</p>
<p>Defining a target platform the &#8220;Buckminster way&#8221; does not have this limitation (and, honestly, once you get familiar with that, it&#8217;s much faster than using the target editor).</p>
<h2>Defining a Target Platform with Buckminster</h2>
<p>Although Buckminster is able to materialize a target platform starting from a standard target definition, it also provides an alternative way:</p>
<ol>
<li>Define a component which represents all the target features by creating a project and a custom CSPEC; this CSPEC basically declares the target features as dependencies</li>
<li>Define a resource map (RMAP) which tells Buckminster where to find these dependencies; we will use of course official Eclipse p2 site repositories for these dependencies</li>
<li>Define a component query (CQUERY) which materializes the component representing the target platform</li>
</ol>
<p>In our example, this project is called <strong>bucky.example.rcpemf.target</strong> (it is a generic project without any nature). This is the project where we will define all Buckminster files (CSPEC, CQUERY and RMAP). In this project we define the component specification: <strong>buckminster.cspec</strong></p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;cs:cspec xmlns:cs="http://www.eclipse.org/buckminster/CSpec-1.0" name="bucky.example.rcpemf.target" componentType="buckminster" version="1.0.0"&gt;
    &lt;cs:dependencies&gt;
        &lt;cs:dependency name="org.eclipse.emf.sdk" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.equinox.executable" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.rcp" componentType="eclipse.feature"/&gt;
        &lt;cs:dependency name="org.eclipse.rcp.source" componentType="eclipse.feature"/&gt;
    &lt;/cs:dependencies&gt;
&lt;/cs:cspec&gt;</pre>
<p>Here we use the name of the features for our target platform. (NOTE: <em>org.eclipse.rcp</em> and <em>org.eclipse.rcp.source</em>, together, correspond to <em>Eclipse RCP SDK</em>.)</p>
<p>The rmap (which we call <strong>target-platform.rmap</strong>) is defined as follows:</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rm:rmap xmlns:rm="http://www.eclipse.org/buckminster/RMap-1.0"
	xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0"&gt;

	&lt;rm:property key="projects.location" value="${workspace.root}" /&gt;

	&lt;rm:searchPath name="juno-releases"&gt;
		&lt;rm:provider componentTypes="osgi.bundle,eclipse.feature"
			readerType="p2" source="false" mutable="false"&gt;
			&lt;rm:uri format="http://download.eclipse.org//releases/juno" /&gt;
		&lt;/rm:provider&gt;
	&lt;/rm:searchPath&gt;
	&lt;rm:searchPath name="juno-updates"&gt;
		&lt;rm:provider componentTypes="osgi.bundle,eclipse.feature"
			readerType="p2" source="false" mutable="false"&gt;
			&lt;rm:uri format="http://download.eclipse.org/eclipse/updates/4.2" /&gt;
		&lt;/rm:provider&gt;
	&lt;/rm:searchPath&gt;
	&lt;rm:searchPath name="local-source"&gt;
		&lt;rm:provider componentTypes="eclipse.feature,osgi.bundle,buckminster"
			readerType="local" mutable="false"&gt;
			&lt;rm:property key="buckminster.mutable" value="false" /&gt;
			&lt;rm:uri format="{0}/{1}"&gt;
				&lt;bc:propertyRef key="projects.location" /&gt;
				&lt;bc:propertyRef key="buckminster.component" /&gt;
			&lt;/rm:uri&gt;
		&lt;/rm:provider&gt;
	&lt;/rm:searchPath&gt;
	&lt;rm:locator searchPathRef="local-source" failOnError="false" /&gt;
	&lt;rm:locator searchPathRef="juno-releases" failOnError="false" /&gt;
	&lt;rm:locator searchPathRef="juno-updates" failOnError="true" /&gt;
&lt;/rm:rmap&gt;</pre>
<p>In our case we use the two main Eclipse p2 repositories (if the features you need are available from other p2 repositories, you will need to provide p2 reader types for these repositories as well). We will not use regular expressions for specifying the source p2 repositories, since there are no ambiguities in this example; instead, we simply specify the locators in the order we desire (preferring juno release site to juno updates). Note that we also have a search path for local sources. This is useful for building headlessly, so that Buckminster is able to find, resolve and bind to the workspace our own projects.</p>
<p>Finally, the component query (which we call <strong>target-platform.cquery</strong>) is defined as</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" resourceMap="target-platform.rmap"&gt;
    &lt;cq:rootRequest name="bucky.example.rcpemf.target" componentType="buckminster"/&gt;
    &lt;cq:property key="target.arch" value="*"/&gt;
    &lt;cq:property key="target.os" value="*"/&gt;
    &lt;cq:property key="target.ws" value="*"/&gt;
&lt;/cq:componentQuery&gt;</pre>
<p>Thus we request the component corresponding to our project <strong>bucky.example.rcpemf.target</strong>. Note that we specify that we are not interested in any specific architecture, so that we will have a target platform for all platforms/environments/architectures. Note also that in the cquery we reference the above defined rmap.</p>
<h2>Materializing the Target Platform</h2>
<p>We can now materialize the target platform so defined by opening the target-platform.cquery with Buckminster corresponding editor:</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target6-cquery-editor.png"><img class="aligncenter size-full wp-image-85" title="bucky.rcp.target6-cquery-editor" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target6-cquery-editor.png" alt="" width="749" height="470" /></a></p>
<p>WAIT: If you pressed the &#8220;Resolve and Materialize&#8221; now, Buckminster would materialize the target platform in the directory <em>tp</em> of a hidden project in your workspace (<em>.buckminster</em>). Moreover, by default, the created target platform is based on the configuration of the currently running Eclipse instance. If you want to start from a plain and empty platform (just like you do with a standard target definition with the target editor), there are a few more steps to perform:</p>
<ol>
<li>Create an empty target platform manually that contains one single and empty directory.</li>
<li>Set this target platform active.</li>
<li>A subsequent resolution/materialization will use that platform.</li>
</ol>
<p>You can specify any directory of your filesystem, in any case, make sure the directory you choose already exists.</p>
<p>One possible way of doing this, as <a href="http://wiki.eclipse.org/Extending_or_Contributing_to_Buckminster#Prepare_an_empty_target_platform" target="_blank">illustrated also here</a>, is</p>
<ol>
<li>Create a new general project named <strong>TP</strong> (or some name of your preference) in the workspace</li>
<li>In<em> &#8220;Window&#8221;</em> =&gt; <em>&#8220;Preferences&#8221; =&gt;</em> <em>&#8220;Plug-in Development&#8221; =&gt;</em> <em>&#8220;Target Platform&#8221;<br />
</em>Select Add&#8230;</li>
<li>Start with an empty target definition</li>
<li>Enter <strong>TP</strong> in the <em>Name:</em> field (or some name of your preference)</li>
<li>Add a directory</li>
<li>Click on <em>&#8220;Variables&#8230;&#8221; s</em>croll down and select <em>&#8220;workspace_loc&#8221;</em> and then type <strong>TP</strong> in the <em>Argument:</em> field</li>
</ol>
<p>This procedure is shown by the following screenshots.</p>
<p>NOTE: these additional steps are not required when building headlessly</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target2.png"><img class="aligncenter size-full wp-image-89" title="define_new_target1" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/define_new_target1.png" alt="" width="708" height="673" /><img class="aligncenter size-full wp-image-87" title="bucky.rcp.target2" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target2.png" alt="" width="726" height="633" /></a><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target32.png"><img class="aligncenter size-full wp-image-139" title="bucky.rcp.target3" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target32.png" alt="" width="666" height="593" /></a><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target5.png"><img class="aligncenter size-full wp-image-90" title="bucky.rcp.target4" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target4.png" alt="" width="603" height="508" /><img class="aligncenter size-full wp-image-135" title="bucky.rcp.target5" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target5.png" alt="" width="512" height="618" /></a><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target5-bis.png"><img class="aligncenter size-full wp-image-136" title="bucky.rcp.target5-bis" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target5-bis.png" alt="" width="547" height="450" /></a><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target6-bis2.png"><img class="aligncenter size-full wp-image-137" title="bucky.rcp.target6-bis2" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.rcp_.target6-bis2.png" alt="" width="649" height="585" /></a></p>
<p>Once you pressed Finish and set this new target as the active target platform, you&#8217;re ready to materialize the cquery from the cquery editor. Of course, it might take some time for downloading all the features. Once the materialization is finished, if you followed the above procedure and created a general project TP in your workspace, you can see the materialized target platform</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.target.reset1_.png"><img class="aligncenter size-full wp-image-143" title="bucky.target.reset1" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky.target.reset1_.png" alt="" width="331" height="182" /></a></p>
<h2>Create a feature for the p2 site for your target platform</h2>
<p>Once the target platform is resolved (you can also have a look at the current new target platform from the Eclipse preferences), we are ready to create a feature that we use to create the p2 site corresponding to our target platform.</p>
<p>We thus create a new feature project, that we call <strong>bucky.example.rcpemf.target.site</strong>, and we initialize it with all the bundles (plugins and fragments) of the current target platform (if you have other bundle projects in your workspace, make sure to unselect such additional workspace projects)</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/new_feature_with_all_tp_plugins.png"><img class="aligncenter size-full wp-image-97" title="new_feature_with_all_tp_plugins" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/new_feature_with_all_tp_plugins.png" alt="" width="624" height="687" /></a></p>
<p>Before creating the p2 site, you may want to create a <strong>buckminster.properties</strong> (e.g., in the main project <strong>bucky.example.rcpemf.target</strong>) where we set some properties for Buckminster (e.g., that we want to build a site for all environments, and that we want the site to be created in a specific folder, in this example /tmp/bucky):</p>
<pre class="brush:shell"># Where all the output should go
buckminster.output.root=/tmp/bucky/build
# Where the temp files should go
buckminster.temp.root=/tmp/bucky
# How .qualifier in versions should be replaced
qualifier.replacement.*=generator:lastRevision

target.os=*
target.ws=*
target.arch=*</pre>
<p>We are now ready to build a p2 site for this feature with Buckminster:</p>
<ol>
<li>right click on the <strong>bucky.example.rcpemf.target.site</strong> project</li>
<li>select <em>Buckminster -&gt; Invoke Action&#8230;</em></li>
<li>select the action <strong>site.p2</strong> (and, additionally, select the buckminster.properties file above)</li>
</ol>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/run_site_p2.png"><img class="aligncenter size-full wp-image-100" title="run_site_p2" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/run_site_p2.png" alt="" width="656" height="528" /></a><br />
If you used the same property file, you can find the site.p2 in <em>/tmp/bucky/build/bucky.example.rcpemf.target.site_1.0.0-eclipse.feature/site.p2/</em> .</p>
<p>The p2 site you&#8217;ve just created could already be used, for instance, for building your RCP product with Buckminster through the p2 director. However, as it is, it contains only bundles, no (installable) features, thus it cannot be used, for instance, as a mirror for your target platform&#8230; see the next section</p>
<h2>Create a feature for the p2 MIRROR site for your target platform</h2>
<p>We create a new feature project <strong>bucky.example.rcpemf.target.mirror.site</strong>, and, as before, we initialize it with all the bundles (plugins and fragments) of the current target platform (if you have other bundle projects in your workspace, make sure to unselect such additional workspace projects); but this time, once the feature project is created, we also add to the feature.xml all the features that we used to create our target platform:</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/mirror_site_feature.png"><img class="aligncenter size-full wp-image-105" title="mirror_site_feature" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/mirror_site_feature.png" alt="" width="386" height="428" /></a></p>
<p>Let&#8217;s run the action site.p2 (using the same buckminster.properties file) on this new feature project. This time, we will end up with a p2 site with all the installable features of our target platform! You can verify this by using the Eclipse install new features menu and using as repository the one just created (if you used the same output directory it will be located at <em>/tmp/bucky/build/bucky.example.rcpemf.target.mirror.site_1.0.0-eclipse.feature/site.p2/</em>).</p>
<p>Even more, you might create a target definition file, open it with the Eclipse target editor, and create a target definition using your local mirror!</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky_target_def_from_mirror.png"><img class="aligncenter size-full wp-image-107" title="bucky_target_def_from_mirror" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/bucky_target_def_from_mirror.png" alt="" width="1384" height="745" /></a></p>
<h2>Headless execution from the command line</h2>
<p>If you want to materialize the target platform and build the p2 site from the command line, you need to install the headless version of Buckminster.</p>
<p>For instance, you download the <strong>director</strong> from <a href="http://www.eclipse.org/buckminster/downloads.html" target="_blank">http://www.eclipse.org/buckminster/downloads.html</a> and then you run the director as follows</p>
<pre class="brush:shell">director -r \
   http://download.eclipse.org/tools/buckminster/headless-4.2/ \
   -d &lt;WHERE_TO_INSTALL&gt; -p Buckminster \
   -i org.eclipse.buckminster.cmdline.product \
   -i org.eclipse.buckminster.core.headless.feature.feature.group \
   -i org.eclipse.buckminster.pde.headless.feature.feature.group</pre>
<p>Headlessly, we will need to</p>
<ol>
<li>resolve the cquery for the target platform (that we already showed above);</li>
<li>resolve the cquery for the site feature, (in this case, it is the one for the mirror site), <strong>mirror-project.cquery</strong>:
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" resourceMap="target-platform.rmap"&gt;
    &lt;cq:rootRequest name="bucky.example.rcpemf.target.mirror.site" componentType="eclipse.feature"/&gt;
    &lt;cq:property key="target.arch" value="*"/&gt;
    &lt;cq:property key="target.os" value="*"/&gt;
    &lt;cq:property key="target.ws" value="*"/&gt;
&lt;/cq:componentQuery&gt;</pre>
<p>Note we reuse the same rmap we saw before. This way, during the materialization of the mirror site feature, possible additional dependencies will be resolved by Buckminster and added to the target platform;</li>
<li>perform the site.p2 action (before we also perform a buckminster.clean) on the component of the mirror site</li>
</ol>
<p>We then write an ANT file, <strong>build.ant</strong>, in the project <strong>bucky.example.rcpemf.target</strong><strong></strong>, as follows (this was inspired by the one generated by the Xtext wizard, developed by <a href="https://plus.google.com/u/0/109977816718694007083" target="_blank">Dennis Hübner</a> &#8211; <a title="Building Xtext projects with Buckminster" href="http://www.lorenzobettini.it/2012/11/building-xtext-projects-with-buckminster/" target="_blank">I&#8217;ve blogged about that</a>, and from the one that can be found <a href="https://github.com/micahhainline/lightning/blob/master/buckminster.build.feature/build.xml" target="_blank">here</a>):</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!--
     Buckminster Headless - build

     buckminster.home must be specified on the command line, e.g.,
         ant -Dbuckminster.home=/home/bettini/buckminster -f build.ant

     Properties:
         WORKSPACE              Eclipse workspace location, or hudson job workspace
         build.root             Where to build? WARNING: This folder will be cleaned up, so do not point to user.home or something important
                            Default: ${WORKSPACE}/buildroot
        buckminster.home    Buckminster headless to use. See http://www.eclipse.org/buckminster/downloads.html
        projects.location    Where to find projects to build?
                            Default: ${WORKSPACE}
--&gt;
&lt;project name="Buckminster Headless" default="buckminster"&gt;
    &lt;property name="WORKSPACE" location="${ant.file}/../../" /&gt;
    &lt;property name="build.root" location="${WORKSPACE}/buildroot" /&gt;
    &lt;property name="projects.location" location="${WORKSPACE}" /&gt;
    &lt;property name="resolve.commands.file" location="${projects.location}/bucky.example.rcpemf.target/headless-resolve-commands.txt" /&gt;
    &lt;property name="perform.commands.file" location="${projects.location}/bucky.example.rcpemf.target/headless-perform-commands.txt" /&gt;
    &lt;property name="target.platform" value="target.platform" /&gt;

    &lt;target name="buckminster" depends="cleanup" description="description"&gt;
        &lt;fail unless="buckminster.home" message="buckminster.home must be specified." /&gt;

        &lt;echo message="IMPORTANT: Populating an empty target platform may took over 10 minutes." /&gt;

        &lt;java fork="true" dir="${buckminster.home}" logError="true" classname="org.eclipse.core.launcher.Main" failonerror="true"&gt;
            &lt;classpath&gt;
                &lt;fileset dir="${buckminster.home}/plugins"&gt;
                    &lt;include name="org.eclipse.equinox.launcher_*.jar" /&gt;
                &lt;/fileset&gt;
            &lt;/classpath&gt;
            &lt;arg line='-update' /&gt;
            &lt;arg line='-data "${build.root}/buckminster.workspace"' /&gt;
            &lt;arg line='-configuration "${build.root}/configuration"' /&gt;
            &lt;arg line='--script "${resolve.commands.file}"' /&gt;
            &lt;sysproperty key="projects.location" value="${projects.location}" /&gt;
            &lt;sysproperty key="buckminster.output.root" value="${build.root}/buckminster.output" /&gt;
            &lt;sysproperty key="buckminster.temp.root" value="${build.root}/buckminster.temp" /&gt;
            &lt;sysproperty key="target.platform" value="${build.root}/${target.platform}" /&gt;
            &lt;jvmarg line=" -Xms256m -Xmx512m" /&gt;
        &lt;/java&gt;

        &lt;java fork="true" dir="${buckminster.home}" logError="true" classname="org.eclipse.core.launcher.Main" failonerror="true"&gt;
            &lt;classpath&gt;
                &lt;fileset dir="${buckminster.home}/plugins"&gt;
                    &lt;include name="org.eclipse.equinox.launcher_*.jar" /&gt;
                &lt;/fileset&gt;
            &lt;/classpath&gt;
            &lt;arg line='-update' /&gt;
            &lt;arg line='-data "${build.root}/buckminster.workspace"' /&gt;
            &lt;arg line='-configuration "${build.root}/configuration"' /&gt;
            &lt;arg line='--script "${perform.commands.file}"' /&gt;
            &lt;sysproperty key="projects.location" value="${projects.location}" /&gt;
            &lt;sysproperty key="buckminster.output.root" value="${build.root}/buckminster.output" /&gt;
            &lt;sysproperty key="buckminster.temp.root" value="${build.root}/buckminster.temp" /&gt;
            &lt;sysproperty key="target.platform" value="${build.root}/${target.platform}" /&gt;
            &lt;jvmarg line=" -Xms256m -Xmx512m" /&gt;
        &lt;/java&gt;

        &lt;echo message=" " /&gt;
        &lt;echo message="Updatesite output in: ${build.root}/buckminster.output/bucky.example.rcpemf.target.mirror.site_*-eclipse.feature/site.p2/" /&gt;
    &lt;/target&gt;

    &lt;target name="cleanup"&gt;
        &lt;delete failonerror="false" includeemptydirs="true"&gt;
            &lt;fileset dir="${build.root}" defaultexcludes="false"&gt;
                &lt;exclude name="**/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/" /&gt;
                &lt;exclude name="**/${target.platform}/" /&gt;
            &lt;/fileset&gt;
        &lt;/delete&gt;
    &lt;/target&gt;

    &lt;target name="reset.target-platform"&gt;
        &lt;delete includeemptydirs="true"&gt;
            &lt;fileset dir="${build.root}" defaultexcludes="false"&gt;
                &lt;include name="**/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/" /&gt;
                &lt;include name="**/${target.platform}/" /&gt;
            &lt;/fileset&gt;
        &lt;/delete&gt;
    &lt;/target&gt;
&lt;/project&gt;</pre>
<p>You will need to run ant passing this file and also specifying the path where your headless Buckminster is installed, in my case I run</p>
<pre class="brush:shell">ant -Dbuckminster.home=/home/bettini/buckminster -f build.ant</pre>
<p>This ant script runs Buckminster twice:</p>
<ol>
<li>The first time it runs the materialization commands (stored in the file <em>bucky.example.rcpemf.target/headless-resolve-commands.txt</em>)
<pre class="brush:shell">setpref targetPlatformPath="${target.platform}"
resolve "${projects.location}/bucky.example.rcpemf.target/target-platform.cquery"
resolve "${projects.location}/bucky.example.rcpemf.target/mirror-project.cquery"</pre>
</li>
<li>Then it runs the actual commands to build the p2 site (stored in the file <em>bucky.example.rcpemf.target/headless-perform-commands.txt</em>); in this case we only build the p2 site for the mirror feature
<pre class="brush:shell">clean
build
perform -D target.os=* -D target.ws=* -D target.arch=* "bucky.example.rcpemf.target.mirror.site#buckminster.clean"
perform -D target.os=* -D target.ws=* -D target.arch=* "bucky.example.rcpemf.target.mirror.site#site.p2"</pre>
</li>
</ol>
<p>You need to execute Buckminster twice because of some conflicting bundles (see the discussion <a href="http://www.eclipse.org/forums/index.php/m/767528/" target="_blank">here</a>) which cause problems if you attempt to run everything in one shot; if you did not separate the steps, you would get something like</p>
<pre class="brush:shell">INFO:  perform '-D' 'target.os=*' '-D' 'target.ws=*' '-D' 'target.arch=*' 'bucky.example.rcpemf.target.site#site.p2'
CSpec org.apache.lucene.core:osgi.bundle$3.5.0.v20120319-2345 has no  action, group, or local artifact named bundle.and.fragments</pre>
<p>Once the script is finished you will get the p2 site in the subdirectory <em>buildroot/buckminster.output/bucky.example.rcpemf.target.mirror.site_*-eclipse.feature/site.p2</em>.</p>
<h2>Headless execution in Jenkins</h2>
<p>The last task is to build headlessly in Jenkins; of course, this assumes you have a working Jenkins installation with the <a href="https://wiki.jenkins-ci.org/display/JENKINS/Buckminster+PlugIn" target="_blank">Buckminster plugin</a> (<a title="Using Buckminster Plugin in Jenkins" href="http://www.lorenzobettini.it/2012/10/using-buckminster-plugin-in-jenkins/" target="_blank">I&#8217;ve blogged about that</a> also).</p>
<p>We write the commands to execute in two text files (similar to the ones shown in the previous section):</p>
<ul>
<li>bucky.example.rcpemf.target/jenkins-resolve-mirror-commands.txt
<pre class="brush:shell">resolve 'bucky.example.rcpemf.target/target-platform.cquery'
resolve 'bucky.example.rcpemf.target/project.cquery'</pre>
</li>
<li>bucky.example.rcpemf.target.mirror.site/jenkins-perform-commands.txt
<pre class="brush:shell">clean
build
perform -D target.os=* -D target.ws=* -D target.arch=* bucky.example.rcpemf.target.mirror.site#buckminster.clean
perform -D target.os=* -D target.ws=* -D target.arch=* bucky.example.rcpemf.target.mirror.site#site.p2</pre>
</li>
</ul>
<p>Then we can create a Jenkins job, which fetches the sources from the git repository</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/jenkins-bucky.png"><img class="aligncenter size-full wp-image-117" title="jenkins-bucky" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/jenkins-bucky.png" alt="" width="757" height="257" /></a></p>
<p>specify <strong>two</strong> Buckminster execution steps (as noted in the previous section, this is mandatory for the whole process to succeed):</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/jenkins-bucky1.png"><img class="aligncenter size-full wp-image-118" title="jenkins-bucky1" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/jenkins-bucky1.png" alt="" width="741" height="249" /></a><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/jenkins-bucky2.png"><img class="aligncenter size-full wp-image-119" title="jenkins-bucky2" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/jenkins-bucky2.png" alt="" width="737" height="250" /></a></p>
<p>and archive the artifacts</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/jenkins-bucky3.png"><img class="aligncenter size-full wp-image-120" title="jenkins-bucky3" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/jenkins-bucky3.png" alt="" width="595" height="97" /></a></p>
<p>When the job finishes, you can see the archived p2 site</p>
<p><a href="http://www.lorenzobettini.it/wp-content/uploads/2012/11/jenkins-bucky4.png"><img class="aligncenter size-full wp-image-121" title="jenkins-bucky4" src="http://www.lorenzobettini.it/wp-content/uploads/2012/11/jenkins-bucky4.png" alt="" width="552" height="149" /></a></p>
<p>That&#8217;s all&#8230;</p>
<p>I hope you enjoyed this post, and comments are more than welcome <img src='http://www.lorenzobettini.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lorenzobettini.it/2012/11/materializing-and-provisioning-your-target-platform-as-local-p2-site-with-buckminster/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
