<?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>Wazi &#187; Grant Smith</title>
	<atom:link href="http://olex.openlogic.com/wazi/author/gsmith/feed/" rel="self" type="application/rss+xml" />
	<link>http://olex.openlogic.com/wazi</link>
	<description>Open Source Articles, Tutorials and Licensing Information</description>
	<lastBuildDate>Mon, 30 Aug 2010 20:40:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Creating a Continuous Integration Server for Java Projects Using Hudson</title>
		<link>http://olex.openlogic.com/wazi/2009/creating-a-continuous-integration-server-for-java-projects-using-hudson/</link>
		<comments>http://olex.openlogic.com/wazi/2009/creating-a-continuous-integration-server-for-java-projects-using-hudson/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 17:56:16 +0000</pubDate>
		<dc:creator>Grant Smith</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Continuum]]></category>
		<category><![CDATA[CruiseControl]]></category>
		<category><![CDATA[Hudson]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://olex.openlogic.com/wazi/?p=44227</guid>
		<description><![CDATA[A continuous integration (CI) engine is an automated build system that checks out the most current code from a source code repository, builds it, and makes the resulting artifacts available for download and review. This tutorial covers the setup of a continuous integration server for Java projects with Hudson, one of the top open source CI engines.]]></description>
			<content:encoded><![CDATA[<div style='padding:10px;border:1px solid;margin-bottom:20px;'>This article, <a href='http://olex.openlogic.com/wazi/2009/creating-a-continuous-integration-server-for-java-projects-using-hudson/'>Creating a Continuous Integration Server for Java Projects Using Hudson</a>, originally appeared on <a
      href='http://olex.openlogic.com/wazi'>Wazi</a>, a free source for news, information, and articles on open source software.</div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Folex.openlogic.com%2Fwazi%2F2009%2Fcreating-a-continuous-integration-server-for-java-projects-using-hudson%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Folex.openlogic.com%2Fwazi%2F2009%2Fcreating-a-continuous-integration-server-for-java-projects-using-hudson%2F&amp;source=OpenLogic&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>In a previous article we demonstrated <a href="http://olex.openlogic.com/wazi/2009/creating-a-maven-based-development-environment-on-linux/" target="_blank">how to setup a Linux server to use Maven</a>, the primary Java build tool. Now we&#8217;ll look at how to use <a href="https://olex.openlogic.com/packages/hudson" target="_blank">Hudson</a> to provide continuous integration to your build environment. Just what is continuous integration? Think of it this way: you have a team of developers who are all busily committing code to your source code repository. Each developer is focused on his or her role, or area of functionality, for the system being developed. A continuous integration (CI) engine is an automated build system that checks out the most current code from the source code repository, builds it, and makes the resulting artifacts available for download and/or review. It&#8217;s also a great way to see if the entire system is, in fact, compilable. More often than we&#8217;d like to admit, developers check in their code without checking for compile errors – creating a problem for others in the team who update their local sources to the trunk, only to find the system no longer compiles! The Continuous Integration Engine can be linked to a mailing list to notify developers that the build has failed. Additionally, it can show a &#8220;diff&#8221; of what has changed since the previous build, so users can see exactly who the culprit is – and follow up with merciless ridicule.</p>
<p>So why use Hudson to create a continuous integration server?  There are certainly other CI engines out there, such as the primary open source rivals to Hudson: <a href="https://olex.openlogic.com/packages/continuum" target="_blank">Apache Continuum</a> and <a href="https://olex.openlogic.com/packages/cruisecontrol" target="_blank">CruiseControl</a>.  Some good commercial CI engines are also available, but those are beyond the scope of this article.</p>
<p>We&#8217;ve worked with both Continuum and CruiseControl in the past, and consider them to be functional – in an adequate sort of way. Continuum&#8217;s web-based front-end isn&#8217;t bad, and for the most part it does what it&#8217;s designed to do. We&#8217;ve found CruiseControl to be more competent than Continuum when it comes to stability, although we must admit that we have not tried any of Continuum&#8217;s newer builds. But when it comes to ease of configuration Hudson wins, hands down. If, like us, you&#8217;re visually-oriented, and if you find it painful to edit an XML file to configure CI (as is the case with CruiseControl), Hudson&#8217;s graphical user interface just makes perfect sense.</p>
<p>Interested readers should be able to find more detailed comparisons of CI engines (like <a href="http://globalgateway.wordpress.com/2007/12/17/cruisecontrol-vs-hudson/" target="_blank">this one</a>) with a quick search, but our conclusion – based on a combination of first-hand experience and other people&#8217;s opinions – is that Hudson is the current front-runner among open source CI engines.</p>
<h2>Before You Start</h2>
<p>You&#8217;ll need to be proficient in  <a href="https://olex.openlogic.com/packages/maven" target="_blank">Maven</a> and <a href="https://olex.openlogic.com/packages/subversion" target="_blank">Subversion</a> before you continue. The principle here is to have a mock application hosted in a Subversion repository. We&#8217;ll then download and configure Hudson to access the Subversion repository, and perform continuous integration builds from there. We&#8217;ll assume you already have Maven configured. If not, have a look at the tutorial titled <a href="http://olex.openlogic.com/wazi/2009/creating-a-maven-based-development-environment-on-linux/" target="_blank">Creating a Maven-Based Development Environment on Linux</a>. You&#8217;ll also need to have an accessible Subversion server set up somewhere.  If you don&#8217;t, a good place to get started is at <a href="http://subversion.tigris.org/faq.html#repository" target="_blank">http://subversion.tigris.org/faq.html#repository</a>.</p>
<h2>Meat &amp; Potatoes</h2>
<h3>Creating a Test Project</h3>
<p>Let&#8217;s start with a software project for illustration purposes. For this, we&#8217;ll use Maven to generate a project with one simple command:</p>
<pre>mvn archetype:generate</pre>
<p>You&#8217;ll be asked to select an application type to generate. Let&#8217;s go with a simple web application. Choose option 18. Then enter the following information into the prompts:</p>
<pre>Define value for groupId: : com.example
Define value for artifactId: : testWebApp
Define value for version:  1.0-SNAPSHOT: : [Press Enter]
Define value for package:  com.example: : [Press Enter]
Define value for package:  com.example: :
Confirm properties configuration:
groupId: com.example
artifactId: testWebApp
version: 1.0-SNAPSHOT
package: com.example
 Y: : [Press Enter]</pre>
<p>Good job. You now have a fully functional web application that does very, very little indeed. You can compile and execute it for test purposes like this:</p>
<pre>cd testWebApp/</pre>
<pre>mvn -Djetty.port=9999 org.mortbay.jetty:maven-jetty-plugin:6.1.18:run</pre>
<p>The reason we use port 9999 is because we have other web applications already running on our machine. Point your favorite web browser to http://localhost:9999/testWebApp and you&#8217;ll be greeted by the now famous &#8220;Hello World!&#8221; greeting. Excited yet?</p>
<h3>Importing the Test Project into Subversion</h3>
<p>Next we need to import our new project into Subversion. We don&#8217;t want to import any generated artifacts so we first perform an <em>mvn clean</em> operation.</p>
<pre>mvn clean</pre>
<pre>cd ..</pre>
<pre>su</pre>
<pre># svnadmin create /var/lib/svn/repositories/testWebApp</pre>
<pre># cd ..</pre>
<pre># svn import testWebApp file:///var/lib/svn/repositories/testWebApp -m "initial import"</pre>
<p>Now remove your existing <em>webapp</em> directory, and check it out from Subversion.</p>
<pre>rm -rf testWebApp</pre>
<pre>svn checkout svn://armor.osdcorp.com/testWebApp</pre>
<p>Your Subversion repository will obviously be different. Substitute the <em>svn://armor.osdcorp.com</em> part with your configuration.</p>
<p>In a normal team development environment, your team would now joyfully check out the source from Subversion, make changes, and check them back in. Let&#8217;s shift our focus to the role of Hudson, our continuous integration engine of choice.</p>
<a class="wazi-ad-link" href="http://www.openlogic.com/open-source-support.php "><img width="590" height="75" src="http://olex.openlogic.com/wazi/wp-content/uploads/2010/05/open-source-support-main.png" class="attachment-maincontent_ad" alt="Get open source software support" title="Get open source software support" /></a>
<h3>Downloading and Installing Hudson</h3>
<p>To download Hudson:</p>
<pre>wget http://hudson-ci.org/latest/hudson.war</pre>
<p>Simple as that. Now, to execute it you have two options. You can either drop it into a Servlet container like Tomcat, or you can simply start it up like this:</p>
<pre>java -jar hudson.war --httpPort=8075</pre>
<p>Again, due to our system already running certain web applications, we can specify an alternate port. Point your browser to <em>http://localhost:8075</em> and you should be rewarded with the following:</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson1.png"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson1.png" alt="hudson1" width="600" height="281" /></a></p>
<p>We&#8217;ll need to do some basic configuration first. Essentially, we need to tell Hudson where the JDK and Maven reside. Click on &#8220;Manage Hudson&#8221;, then &#8220;Configure System&#8221;. In the resulting screen, configure the locations respectively. This is what it looks like on our server:</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson3.png"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson3.png" alt="hudson3" width="600" height="255" /></a></p>
<p>Next, make sure you have configured the &#8220;Hudson URL&#8221; at the bottom of this configuration screen. You need to change it from &#8220;localhost&#8221; to the actual hostname of your server. Something like this:</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson4.png"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson4.png" alt="hudson4" width="600" height="38" /></a></p>
<p>Excellent. Now click &#8220;Save&#8221;, and then click on the &#8220;New Job&#8221; link in top left corner of the page and fill out the resulting form as we have below:</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson2.png"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson2.png" alt="hudson2" width="600" height="281" /></a></p>
<p>Continuing from here, a more detailed page of your project is available:</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson5.png"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson5.png" alt="hudson5" width="600" height="311" /></a></p>
<p>Continued&#8230;</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson6.png"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/10/hudson6.png" alt="hudson6" width="600" height="283" /></a></p>
<p>Some explanation is required here. Hudson has various methods of deciding when to perform a build. These are called <em>build triggers</em>. The method we have chosen here is to poll Subversion every minute. If anything has changed, we perform a build. Other trigger mechanisms exist internally to Hudson. We say <em>internally</em> because there is one other important method to trigger a build. An HTTP GET on http://localhost:8075/job/testWebApp/build will trigger a build from an external source. How is that useful? You could use the <a href="https://olex.openlogic.com/packages/wget" target="_blank">Wget</a> utility to trigger that URL from the command line or a shell. It&#8217;s particularly handy if you use the <em>Wget</em> command on the URL from within a Subversion post-commit hook. So: every time someone commits a change to your source code repository, a build will be performed automatically. In this way we eliminate the wasteful polling of the Subversion repository by Hudson itself.</p>
<p>Let&#8217;s go ahead and set up the post-commit hook now. But first, go back into the testWebapp Hudson job configuration and uncheck the &#8220;Poll SCM&#8221; checkbox. Then click &#8220;Save&#8221;.  Now we&#8217;re ready to configure the post commit hook. Our repository resides in /var/lib/svn/repositories/testWebApp (see above):</p>
<pre>cd /var/lib/svn/repositories/testWebApp/hooks
cp post-commit.tmpl post-commit
chmod 755 post-commit</pre>
<p>Now edit post-commit and ensure that the last three lines look like this:</p>
<pre>REPOS="$1"
REV="$2"

wget http://localhost:8075/job/testWebApp/build</pre>
<p>That&#8217;s it! From now on, every time someone commits code, the build is triggered.</p>
<h2>Finishing Up</h2>
<p>There&#8217;s a lot more you can do with Hudson. It supports multiple other source code control repositories, build triggers, build notifiers&#8230; even Twitter and IRC interfaces! It uses plugins to perform much of this functionality. Take a look <a href="http://wiki.hudson-ci.org/display/HUDSON/Plugins" target="_blank">here</a> for the current list of plugins available. We hope this has been a useful introduction to Hudson. If you&#8217;re keen for more, there&#8217;s detailed information at the <a href="http://hudson-ci.org/" target="_blank">Hudson Website</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://olex.openlogic.com/wazi/2009/creating-a-continuous-integration-server-for-java-projects-using-hudson/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Creating a Maven-Based Development Environment on Linux</title>
		<link>http://olex.openlogic.com/wazi/2009/creating-a-maven-based-development-environment-on-linux/</link>
		<comments>http://olex.openlogic.com/wazi/2009/creating-a-maven-based-development-environment-on-linux/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 19:12:32 +0000</pubDate>
		<dc:creator>Grant Smith</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Ant]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDK]]></category>
		<category><![CDATA[Jetty]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Nexus]]></category>

		<guid isPermaLink="false">http://olex.openlogic.com/wazi/?p=42167</guid>
		<description><![CDATA[Maven is quickly becoming the de facto standard for Java project builds, but its reliance on a remote central repository somewhere on the Internet can be troublesome.  This tutorial covers the setup of a local Maven proxy, including installation and configuration of Maven and the Nexus repository manager on a Linux server.]]></description>
			<content:encoded><![CDATA[<div style='padding:10px;border:1px solid;margin-bottom:20px;'>This article, <a href='http://olex.openlogic.com/wazi/2009/creating-a-maven-based-development-environment-on-linux/'>Creating a Maven-Based Development Environment on Linux</a>, originally appeared on <a
      href='http://olex.openlogic.com/wazi'>Wazi</a>, a free source for news, information, and articles on open source software.</div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Folex.openlogic.com%2Fwazi%2F2009%2Fcreating-a-maven-based-development-environment-on-linux%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Folex.openlogic.com%2Fwazi%2F2009%2Fcreating-a-maven-based-development-environment-on-linux%2F&amp;source=OpenLogic&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="https://olex.openlogic.com/packages/maven" target="_blank">Maven</a> is quickly becoming the <em>de facto</em> standard for Java project builds, as more developers realize its benefits and choose to migrate from <a href="https://olex.openlogic.com/packages/ant" target="_blank">Ant</a>. Gone are the days when external project dependencies clogged up valuable space in source code control repositories. Once programmers become familiar with Maven, discovering all its advantages along the way, development proceeds as if they couldn&#8217;t get the job done without it. But there is one aspect of Maven-based development that&#8217;s potentially troublesome: the reliance on a remote central repository somewhere on the Internet. When a new developer joins a team, every single dependency is copied from the remote repository to his or her local repository cache. On Linux, this resides in the <em>$HOME/.m2/repository</em> and is usually a substantially large directory — especially if the developer has multiple projects under Maven control. This places an unnecessarily large load on the company&#8217;s or individual&#8217;s Internet link for the duration of the dependency download. Even worse, should the Internet link go down, the developer is unable to work.</p>
<p>So what&#8217;s the answer to all that wasted Internet bandwidth? A local Maven proxy. The first time a developer requests a dependency, it is copied from the central repository to the local repository, which resides on the machine running the proxy. Subsequent requests by developers in the team are then fed the copy from the local repository, typically on the same local area network (LAN). That translates to quicker builds and — as long as no new dependencies are needed — no reliance on the corporate Internet link for builds.</p>
<h2>Before You Start</h2>
<p>This tutorial covers the setup of Maven on a Linux server, as well as the best free local proxy available today, <a href="https://olex.openlogic.com/packages/nexus" target="_blank">Nexus</a>. Nexus is available in both a GPL-licensed version (Nexus Community) and a commercially-licensed version (Nexus Pro) that provides additional functionality. We will, of course, focus on the open source version as it is sufficient for most requirements. Well, OK&#8230; also because we dig open source and free stuff!</p>
<h2>Meat &amp; Potatoes</h2>
<h3>Maven Setup</h3>
<p>Let&#8217;s start off with Maven. Maven runs as a Java process, so we&#8217;ll need to make sure we have Java installed first. Download the latest <a href="https://olex.openlogic.com/packages/jdk" target="_blank">JDK</a> from <a href="https://olex.openlogic.com/" target="_blank">OpenLogic Exchange (OLEX)</a> or http://java.sun.com/javase/downloads/index.jsp.</p>
<p>You&#8217;ll be asked to select the platform and type of installation. We always download the .bin self-extracting archive, and extract it to /usr/local on the Linux host:</p>
<pre># cp &lt;download_location&gt;/jdk-6u16-linux-x64.bin /usr/local
# cd /usr/local
# sh ./jdk-6u16-linux-x64.bin</pre>
<p>Follow the prompts and install the Java SDK. You&#8217;ll see that at the time of writing, the version of the SDK was 6u16, which will obviously change. Once everything has extracted, a browser window will open and nag you to register. This is optional — the SDK will function just fine, even if you choose not to register. Close the browser and look at the new directory under /usr/local. The JDK will be installed in a directory containing the name of the version of the software, in this instance /usr/local/jdk1.6.0_16. A good trick is to make a symbolic link for this directory to /usr/local/java. That way you can keep your $JAVA_HOME environment variable set to the symbolic link. Every time you upgrade Java, simply remove the old symlink and then relink to the new location:</p>
<pre># rm -f /usr/local/java</pre>
<pre># ln -fs /usr/local/jdk1.6.0_16 /usr/local/java</pre>
<p>If you don&#8217;t already have $JAVA_HOME set up, let&#8217;s do it now. Use your favorite editor to open /etc/profile, and add the following line near the top:</p>
<pre>export JAVA_HOME=/usr/local/java</pre>
<p>While we&#8217;re here, let&#8217;s also add a needed variable for Maven:</p>
<pre>export MAVEN_HOME=/usr/local/maven</pre>
<p>Now look a little further down in the file. You should see a line configuring the $PATH variable. We need to add to the $PATH to include the ./bin directories of both Java and Maven. It should end up looking something like this:</p>
<pre>export PATH="$JAVA_HOME/bin:$PATH\
$MAVEN_HOME/bin:\
$SOME_OTHER_STUFF/bin"</pre>
<p>Save /etc/profile and exit the editor. Now it&#8217;s time to install Maven. Download it from OpenLogic Exchange (OLEX) or http://maven.apache.org/download.html.</p>
<p>Get the latest .tar.gz distribution. In our case it was apache-maven-2.2.1-bin.tar.gz:</p>
<pre># cp &lt;download_location&gt;/apache-maven-2.2.1-bin.tar.gz /usr/local
# cd /usr/local
# tar xvzf ./apache-maven-2.2.1-bin.tar.gz</pre>
<p>Now log out and back in again for the contents of /etc/profile to be read and for the environment variables and PATH to be updated. Verify both installations:</p>
<pre># java -version</pre>
<pre>java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) 64-Bit Server VM (build 14.2-b01, mixed mode)</pre>
<pre>#mvn -version
Apache Maven 2.2.1 (r801777; 2009-08-06 12:16:01-0700)
Java version: 1.6.0_16
Java home: /usr/local/jdk1.6.0_16/jre
Default locale: en_US, platform encoding: ISO-8859-1
OS name: "linux" version: "2.6.27.2" arch: "amd64" Family: "unix"</pre>
<p>Good Job! Now on to the final part of our puzzle, the Nexus repository manager.</p>
<a class="wazi-ad-link" href="http://www.openlogic.com/open-source-support.php "><img width="590" height="75" src="http://olex.openlogic.com/wazi/wp-content/uploads/2010/05/open-source-support-main.png" class="attachment-maincontent_ad" alt="Get open source software support" title="Get open source software support" /></a>
<h3>Nexus Setup</h3>
<p>Nexus is deployed as a standard J2EE web archive or <em>.war</em>, as it is affectionately known. There are two download options: one as a .war, which you can install into a J2EE compliant server; or a standalone version which contains an embedded <a href="https://olex.openlogic.com/packages/jetty" target="_blank">Jetty</a> server. We&#8217;re going to focus on the standalone deployment.</p>
<p>Let&#8217;s start off by downloading and installing Nexus:</p>
<pre># cd /usr/local</pre>
<pre># wget http://nexus.sonatype.org/downloads/nexus-webapp-1.3.6-bundle.tar.gz</pre>
<pre># tar xvzf nexus-webapp-1.3.6-bundle.tar.gz</pre>
<pre># ln -fs nexus-webapp-1.3.6 nexus</pre>
<pre># cd nexus</pre>
<pre># ls ./bin/jsw/</pre>
<p>This will show you a list of directories for the supported architectures. In this case we&#8217;re running Linux x86-64, so to start the server we type:</p>
<pre>#  ./bin/jsw/linux-x86-64/nexus start</pre>
<p>You can install Nexus as a Linux service, too. Look for the link to the official documentation at the end of this article for details. To follow the log of the starting up server:</p>
<pre># tail -f logs/wrapper.log</pre>
<p>If all runs correctly and you see no ominous-looking error messages, you should now have the proxy up and running. But we still have to tell Maven to look at the repository, instead of at the default central Maven servers. We do this by editing <em>settings.xml</em>, which resides in the <em>.m2</em> directory under your home directory.</p>
<pre>&lt;settings&gt;
  &lt;mirrors&gt;
    &lt;mirror&gt;
      &lt;id&gt;nexus&lt;/id&gt;
      &lt;mirrorOf&gt;*&lt;/mirrorOf&gt;
      &lt;url&gt;http://localhost:8081/nexus/content/groups/public&lt;/url&gt;
    &lt;/mirror&gt;
  &lt;/mirrors&gt;
  &lt;profiles&gt;
    &lt;profile&gt;
      &lt;id&gt;nexus&lt;/id&gt;
      &lt;!--Enable snapshots for the built in central repo to direct --&gt;
      &lt;!--all requests to nexus via the mirror --&gt;
      &lt;repositories&gt;
        &lt;repository&gt;
          &lt;id&gt;central&lt;/id&gt;
          &lt;url&gt;http://central&lt;/url&gt;
          &lt;releases&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/releases&gt;
          &lt;snapshots&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/snapshots&gt;
        &lt;/repository&gt;
      &lt;/repositories&gt;
      &lt;pluginRepositories&gt;
        &lt;pluginRepository&gt;
          &lt;id&gt;central&lt;/id&gt;
          &lt;url&gt;http://central&lt;/url&gt;
          &lt;releases&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/releases&gt;
          &lt;snapshots&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/snapshots&gt;
        &lt;/pluginRepository&gt;
      &lt;/pluginRepositories&gt;
    &lt;/profile&gt;
  &lt;/profiles&gt;
  &lt;activeProfiles&gt;
    &lt;!--make the profile active all the time --&gt;
    &lt;activeProfile&gt;nexus&lt;/activeProfile&gt;
  &lt;/activeProfiles&gt;
&lt;/settings&gt;</pre>
<p>Remember that each of the developers in your organization will have to do this on their local machines, but replace localhost in <span style="text-decoration: underline;">http://localhost:8081/nexus/content/groups/public</span> with the name or IP address of your repository server.</p>
<p>We&#8217;re almost there. We still have to tell the repository proxy exactly what it has to proxy! For this task, Nexus has a really cool web-based interface for us to use. Fire up a browser on the machine and point it to <span style="text-decoration: underline;">http://localhost:8081/nexus</span>.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/09/nexus1.jpeg"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/09/nexus1.jpeg" alt="The Nexus Welcome Screen" width="600" height="129" /></a></p>
<p style="text-align: center;">Above: The Nexus <em>Welcome</em> Screen</p>
<p>Click on the <em>Log In</em> link at the top right hand side, and log in as admin with the password you configured during the setup process.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/09/nexus2.jpg"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/09/nexus2.jpg" alt="The Repository View" width="600" height="236" /></a></p>
<p style="text-align: center;">Above: The <em>Repository</em> View</p>
<p>Your screen may look slightly different. The <em>Repository Path</em> column will reflect either localhost, or the name of your server if you are administering from a remote machine. The next step is to download the <a href="https://olex.openlogic.com/packages/lucene" target="_blank">Lucene</a> indexes for all of the &#8220;proxy&#8221; pre-configured repositories. For example, click on the &#8220;Maven Central&#8221; proxy and select the <em>Configuration</em> tab below. Change &#8220;Download Remote Indexes&#8221; to <em>True</em>, and then click <em>Save</em>.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/09/nexus3.jpg"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/09/nexus3.jpg" alt="Enabling Download of Remote Indexes" width="600" height="365" /></a></p>
<p style="text-align: center;">Above: Enabling Download of Remote Indexes</p>
<p>Then right-click on the same proxy, and select <em>Re-Index</em>. Repeat the process for each of the proxies.</p>
<h2>Finishing Up</h2>
<p>Well done! You now have a functioning proxy that will start building a repository as you use it from your Maven project builds. If something doesn&#8217;t work, or you&#8217;re confused about some of the Nexus functionality, Sonatype has extremely good online documentation at <a href="http://www.sonatype.com/books/nexus-book/reference/index.html" target="_blank">http://www.sonatype.com/books/nexus-book/reference/index.html</a>, including instructions on how to install Nexus as a service. This is definitely worth doing. You can also add periodic tasks to download and re-index the proxies.</p>
<p>At this point, you should aim to become more familiar with the administration interface and understand all of its functionality. Reference the documentation and examine the system logs for any potential problems.</p>
]]></content:encoded>
			<wfw:commentRss>http://olex.openlogic.com/wazi/2009/creating-a-maven-based-development-environment-on-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Survey of Open Source Modeling Tools for Software Development</title>
		<link>http://olex.openlogic.com/wazi/2009/oss-modeling-tools-for-software-development/</link>
		<comments>http://olex.openlogic.com/wazi/2009/oss-modeling-tools-for-software-development/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 18:21:55 +0000</pubDate>
		<dc:creator>Grant Smith</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Acceleo]]></category>
		<category><![CDATA[AndroMDA]]></category>
		<category><![CDATA[ArgoUML]]></category>
		<category><![CDATA[BOUML]]></category>
		<category><![CDATA[Dia]]></category>
		<category><![CDATA[Gaphor]]></category>
		<category><![CDATA[Kivio]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[PyUML]]></category>
		<category><![CDATA[StarUML]]></category>
		<category><![CDATA[Taylor]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[UniMod]]></category>
		<category><![CDATA[Violet]]></category>

		<guid isPermaLink="false">http://olex.openlogic.com/wazi/?p=1415</guid>
		<description><![CDATA[Poor planning is one of the top reasons why software projects are delivered late, over budget, or not at all, so it’s important to get organized before you start coding. In this article we survey some of the open source modeling tools available to help you streamline the development planning process.]]></description>
			<content:encoded><![CDATA[<div style='padding:10px;border:1px solid;margin-bottom:20px;'>This article, <a href='http://olex.openlogic.com/wazi/2009/oss-modeling-tools-for-software-development/'>Survey of Open Source Modeling Tools for Software Development</a>, originally appeared on <a
      href='http://olex.openlogic.com/wazi'>Wazi</a>, a free source for news, information, and articles on open source software.</div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Folex.openlogic.com%2Fwazi%2F2009%2Foss-modeling-tools-for-software-development%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Folex.openlogic.com%2Fwazi%2F2009%2Foss-modeling-tools-for-software-development%2F&amp;source=OpenLogic&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Poor planning is one of the top reasons why software projects are delivered late, over budget, or not at all, so it’s important to get organized before you start coding.  For decades programmers tried all manner of flow charts, elaborate diagrams, and volumes of specifications in an attempt to fully understand the code they planned to write, but these methods often proved to be ineffective and time consuming.  Fortunately, programmers today can choose from a wide range of modeling tools that make it relatively easy to lay out the functionality and use cases for a new project.</p>
<p>In this article we’ll survey some of the modeling tools available to help you streamline the development planning process.  All of the modeling tools covered in this survey are open source applications. The modeling tools addressed in this survey are:</p>
<ul>
<li><a href="https://olex.openlogic.com/packages/acceleo" target="_blank">Acceleo</a></li>
<li><a href="https://olex.openlogic.com/packages/andromda" target="_blank">AndroMDA</a></li>
<li><a href="https://olex.openlogic.com/packages/argouml" target="_blank">ArgoUML</a></li>
<li><a href="https://olex.openlogic.com/packages/bouml" target="_blank">BOUML</a></li>
<li><a href="https://olex.openlogic.com/packages/dia" target="_blank">Dia</a></li>
<li><a href="http://www.fujaba.de/" target="_blank">Fujaba</a></li>
<li><a href="https://olex.openlogic.com/packages/gaphor" target="_blank">Gaphor</a></li>
<li><a href="https://olex.openlogic.com/packages/kivio" target="_blank">Kivio</a></li>
<li><a href="https://olex.openlogic.com/packages/netbeans" target="_blank">NetBeans</a></li>
<li><a href="http://www.papyrusuml.org/" target="_blank">Papyrus</a></li>
<li><a href="https://olex.openlogic.com/packages/pyuml" target="_blank">PyUML</a></li>
<li><a href="https://olex.openlogic.com/packages/staruml" target="_blank">StarUML</a></li>
<li><a href="https://olex.openlogic.com/packages/taylor" target="_blank">Taylor</a></li>
<li><a href="https://olex.openlogic.com/packages/uml" target="_blank">Umbrello</a></li>
<li><a href="https://olex.openlogic.com/packages/unimod" target="_blank">UniMod</a></li>
<li><a href="https://olex.openlogic.com/packages/violet" target="_blank">Violet</a></li>
</ul>
<h3>Background</h3>
<p>As modeling tools have evolved, they’ve blurred the boundaries of traditional software development planning. For example, some modeling tools can analyze and reverse engineer source code in order to produce UML diagrams. Similarly, most modeling tools support <a href="http://en.wikipedia.org/wiki/Model_Driven_Architecture" target="_blank">model-driven architecture (MDA)</a>, which means they can generate code from the models. Whether or not you use those features — and to what extent — is up to you. One option is to use the generated code as a skeleton and add in technology of your choice further down the road.</p>
<p>Most of the modeling tools covered in this survey use the <a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language" target="_blank">Unified Modeling Language (UML)</a>, so you may wish to become proficient in UML to maximize your understanding of these tools.  In addition to UML compliance, some of the other factors we’ll examine for these modeling tools include:</p>
<ul>
<li>Code generation capabilities</li>
<li>Ease of use</li>
<li>Documentation</li>
</ul>
<p>We’ll start by taking a look at &#8220;contenders&#8221; that have unique strengths or benefits but lack some of the features we feel are most desirable. Then, we’ll move on to our list of &#8220;primary candidates&#8221; that offer the strongest combination of capabilities, documentation, and ease of use.</p>
<a class="wazi-ad-link" href="http://www.openlogic.com/open-source-support.php "><img width="590" height="75" src="http://olex.openlogic.com/wazi/wp-content/uploads/2010/05/open-source-support-main.png" class="attachment-maincontent_ad" alt="Get open source software support" title="Get open source software support" /></a>
<h3>Condenders</h3>
<h4>AndroMDA</h4>
<p>If you&#8217;re serious about taking the MDA approach to software development, <a href="https://olex.openlogic.com/packages/andromda" target="_blank">AndroMDA</a> is candidate worthy of consideration.  While it does not have UML diagramming tools of it&#8217;s own, AndroMDA integrates with others to do the code generation. What we love about it is that it integrates with <a href="https://olex.openlogic.com/packages/maven" target="_blank">Maven</a>, which is quickly becoming the standard build tool for Java development.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_andromda.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_andromda.png" alt="" width="350" height="263" /></a></p>
<h4>Dia</h4>
<p><a href="https://olex.openlogic.com/packages/dia" target="_blank">Dia</a> is an application for creating technical diagrams. Its interface and features are loosely patterned after the Windows program Visio, so many users will find it easy to get started. Features of Dia include multiple-page printing, export to many formats (including EPS, SVG, CGM, and PNG), and the ability to use custom shapes created by the user as simple XML descriptions.  Dia is useful for drawing UML diagrams, network maps, and flowcharts, but it does not support code generation. It runs on Linux, Unix and Windows and is released under the <a href="https://olex.openlogic.com/license_classes/4" target="_blank">GPL License</a>.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_dia.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_dia.png" alt="" width="350" height="347" /></a></p>
<h4>Fujaba</h4>
<p><a href="http://www.fujaba.de/" target="_blank">Fujaba</a> is a UML modeling tool that generates code in Java and vice-versa. Most of the documentation is is German, but there is great tutorial in English that demonstrates how to create a networked game using Fujaba exclusively. It is distinguished from other CASE-Tools by the fact that it performs Story Driven Modeling (SDM). Fujaba seems to be popular among German academic institutions and is used as a teaching aid for software development.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_fujaba4.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_fujaba4.png" alt="" width="350" height="216" /></a></p>
<h4>Gaphor</h4>
<p><a href="https://olex.openlogic.com/packages/gaphor" target="_blank">Gaphor</a> is a simple UML 2.0 modeling environment, and simplicity seems to be its primary aim — it is easy to install, use and extend. Gaphor is cross-platform, running on multiple flavors of Unix and Windows. No code generation is supported. However the models can be exported to XMI, and SVG, PNG and PDF format exports are supported for the diagrams.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_gaphor-ss2.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_gaphor-ss2.png" alt="" width="350" height="305" /></a></p>
<h4>Kivio</h4>
<p><a href="https://olex.openlogic.com/packages/kivio" target="_blank">Kivio</a> is the <a href="https://olex.openlogic.com/packages/koffice" target="_blank">KOffice</a> flowchart and diagram creation tool. It allows you to create accurate scale diagrams by arranging pre-drawn shapes and stencils on a page. The stencils might represent stages of a process, office furniture, or components on an electronic circuit. Kivio comes with a large collection of different stencils, which are grouped into collections — known as stencil sets — by subject area. Kivio features script-able stencils using Python, support for Dia stencils, and a plugin framework for adding more functionality. No code generation is supported.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_kivio.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_kivio.png" alt="" width="350" height="264" /></a></p>
<h4>PyUML</h4>
<p><a href="https://olex.openlogic.com/packages/pyuml" target="_blank">PyUML</a> is described as a fully functional UML-Roundtrip-Tool for <a href="https://olex.openlogic.com/packages/python" target="_blank">Python</a>. It is implemented as an <a href="https://olex.openlogic.com/packages/eclipse" target="_blank">Eclipse</a> plugin based on the plugins <a href="https://olex.openlogic.com/packages/pydev" target="_blank">PyDev</a> and <a href="https://olex.openlogic.com/packages/eclipseplugin-eclipse_uml2" target="_blank">Eclipse Uml2Tools</a>. Unfortunately, the user guide is only available in German, and as such we were not able to thoroughly evaluate its features. It appears to support code generation for Python only, and as of publication of this survey it did not support the latest version of Eclipse (Ganymede).</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_pyuml.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_pyuml.png" alt="" width="350" height="141" /></a></p>
<h4>StarUML</h4>
<p><a href="https://olex.openlogic.com/packages/staruml" target="_blank">StarUML</a> is a Windows-only code generator and UML editor.  The documentation is reasonably good, but it&#8217;s obvious that it was directly translated from Korean or written by a non-native English speaker. Documentation is available in Korean, Russian and Japanese, too. The product itself is very powerful; generation is not limited at all, so you can generate Word documents and spreadsheets as well as source code. Although it is touted as open source, several commercial dependencies are required to build from source.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_staruml.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_staruml.png" alt="" width="350" height="227" /></a></p>
<p>The last release of StarUML was in 2005, so it seems the product is either completely stable or development has stalled. A recent discussion on the forum page indicates that the project may have been abandoned, and some developers have started a fork called <a href="http://sunuml.wiki.sourceforge.net/" target="_blank">SunUML</a>.</p>
<h4>Umbrello</h4>
<p><a href="https://olex.openlogic.com/packages/uml" target="_blank">Umbrello</a> is a nice KDE-based UML modeler and code generator with a wealth of code generation options. In fact, it supports more languages out of the box than all of the other generators included in this survey. Most new Linux distributions with KDE4 include Umbrello as part of the kdesdk package. Umbrello is not yet available for Windows, but it looks as though this may soon change — there&#8217;s a screenshot of Umbrello running on Windows in an experimental capacity on the project website.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_umbrello-20.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_umbrello-20.png" alt="" width="350" height="264" /></a></p>
<h4>UniMod</h4>
<p>One approach to software development is to concentrate on defining and implementing application behavior using SWITCH-technology with the help of Structural Finite State Machines (FSM), and <a href="https://olex.openlogic.com/packages/unimod" target="_blank">UniMod</a> falls within this methodology. However, UniMod is different from other projects using FSMs for describing application logic in that it uses UML and is not focused on embedded systems. UniMod generates Java code exclusively and is another plugin for the Eclipse platform.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_unimod.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_unimod.png" alt="" width="350" height="312" /></a></p>
<h4>Violet</h4>
<p><a href="https://olex.openlogic.com/packages/violet" target="_blank">Violet</a> is a simple UML diagram editor and is not intended as an industrial strength modeling tool. No code generation or reverse engineering capabilities are provided, and it does not support XMI export or perform semantic checking of models (in other words, you can draw contradictory diagrams). Violet can be run as an applet, via Java Web Start or as an Eclipse plugin. Violet&#8217;s strength lies in its simplicity and easy of use.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_violet.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_violet.png" alt="" width="350" height="268" /></a></p>
<h3>Primary Candidates</h3>
<h4>ArgoUML</h4>
<p><a href="https://olex.openlogic.com/packages/argouml" target="_blank">ArgoUML</a> is another mature code generating CASE tool, supporting diagram editing for all 9 UML 1.4 diagrams. It boasts a rich set of features including code generation for Java, C++, C#, PHP4 and PHP5, and it&#8217;s platform independent and available in ten languages. Diagrams can be exported in as GIF, PNG, PS, EPS, PGML and SVG. Another nice feature is that it supports reverse engineering with Jar/class file importing. Even though we found the user documentation to be lacking in some areas, the documentation seems to be an active work in progress.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_argouml.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_argouml.png" alt="" width="350" height="318" /></a></p>
<p>ArgoUML is very easy to install, as it has no dependencies other than Java. In most cases it can be installed with a single click using Java Web Start. ArgiUML supports XMI, which is an XML based exchange format between UML tools, so interchange between XMI-compliant tools should be a snap. Other cool features include to-do lists, design critics, OCL support, checklists and multiple overlapping views.</p>
<p>It&#8217;s worth mentioning that there is a commercial product called Poseidon, which uses the ArgoUML code base and presents a more complete, rounded product. Having used both, we can live with some of the rough edges in ArgoUML in order to gain some of the other benefits of using an open source solution.</p>
<h4>BOUML</h4>
<p><a href="https://olex.openlogic.com/packages/bouml" target="_blank">BOUML</a> is a very promising project. Running under Linux, Solaris, MacOS X and Windows, it provides UML diagram editing and code generation for C++, Java, Python, PHP and IDL. The generated code is achieved through what the author calls &#8220;plug-outs&#8221; (named because they execute outside of the BOUML environment), which can be developed in C++ or Java to support other languages. Considering the author is a non-native English speaker, the documentation is excellent. This is a great example of useful open source.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_bouml.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_bouml.png" alt="" width="350" height="270" /></a></p>
<h4>Netbeans</h4>
<p>The popular <a href="https://olex.openlogic.com/packages/netbeans" target="_blank">Netbeans IDE</a> has a great UML plugin, which is easily installed via the Plugin Manager. Designers and analysts design applications using the UML modeling language, then developers generate Java code from the UML model. You can also update the model from changes made in the source code. Generated source code can be saved into new source files or merged into existing source code files, thereby providing full round-trip engineering capability. Your collection types are preserved during Forward and Reverse Engineering and may be set and changed.  The Netbeans documentation is very good, and there are tutorial trails covering UML based development. However, code generation is currently Java only.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_netbeans.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_netbeans.png" alt="" width="350" height="191" /></a></p>
<h4>Papyrus / Acceleo</h4>
<p>Another tool based on the Eclipse environment, <a href="http://www.papyrusuml.org/" target="_blank">Papyrus</a> models within UML 2.0 and supports multiple code generation possibilities. It supports the DI (Diagram Interchange) standard, an extensible architecture that allows users to add new diagrams and new code generators as well as profile development support facilities for UML2 profiles, nested profiles, and OCL constraints in profile descriptions. Code generation is supported through interfacing with Acceleo.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_papyrus.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_papyrus.png" alt="" width="350" height="237" /></a></p>
<p><a href="https://olex.openlogic.com/packages/acceleo" target="_blank">Acceleo</a>, built as an Eclipse plugin and utilizing the Eclipse EMF (Eclipse Modeling Framework), is a mature MDA environment. With syntax highlighting, real-time error detection, meta-model and scripts-based completion, and real-time preview of generated code, this is certainly an extremely useful product. Acceleo lets you insert custom coding into the generated code by defining coding zones, which are preserved in future iterations of generation. What this means is that you can use Acceleo throughout your development process and seamlessly evolve your project without losing any customization code. It uses custom templates to generate many commonly used programming artifacts, using wizards and a special syntax defined as a result of many years of experience in code generation. In addition, Acceleo uses &#8220;services&#8221; to extend templates to implement complex operations — basically allowing unlimited extensibility while keeping the templates clean and easy to read. Acceleo can be used to generate C, Fortran, Java, Smalltalk, XML, VB.Net, and virtually any markup language. This is accomplished by the use of Modules, which are basically groups of several templates that describe the information required to generate source code.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_acceleo.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_acceleo.png" alt="" width="350" height="200" /></a></p>
<p>A large number of commercial and open source UML Case tools are compatible with Acceleo, and it runs on any Eclipse-compatible operating system. And if this all sounds way too technical, don&#8217;t despair — the online documentation and tutorials are superb. The website features a support forum for both English and French language users. Additionally, there is a wiki, an IRC channel, a mailing list and an RSS feed.</p>
<h4>Taylor</h4>
<p>Implemented as a set of Eclipse plugins and targeted towards JEE development, <a href="https://olex.openlogic.com/packages/taylor" target="_blank">Taylor</a> aims to make creating JEE applications as easy as Ruby-on-Rails, but with the power of JEE and UML. We were very pleased to see that Taylor can generate <a href="https://olex.openlogic.com/packages/jsf" target="_blank">JSF</a> and <a href="https://olex.openlogic.com/packages/jboss-seam" target="_blank">JBoss Seam</a> code, as well as EJB3 Entity and Session Beans. Equally exciting is the fact it can generate Maven pom.xml files and APT documentation from the UML comments. This merely scratches the surface of its feature list — Java Enterprise developers won&#8217;t be disappointed with the direction of this project. The documentation is excellent and includes a cool Flash-based demo.</p>
<p><a href="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_taylor.png" target="_blank"><img src="http://olex.openlogic.com/wazi/wp-content/uploads/2009/02/uml_modeling_taylor.png" alt="" width="350" height="264" /></a></p>
<h3>Conclusion</h3>
<p>From the perspective of a reviewer with no specific software development project in mind, the most feature-laden option is the Papyrus / Acceleo combination. If your primary IDE is Eclipse, you will benefit from having your modeling software running in the same environment as your active code editor. For Java programmers using Netbeans, the same can said of its modeling tool. BOUML, while superb in its own right, is the vision of a single author and, as such, enterprise development institutions may be hesitant to adopt it. If you don&#8217;t mind breaking away from your IDE, give Taylor a test drive.</p>
<p>As we’ve seen, there are many good open source choices for project conception and planning tools, but the best tool for the job is not easily defined.  Your unique programming language requirements, environment, operating system, and IDE will guide your decision making process.</p>
]]></content:encoded>
			<wfw:commentRss>http://olex.openlogic.com/wazi/2009/oss-modeling-tools-for-software-development/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
