<?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>Twenty Square Meter &#187; rcp</title>
	<atom:link href="http://www.twentysqm.com/tag/rcp/feed" rel="self" type="application/rss+xml" />
	<link>http://www.twentysqm.com</link>
	<description>Ihr Ansprechpartner für innovative Ideen</description>
	<lastBuildDate>Tue, 04 Oct 2011 18:35:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Maven 2 - Build Lifecycle #3</title>
		<link>http://www.twentysqm.com/2008-11-22/maven-2-build-lifecycle-3.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=maven-2-build-lifecycle-3</link>
		<comments>http://www.twentysqm.com/2008-11-22/maven-2-build-lifecycle-3.html#comments</comments>
		<pubDate>Sat, 22 Nov 2008 03:44:34 +0000</pubDate>
		<dc:creator>Frank Gottschlich</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[lifecycle]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[rcp]]></category>

		<guid isPermaLink="false">http://www.twentysqm.com/?p=319</guid>
		<description><![CDATA[Nach dem wir uns im ersten Teil mit der Theroie vertraut gemacht haben und im zweiten Teil erste Schritte in der Praxis gemacht haben geht es nun im dritten Teil um den Kern einer pom.xml-Konfiguration. Hierbei erkläre ich die nötigen Schritte, die dafür nötig sind, um einen Build Lifecycle einer RCP-Anwendung aufzubauen. Zu erst sollte [...]]]></description>
			<content:encoded><![CDATA[<p>Nach dem wir uns im ersten Teil mit der Theroie vertraut gemacht haben und im zweiten Teil erste Schritte in der Praxis gemacht haben geht es nun im dritten Teil um den Kern einer <em>pom.xml</em>-Konfiguration. Hierbei erkläre ich die nötigen Schritte, die dafür nötig sind, um einen Build Lifecycle einer RCP-Anwendung aufzubauen.</p>
<p>Zu erst sollte man sich in Eclipse eine RCP-Anwendung<sup><a href="http://www.twentysqm.com/2008-11-22/maven-2-build-lifecycle-3.html#footnote_0_319" id="identifier_0_319" class="footnote-link footnote-identifier-link" title="Optional das HelloWorld-Mail RCP">1</a></sup> generien lassen oder selbst eins erstellen. Da wir später auch die Product-Konfiguration brauchen, wäre es angebracht, sich diese auch gleich bauen zu lassen und nötige Einstellungen zu treffen. Ich habe soweit alles beim Standard belassen und die Product-Datei „<em>com.company.project.product</em>” genannt. Wenn man die nötigen Konfigurationen für das Produkt getroffen hat lässt sich diese bereits in Eclipse über <em>„Overview -&gt; Launch an Eclipse application</em>” ausführen.</p>
<p>Ich möchte an dieser Stelle nicht tiefer in der RCP-Entwicklung eingehen da dies ein Thema für sich ist. Wer allerdings damit nicht so zurecht kommt, sollte sich noch etwas in die RCP-Entwicklung<sup><a href="http://www.twentysqm.com/2008-11-22/maven-2-build-lifecycle-3.html#footnote_1_319" id="identifier_1_319" class="footnote-link footnote-identifier-link" title="http://wiki.eclipse.org/index.php/Rich_Client_Platform">2</a></sup> einlesen.</p>
<p>Nun erstellen wir uns eine <em>pom.xml</em> mit folgendem Inhalt:</p>
<p><code>
<pre class="brush: xml; title: ; notranslate">&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;groupId&gt;com.company.project&lt;/groupId&gt;
  &lt;artifactId&gt;com.company.project&lt;/artifactId&gt;
  &lt;packaging&gt;zip&lt;/packaging&gt;
  &lt;name&gt;Project Name&lt;/name&gt;&lt;/code&gt;&lt;code&gt;
  &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
  ...
&lt;/project&gt;</pre>
<p></code></p>
<p>Unsere Anwendung heißt hier: com.company.project. Das Haupt-Plugin analog genauso: com.company.project. Es gilt nun den Inhalt ab Zeile 8 zu füllen. Da wir einen Buildprozess für eine RCP-Anwendung erstellen wollen schauen wir uns zu erst auf der Seite <a href="http://mojo.codehaus.org/pde-maven-plugin/index.html">http://mojo.codehaus.org/pde-maven-plugin/index.html</a> um. Dies kommt dem am nächsten was wir machen wollen. Unter Usage haben wir eine wunderbare Beschreibung wie der Konstrukt auszusehen hat:</p>
<pre class="brush: xml; title: ; notranslate">&lt;project&gt;
  ...
  &lt;packaging&gt;zip&lt;/packaging&gt;
  &lt;build&gt;
    &lt;plugins&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
        &lt;artifactId&gt;pde-maven-plugin&lt;/artifactId&gt;
        &lt;extensions&gt;true&lt;/extensions&gt;
        &lt;configuration&gt;
          &lt;buildProperties&gt;
          &lt;!-- Additional PDE ant properies goes here --&gt;
          ...
          &lt;/buildProperties&gt;
        &lt;/configuration&gt;
        &lt;!-- Also bind to mvn clean --&gt;
        &lt;executions&gt;
          &lt;execution&gt;
            &lt;id&gt;clean-pde&lt;/id&gt;
            &lt;phase&gt;clean&lt;/phase&gt;
            &lt;goals&gt;
              &lt;goal&gt;clean&lt;/goal&gt;
            &lt;/goals&gt;
          &lt;/execution&gt;
        &lt;/executions&gt;
      &lt;/plugin&gt;
    &lt;/plugins&gt;
  &lt;/build&gt;
  ...
&lt;/project&gt;
</pre>
<p>Ab nun an wird es etwas knifflig. Man sollte die PDE-Version explizit angeben. Aktuell ist die Version: „1.0-SNAPSHOT”. Dies muss im besten fall unter <em>extensions</em> als <em>version</em> - Tag hinzugefügt werden. Nicht benötigte Inhalte, speziell die Kommentare haben in solch einer Konfiguration natürlich nichts verloren. Also ebenfalls raus damit. Sind diese Dinge abgearbeitet kann sich diese pom-Konfiguration schon sehen lassen. Damit ist zumindest der Grundstein gelegt. Im nächsten Teil der Storyline werden wir uns mit dem Product-Build beschäftigen und unsere erstellte Mail-Application automatisch erstellen lassen.</p>
<p>Weiterführend ist zu sagen, das mit dem PDE-Maven-Plugin sich nicht nur Product, sondern auch Plugins, Features und auch Updatesite automatisch builden lassen. Allerdings ist jeder dieser Bereiche ein Thema für sich und sollten trotz der einfachen Handhabung nicht unterschätzt werden. Persönlich schätze ich den Product-Build als schwierigsten ein.</p>
<ol class="footnotes"><li id="footnote_0_319" class="footnote">Optional das HelloWorld-Mail RCP</li><li id="footnote_1_319" class="footnote">http://wiki.eclipse.org/index.php/Rich_Client_Platform</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.twentysqm.com/2008-11-22/maven-2-build-lifecycle-3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven 2 - Build Lifecycle #2</title>
		<link>http://www.twentysqm.com/2008-10-31/maven-2-build-lifecycle-2.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=maven-2-build-lifecycle-2</link>
		<comments>http://www.twentysqm.com/2008-10-31/maven-2-build-lifecycle-2.html#comments</comments>
		<pubDate>Fri, 31 Oct 2008 19:00:46 +0000</pubDate>
		<dc:creator>Frank Gottschlich</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[lifecycle]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[rcp]]></category>

		<guid isPermaLink="false">http://www.twentysqm.com/?p=292</guid>
		<description><![CDATA[Im zweiten Teil der Storyline geht es um den allgemeinen Aufbau eines Maven-Projekts. Im grunde genommen ist es recht einfach, solch eines zu definieren. Es sind dafür zwei Schritte nötig, wobei der erste Schritt entscheidend ist. Möchte man von haus aus mit der Maven-Konvention arbeiten, so bietet es sich an, unter Eclipse zu arbeiten und [...]]]></description>
			<content:encoded><![CDATA[<p>Im zweiten Teil der Storyline geht es um den allgemeinen Aufbau eines Maven-Projekts. Im grunde genommen ist es recht einfach, solch eines zu definieren. Es sind dafür zwei Schritte nötig, wobei der erste Schritt entscheidend ist.</p>
<p>Möchte man von haus aus mit der Maven-Konvention arbeiten, so bietet es sich an, unter Eclipse zu arbeiten und zusätzlich das Maven-Plugin<sup><a href="http://www.twentysqm.com/2008-10-31/maven-2-build-lifecycle-2.html#footnote_0_292" id="identifier_0_292" class="footnote-link footnote-identifier-link" title="http://m2eclipse.codehaus.org/">1</a></sup> zu nutzen. (Es steht selbstverständlich auch ein gleichnamiges Netbeans-Plugin<sup><a href="http://www.twentysqm.com/2008-10-31/maven-2-build-lifecycle-2.html#footnote_1_292" id="identifier_1_292" class="footnote-link footnote-identifier-link" title="http://maven.apache.org/netbeans-module.html">2</a></sup> zur Verfügung) Hat man dies in seiner Eclipse-Version integriert hat man die Möglichkeit, gleich ein neues Maven-Projekt anzulegen.</p>
<p>Nun ist es aber so, das über Eclipse hinaus, es Zusatzpakete gibt die zum Beispiel sehr viel Code für einen generieren und diese logischerweise die Java-Konvention verwenden. Hier greift das Sprichwort <em>„Never change a running system”</em> und man muss umdenken. In diesem Fall weisen wir dem jeweiligen Hauptprojekt eine <em>„pom.xml”</em> zu. Genauer gesagt, wir erstellen uns diese Datei. Macht man dies nun in Eclipse, erkennt er dies und der Designer öffnet sich. Persönlich mag ich Designer lieber als sich mit dem Quelltexten rumzuschlagen, aber in diesem Fall sollte man eine Ausnahme machen, die <em>„pom.xml”</em> per Hand beschreiben und später lieber die Anpassungen über den Designer erledigen.</p>
<p>Aufbau einer Standart pom.xml:</p>
<p><code>
<pre class="brush: xml; title: ; notranslate">&lt;project&gt;
  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;groupId&gt;com.company.projectr&lt;/groupId&gt;
  &lt;artifactId&gt;com.company.project.application&lt;/artifactId&gt;
  &lt;packaging&gt;zip&lt;/packaging&gt;
  &lt;name&gt;Project Name&lt;/name&gt;
  &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
&lt;/project&gt;</pre>
<p></code></p>
<p>Um den Aufbau etwas einfacher zu halten ist hier kein Doctype definiert. Dieser müßte in der ersten Zeile vollständig lauten:</p>
<p><code>
<pre class="brush: xml; title: ; notranslate">&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
</pre>
<p></code></p>
<p>Hieraus lässt sich schon eine funktionstüchtige pom-Konfiguration erkennen. Der modelVersion-Tag beschreibt die POM-Version. Zum aktuellen Zeitpunkt wo dieser Beitrag verfasst wurde ist die Version 4.0.0 aktuell. Der groupID-Tag definiert quasi den Projektnamen. Es bietet sich hier an den root-Path zu seinem Projekt zu definieren. Allerdings wäre hier auch ein richtiger Projektname möglich, obwohl sich das in der Praxis dann nicht so gut macht. Wie sich erahnen lässt, beschreibt der artifactId-Tag den Projektnamen. In der RCP-Entwicklung wäre dies, der vollständige Name des Plugins. Der packaging-Tag definiert das Zielformat, wie das Projekt am Ende gepackt wird. Hier wäre es möglich ear, war, jar oder wie in unserem Beispiel das zip-Format anzugeben. Der name-Tag ist sicher selbsterklärend. Dieser beschreibt, wie das Projekt heißt. Zum Schluss gibt es noch ein version-Tag. Wie der Name schon sagt, definiert man hier seine Version. SNAPSHOT bedeutet in diesem Fall, das die Version, sollte sie in einem Repository installiert oder ausgelifert werden, es sich dabei um keine Release-Version handelt und ggf. im laufe der Zeit in seinen Funktionen noch geändert werden kann.</p>
<ol class="footnotes"><li id="footnote_0_292" class="footnote">http://m2eclipse.codehaus.org/</li><li id="footnote_1_292" class="footnote">http://maven.apache.org/netbeans-module.html</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.twentysqm.com/2008-10-31/maven-2-build-lifecycle-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven 2 - Build Lifecycle #1</title>
		<link>http://www.twentysqm.com/2008-10-28/maven-build-lifecycle-1.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=maven-build-lifecycle-1</link>
		<comments>http://www.twentysqm.com/2008-10-28/maven-build-lifecycle-1.html#comments</comments>
		<pubDate>Tue, 28 Oct 2008 00:57:03 +0000</pubDate>
		<dc:creator>Frank Gottschlich</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[lifecycle]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[rcp]]></category>

		<guid isPermaLink="false">http://www.twentysqm.com/?p=248</guid>
		<description><![CDATA[Der richtige Ansatz für ein Buildserver muss erst einmal gefunden werden. Ich möchte hier nicht auf alle eingehen sondern gleich ein ausgewähltes System vorstellen. Es handelt sich dabei um Maven1. Dieses System basiert auf Plugins und stellt eine masse an Möglichkeiten bereit. Wer seinen Buildprozess2 automatisieren möchte sollte sich damit vertraut machen. So ein Maven-Projekt [...]]]></description>
			<content:encoded><![CDATA[<p>Der richtige Ansatz für ein Buildserver muss erst einmal gefunden werden. Ich möchte hier nicht auf alle eingehen sondern gleich ein ausgewähltes System vorstellen. Es handelt sich dabei um Maven<sup><a href="http://www.twentysqm.com/2008-10-28/maven-build-lifecycle-1.html#footnote_0_248" id="identifier_0_248" class="footnote-link footnote-identifier-link" title="http://maven.apache.org/">1</a></sup>. Dieses System basiert auf Plugins und stellt eine masse an Möglichkeiten bereit.</p>
<p>Wer seinen Buildprozess<sup><a href="http://www.twentysqm.com/2008-10-28/maven-build-lifecycle-1.html#footnote_1_248" id="identifier_1_248" class="footnote-link footnote-identifier-link" title="http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html">2</a></sup> automatisieren möchte sollte sich damit vertraut machen. So ein Maven-Projekt bringt von haus aus eine eigene Konventionen mit sich die man nach Möglichkeit auch nutzen sollte. Aber auch für Projekte die Technisch an eine bestimmte Struktur gebunden sind, gibt es Lösungsansätze. Eines sollte man über Maven wissen und sich auch immer im klaren sein, es gibt keinen Standard. Wie ein Build Lifecycle aussehen sollte, richtet sich immer nach den Projekt(en).</p>
<p>Maven bietet aber ein Standard Buildprozess aus folgenden Plugin an:</p>
<ol>
<li>clean (Säubern)</li>
<li>validate (Validieren)</li>
<li>compile (Kompilieren)</li>
<li>test (Testen)</li>
<li>package (Verpacken)</li>
<li>integration-test (Integrations-Tests)</li>
<li>verify (Gültigkeitsprüfung)</li>
<li>install (Installieren im lokalen Repository)</li>
<li>deploy (Installieren im entfernten Repository)</li>
<li>site (Generierung der Dokumentation)</li>
</ol>
<p>Jede Phase stellt ein Plugin dar und übernimmt verschiedene Aufgaben und definiert letztendlich den Buildprozess. Im folgenden die einzelnen Schritte im Detail:</p>
<ol>
<li style="color:#000;">Entfernt Artefakte<sup><a href="http://www.twentysqm.com/2008-10-28/maven-build-lifecycle-1.html#footnote_2_248" id="identifier_2_248" class="footnote-link footnote-identifier-link" title="Artefakte sind beispielsweise jar- oder zip-Pakete die durch das kompilieren erstellt werden k&ouml;nnen. Diese sind zu meist mit einer Versionierung versehen. Diese Artefakte k&ouml;nnen von anderen Projekten in Abh&auml;ngigkeit genutzt und eingesetzt werden.">3</a></sup> von vorherigen Builds</li>
<li style="color:#000;">Validiert<sup><a href="http://www.twentysqm.com/2008-10-28/maven-build-lifecycle-1.html#footnote_3_248" id="identifier_3_248" class="footnote-link footnote-identifier-link" title="Damit pr&uuml;ft das Plugin durch ob im Programmcode Fehler enthaten sind. Das beste Beispiel daf&uuml;r sind Errors.">4</a></sup> das Projekt auf Korrektheit und prüft ob alle Abhängigkeiten<sup><a href="http://www.twentysqm.com/2008-10-28/maven-build-lifecycle-1.html#footnote_4_248" id="identifier_4_248" class="footnote-link footnote-identifier-link" title="Projekte greifen i.d.R. auf andere Resourcen zu und damit wird gepr&uuml;ft ob diese vorhanden sind.">5</a></sup> gegeben sind</li>
<li style="color:#000;">Kompiliert den Programmcode</li>
<li style="color:#000;">Testet den kompilierten Programmcode mit Hilfe eines unit-testing-framework<sup><a href="http://www.twentysqm.com/2008-10-28/maven-build-lifecycle-1.html#footnote_5_248" id="identifier_5_248" class="footnote-link footnote-identifier-link" title="Ein bekanntes Framework ist JUnit: http://www.junit.org/">6</a></sup>. Diese Tests sollten nicht verlangen, dass der Code gepackt (packaged) oder ausgeliefert (deployed) sein muss.</li>
<li style="color:#000;">Fasst den kompilierten Code in einem bestimmten Format zusammen, z.b. zu einer jar.</li>
<li style="color:#000;">Integrationstests auf anderen Systemen. Es wird dabei getestet ob das Projekt auf dem Zielsystem funktionstüchtig ist.</li>
<li style="color:#000;">Hier können sonstige Tests angestoßen werden die prüfen ob das Projekt gültig und ggf. bestimmte Qualitätskriterien erfüllt sind.</li>
<li style="color:#000;">Installiert das Package in das lokale Repository<sup><a href="http://www.twentysqm.com/2008-10-28/maven-build-lifecycle-1.html#footnote_6_248" id="identifier_6_248" class="footnote-link footnote-identifier-link" title="Stellt ein Verzeichnis da, wo s&auml;mtliche Maven und hauseigenen Projekte verwaltet und genutzt werden k&ouml;nnen">7</a></sup>, worauf lokale Projekte in Abhängigkeit dies nutzen können.</li>
<li style="color:#000;">Installiert das Package in ein entferntes Repository. Dies wird verwendet um stabile Versionen anderen Programmierern zu verfügung zu stellen.</li>
<li style="color:#000;">Erstellt eine Projekt-Dokumentation. Ebenfalls ist es hier möglich JavaDocs oder Code-Duplicates anzeigen zu lassen.</li>
</ol>
<p>Es ist für den Anfang sicher etwas viel. Wenn man sich aber etwas eingelesen hat und langsam dahinter steigt, lässt sich daraus eine Menge machen. Und darum geht es in dieser Storyline, einen automatischen Buildprozess aufzubauen.</p>
<ol class="footnotes"><li id="footnote_0_248" class="footnote">http://maven.apache.org/</li><li id="footnote_1_248" class="footnote">http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html</li><li id="footnote_2_248" class="footnote">Artefakte sind beispielsweise jar- oder zip-Pakete die durch das kompilieren erstellt werden können. Diese sind zu meist mit einer Versionierung versehen. Diese Artefakte können von anderen Projekten in Abhängigkeit genutzt und eingesetzt werden.</li><li id="footnote_3_248" class="footnote">Damit prüft das Plugin durch ob im Programmcode Fehler enthaten sind. Das beste Beispiel dafür sind Errors.</li><li id="footnote_4_248" class="footnote">Projekte greifen i.d.R. auf andere Resourcen zu und damit wird geprüft ob diese vorhanden sind.</li><li id="footnote_5_248" class="footnote">Ein bekanntes Framework ist JUnit: http://www.junit.org/</li><li id="footnote_6_248" class="footnote">Stellt ein Verzeichnis da, wo sämtliche Maven und hauseigenen Projekte verwaltet und genutzt werden können</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.twentysqm.com/2008-10-28/maven-build-lifecycle-1.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

