<?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; Java</title>
	<atom:link href="http://www.twentysqm.com/tag/java/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>Weiß Tomcat wieviel RAM Sie besitzen?</title>
		<link>http://www.twentysqm.com/2010-01-15/weiss-tomcat-wieviel-ram-sie-besitzen.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=weiss-tomcat-wieviel-ram-sie-besitzen</link>
		<comments>http://www.twentysqm.com/2010-01-15/weiss-tomcat-wieviel-ram-sie-besitzen.html#comments</comments>
		<pubDate>Fri, 15 Jan 2010 16:52:35 +0000</pubDate>
		<dc:creator>Frank Gottschlich</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux / Unix]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.twentysqm.com/?p=1060</guid>
		<description><![CDATA[Ein Performanceproblem kann auftreten wenn Tomcat1 nicht weiß wieviel Arbeitsspeicher Ihr Server wirklich bereit hält. Hierzu wird man sich immer voll und ganz auf Ihre Konfigurationen verlassen und dementsprechend handeln. Wenn diese nicht gewissenhaft durchgeführt wurde, kann es unter anderem vorkommen, dass der Aufbau von sogenannten JavaServer Pages enorm verlangsamt wird. Dies ist nicht immer [...]]]></description>
			<content:encoded><![CDATA[<p>Ein Performanceproblem kann auftreten wenn Tomcat<sup><a href="http://www.twentysqm.com/2010-01-15/weiss-tomcat-wieviel-ram-sie-besitzen.html#footnote_0_1060" id="identifier_0_1060" class="footnote-link footnote-identifier-link" title=" http://tomcat.apache.org/ ">1</a></sup> nicht weiß wieviel Arbeitsspeicher Ihr Server wirklich bereit hält. Hierzu wird man sich immer voll und ganz auf Ihre Konfigurationen verlassen und dementsprechend handeln. Wenn diese nicht gewissenhaft durchgeführt wurde, kann es unter anderem vorkommen, dass der Aufbau von sogenannten JavaServer Pages enorm verlangsamt wird. Dies ist nicht immer auf den Tomcat selbst oder einer ineffizienten programmiertechnischen Entwicklung zurück zu führen.</p>
<p><strong>Hinweis:<br />
Die hier beschriebene Speicherverwaltung lässt sich erst ab der Tomcat Version 5.5.15 realisieren und konzentriert sich auf die Linux-Architektur!</strong></p>
<p><span style="color: #000080;"><strong><span id="more-1060"></span></strong></span>Auch wenn Tomcat einige gewisse Schwierigkeiten mit dem Umgang von großen JavaServer Pages mit sich bringt, so hilft der Kniff des Mitteilens, wieviel Arbeitsspeicher Ihr Server besitzt. Solche Angaben werden mit Hilfe der Variable <em>CATALINA_OPT</em> realisiert, die sich optional mit starten von Tomcat einbinden lässt. Dazu ist im Vorfeld eine Datei anzupassen. Sollte diese noch nicht vorhanden sein, erstellen Sie diese bitte:</p>
<pre class="brush: plain; title: ; notranslate">$CATALINA_HOME/bin/setenv.sh</pre>
<p>Neben anderen optionalen Parametern, auf die in diesem Beitrag aber kein Bezug genommen wird, soll es im folgendem um das Setzen der Variable für die Verwaltung des Arbeitsspeichers gehen. Der Inhalt dieser Datei, wird unter Linux wie folgt befüllt:</p>
<pre class="brush: plain; title: ; notranslate">export CATALINA_OPTS=&quot;$CATALINA_OPTS -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Xms256m -Xmx2048m -XX:MaxPermSize=512m</pre>
<p>Zunächst dient die Angabe von <em>org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER</em> für die Möglichkeit der Verwaltung des Arbeitsspeicher. Diese ist hierzu auf <em>true</em> zu setzen und steht erst ab der Tomcat-Version 5.5.15 zur Verfügung. Die nachfolgenden Attribute sind wie folgt zu verstehen:</p>
<p><strong>-Xms256m</strong> (<em>Mininum des Java</em> Heap)<br />
<strong>-Xmx2048m</strong> (Maximum des Java Heap)<br />
<strong>-XX:MaxPermSize=512m </strong>(Permanent Generations Größe)</p>
<p>Die <em>Angabe von -Xmx2048m</em> verrät die Größe des RAMs. Stellen Sie diesen unter Linux <strong>zwingend</strong> auf den maximal zulässigen Arbeitsspeicher. Warum?, dies ist auf die Linux-Architektur zurück zu führen, welche den Arbeitsspeicher permanent und vollständig im Gebrauch hält. Sollte Tomcat nun nicht wissen, wieviel Arbeitsspeicher insgesamt zur Verfügung steht, wird er diesen auch nicht „beantragen”. Ist der Arbeitsspeicher zu diesem Zeitpunkt aber voll, so kann es zu merklichen Performance-Verlusten führen, da Tomcat selbst keinen freien Speicher findet. Linux bedient sich in diesem Fall des Auslagerns (SWAP). Wenn Tomcat weiß wieviel Arbeitsspeicher Sie wirklich besitzen, so wird bei Bedarf versucht, diesen auch zu allokieren. Der Linux-Kernel weiß nun das er viel zu viel Arbeitsspeicher hält und wird alte Daten Auslagern und Tomcat den RAM zusichern der gebraucht wird.</p>
<p>Mit einem Start oder Neustart von Tomcat wird die so eben angelegte, beziehungsweise angepasste Datei aufgerufen und Tomcat mit den entsprechenden Einstellungen gesetzt.</p>
<ol class="footnotes"><li id="footnote_0_1060" class="footnote"> <a href="http://tomcat.apache.org/">http://tomcat.apache.org/</a> </li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.twentysqm.com/2010-01-15/weiss-tomcat-wieviel-ram-sie-besitzen.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Standard Java Runtime unter Ubuntu</title>
		<link>http://www.twentysqm.com/2009-10-29/standard-java-runtime-unter-ubuntu.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=standard-java-runtime-unter-ubuntu</link>
		<comments>http://www.twentysqm.com/2009-10-29/standard-java-runtime-unter-ubuntu.html#comments</comments>
		<pubDate>Thu, 29 Oct 2009 20:19:22 +0000</pubDate>
		<dc:creator>Frank Gottschlich</dc:creator>
				<category><![CDATA[Linux / Unix]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.twentysqm.com/?p=934</guid>
		<description><![CDATA[Eine Sache die mich unter Ubuntu immer wieder gestört hat, war die Standard-genutzte JRE/JDK von Java. Nun mehr bin ich über einen Befehl gestolpert, der genau für diese Konfigration gedacht ist. update-alternatives --config java Verständlicherweise ist dies nur möglich wenn mehr als eine Java-Runtime installiert ist. Dies ist oft der Fall. Besonders bei der Server [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Sache die mich unter Ubuntu immer wieder gestört hat, war die Standard-genutzte JRE/JDK von Java. Nun mehr bin ich über einen Befehl gestolpert, der genau für diese Konfigration gedacht ist.</p>
<p><code>update-alternatives --config java</code></p>
<p>Verständlicherweise ist dies nur möglich wenn mehr als eine Java-Runtime installiert ist. Dies ist oft der Fall. Besonders bei der Server Edition<sup><a href="http://www.twentysqm.com/2009-10-29/standard-java-runtime-unter-ubuntu.html#footnote_0_934" id="identifier_0_934" class="footnote-link footnote-identifier-link" title=" Ubuntu Server Edition - http://www.ubuntu.com/products/whatIsubuntu/serveredition ">1</a></sup> von Ubuntu wird von haus aus nur die GIJ (GNU Interpreter for Java) mitgeliefert. Welche sich dadurch auszeichnet, das sich diese Runtime für fast nichts tiefgründigeres einsetzen lässt. Hintergrund ist die <a href="http://www.java.com/de/download/license.jsp">Lizenzvereinbarung von Sun Microsystems</a>. Durch die abgespeckte Version ist eine Bestätigung durch den Anwender nicht notwendig. Im gegensatz zu der vollwärtigen Runtime die auf jedem Linux-Betriebsystem nachinstalliert werden kann.</p>
<p>Mit dem oben genannten Befehl lässt sich nun eine Standard Runtime definieren die sich mittelst einer textbasierte GUI präsentiert:</p>
<p><img class="aligncenter size-full wp-image-936" title="ubuntu-config-java" src="http://www.twentysqm.com/wp-content/uploads/2009/10/ubuntu-config-java.png" alt="ubuntu-config-java" width="526" height="203" /></p>
<p>Mit dieser Methodik lassen sich viele Fehler bezüglich der Java Runtime schon im Vorfeld vermeiden, in dem keine abgespeckte, sondern vollwertige Runtime genutzt wird. Oft entfallen damit auch spezielle Konfigurationen am Server. Der folgende Befehlt gibt letztendlich Aufschluss ob nun standardmäßig die richtige Runtime genutzt wird.</p>
<p><code>java -version</code></p>
<p><img src="http://www.twentysqm.com/wp-content/uploads/2009/10/java-version.png" alt="java-version" title="java-version" width="521" height="80" class="aligncenter size-full wp-image-945" /></p>
<ol class="footnotes"><li id="footnote_0_934" class="footnote"> Ubuntu Server Edition - <a href="http://www.ubuntu.com/products/whatIsubuntu/serveredition">http://www.ubuntu.com/products/whatIsubuntu/serveredition</a> </li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.twentysqm.com/2009-10-29/standard-java-runtime-unter-ubuntu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der n-dimensionale Hyperwürfel</title>
		<link>http://www.twentysqm.com/2009-07-12/der-n-dimensionale-hyperwrfel.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=der-n-dimensionale-hyperwrfel</link>
		<comments>http://www.twentysqm.com/2009-07-12/der-n-dimensionale-hyperwrfel.html#comments</comments>
		<pubDate>Sun, 12 Jul 2009 02:10:33 +0000</pubDate>
		<dc:creator>Frank Gottschlich</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.twentysqm.com/?p=750</guid>
		<description><![CDATA[Vor einigen Jahren entwickelte ich an einer Umsetzung für die Hamming-Distanz im Bezug auf Hypercubes1. Im Grunde geht es darum, Körper verschiedener Dimensionen zu projektieren. Worauf ich nun sehr stolz bin, ist die Tatsache das es damals diesen Algorithmus nur im Ansatz gab und sonst auch im Netz keine weiteren Erläuterungen zu finden waren. So [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left"><a href="http://www.twentysqm.com/wp-content/uploads/2009/07/Dimension3.png"><img style="border-right-width: 0px; margin: 6px 15px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Dimension3" border="0" alt="Dimension3" align="left" src="http://www.twentysqm.com/wp-content/uploads/2009/07/Dimension3_thumb.png" width="244" height="243" /></a></p>
<p style="text-align: left">Vor einigen Jahren entwickelte ich an einer Umsetzung für die Hamming-Distanz im Bezug auf Hypercubes<sup><a href="http://www.twentysqm.com/2009-07-12/der-n-dimensionale-hyperwrfel.html#footnote_0_750" id="identifier_0_750" class="footnote-link footnote-identifier-link" title=" http://de.wikipedia.org/wiki/Hyperw%C3%BCrfel ">1</a></sup>. Im Grunde geht es darum, Körper verschiedener Dimensionen zu projektieren. Worauf ich nun sehr stolz bin, ist die Tatsache das es damals diesen Algorithmus nur im Ansatz gab und sonst auch im Netz keine weiteren Erläuterungen zu finden waren. So habe ich, auf der Grundlage der Hamming-Distanz, einen Algorithmus entworfen welcher n-dimensionale Hyperwürfel zeichnen kann.</p>
<p style="text-align: left">Meine Inspiration kam von Hans Walser und seinem gleichnamigen Script<sup><a href="http://www.twentysqm.com/2009-07-12/der-n-dimensionale-hyperwrfel.html#footnote_1_750" id="identifier_1_750" class="footnote-link footnote-identifier-link" title=" http://www.math.unibas.ch/~walser/Vortraege/Vortrag39/Skript/Hyperwuerfel.pdf ">2</a></sup>. Darin wird Schritt für Schritt der Aufbau erläutert und ein Ansatz für das projektieren dieser Körper beschrieben. Das Script ist zwar von 2003 aber dennoch sehr empfehlenswert. Ich habe es aber nun auch einmal ausgelassen eine 10. oder gar höhere Dimension als Bild mit einzubinden. Würfel höherer Dimensionen entnehmt Ihr dem Script auf der Seite 15. Dort werden die Dimensionen fünf bis acht grafisch dargestellt. Das Thema ist wirklich interessant, nur leider gibt es mir keine bekannte Vertiefungsmöglichkeit. Von daher war die Umsetzung eine schöne Herausforderung und das Resultat ein Blick in eine andere Dimension.</p>
<p><a href="http://www.twentysqm.com/wp-content/uploads/2009/07/Dimension42.png"><img style="border-bottom: 0px; border-left: 0px; margin: 6px auto 0px; display: block; float: none; border-top: 0px; border-right: 0px" class="aligncenter" title="Dimension4" border="0" alt="Dimension4" src="http://www.twentysqm.com/wp-content/uploads/2009/07/Dimension4_thumb2.png" width="244" height="243" /></a></p>
<ol class="footnotes"><li id="footnote_0_750" class="footnote"> <a title="http://de.wikipedia.org/wiki/Hyperw%C3%BCrfel" href="http://de.wikipedia.org/wiki/Hyperw%C3%BCrfel">http://de.wikipedia.org/wiki/Hyperw%C3%BCrfel</a> </li><li id="footnote_1_750" class="footnote"> <a title="http://www.math.unibas.ch/~walser/Vortraege/Vortrag39/Skript/Hyperwuerfel.pdf" href="http://www.math.unibas.ch/~walser/Vortraege/Vortrag39/Skript/Hyperwuerfel.pdf">http://www.math.unibas.ch/~walser/Vortraege/Vortrag39/Skript/Hyperwuerfel.pdf</a> </li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.twentysqm.com/2009-07-12/der-n-dimensionale-hyperwrfel.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse Galileo Release 3.5</title>
		<link>http://www.twentysqm.com/2009-06-28/eclipse-galileo-release-3-5.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=eclipse-galileo-release-3-5</link>
		<comments>http://www.twentysqm.com/2009-06-28/eclipse-galileo-release-3-5.html#comments</comments>
		<pubDate>Sat, 27 Jun 2009 23:14:51 +0000</pubDate>
		<dc:creator>Frank Gottschlich</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://www.twentysqm.com/?p=682</guid>
		<description><![CDATA[Aus dem Hause The Eclipse Foundation kam nun die sehnsüchtige Mitteilung. Eclipse Galileo erreicht das Release Stadium. Nach monater langer Arbeit kommt mit der neuen Version viele Detailverbesserungen. In der aktuellen Version 3.5 bringt Eclipse nicht nur viele Verbesserungen für das Overview mit sondern auch neue Architekturunterstützungen. Bei einem Blick hinter die Kulissen fällt sofort [...]]]></description>
			<content:encoded><![CDATA[<p>Aus dem Hause <a href="http://www.eclipse.org">The Eclipse Foundation</a> kam nun die sehnsüchtige Mitteilung. Eclipse Galileo erreicht das Release Stadium. Nach monater langer Arbeit kommt mit der neuen Version viele Detailverbesserungen. In der aktuellen Version 3.5 bringt Eclipse nicht nur viele Verbesserungen für das Overview mit sondern auch neue Architekturunterstützungen.</p>
<p>Bei einem Blick hinter die Kulissen fällt sofort die neue Unterstützung für die MacOS X - Version Cocoa auf. Hier wird nun der Support für die x86- und x64-Architektur bereitgestellt, was einiges wieder sehr einfach machen wird. Experimentell wurde (erst) zum Release die <a href="http://de.wikipedia.org/wiki/System/390">s390-Architektur</a> eingeführt. Dabei handelt es sich um eine weitere Linux-Architektur von IBM. Mittlerweile die zweite die auch von Java unterstützt wird.</p>
<p>Nach einem ersten Start fällt das viel schnellere Laden der Plattform auf. Dies ist einem überabeiteten Backend zu verdanken. Bei einem Update oder Installation eines zusätzlichen Plugins fällt ebenfalls die neue Routine und neuen Views auf. Hier wurde ordentlich optimiert. Dabei wurden die durchzuklickenden Dialoge reduziert. Ebenfalls wird bei der Installation von neuen Plug-ins angezeigt welche Plug-ins noch installiert werden müssen.</p>
<p>Mit Eclipse 3.5 kommen neben den Features für das Auge und der Steuerung auch einige Bugfixes. So ist es nun endlich möglich einen JUnit 4 Provider für Pluginübergreifende Tests einzusetzen. Durch einen Fehler bis zur Version 3.4.2 war dies leider nicht möglich und man musste sich vorerst mit JUnit 3 zufrieden geben. Diese Thematik ist sicherlich sehr interessant für die Reihe an Third-party Programme, die sich im Bereich Continuous Integration tummeln. Eine mitlerweile doch recht bekannte Plattform dafür ist <a href="http://docs.codehaus.org/display/M2ECLIPSE/Tycho+project+overview">Tycho</a>.</p>
<p>Für umfassende Informationen der Neuerungen in Eclipse, sollte man die <a href="http://download.eclipse.org/eclipse/downloads/drops/R-3.5-200906111540/eclipse-news-all.html">Eclipse 3.5 - New and Noteworthy</a> Seite von Eclipse besuchen. Dort wird aufgezeigt an welchen neuen Errungenschaften in den letzten Monaten gearbeitet wurde.</p>
<p>Weiterführende Informationen:</p>
<p><a href="http://www.golem.de/0906/67975.html">http://www.golem.de/0906/67975.html</a><br />
<a href="http://www.innenspur.de/?p=259">http://www.innenspur.de/?p=259</a><br />
<a href="http://javathreads.de/2009/06/eclipse-galileo-veroeffentlicht/">http://javathreads.de/2009/06/eclipse-galileo-veroeffentlicht/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.twentysqm.com/2009-06-28/eclipse-galileo-release-3-5.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>

