<?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>We Heart Code &#187; groovy</title>
	<atom:link href="http://www.weheartcode.com/category/groovy/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.weheartcode.com</link>
	<description>A discourse on programming</description>
	<lastBuildDate>Thu, 12 May 2011 23:17:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Easily Creating Fixed Length Flat Files With Groovy</title>
		<link>http://www.weheartcode.com/2009/01/21/easily-creating-fixed-length-flat-files-with-groovy/</link>
		<comments>http://www.weheartcode.com/2009/01/21/easily-creating-fixed-length-flat-files-with-groovy/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 13:42:27 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[groovy]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.weheartcode.com/2009/01/21/easily-creating-fixed-length-flat-files-with-groovy/</guid>
		<description><![CDATA[Here's an (I think elegant) way to create flat files with Groovy. I want this script to be easy to read by future developers. So if someone wants to know what the format of the file is they can see it just by opening the script. Classes We'll Use Groovy: SQL: We'll use this library [...]]]></description>
			<content:encoded><![CDATA[<p>Here's an (I think elegant) way to create flat files with Groovy.</p>
<p>I want this script to be easy to read by future developers. So if someone wants to know what the format of the file is they can see it just by opening the script.</p>
<h2>Classes We'll Use</h2>
<p>Groovy:</p>
<ul>
<li><a href="http://docs.codehaus.org/display/GROOVY/Tutorial+6+-+Groovy+SQL">SQL</a>: We'll use this library to access the database, it has some nice closure methods like eachRow which make iterating over results easy.</li>
<li><a href="http://groovy.codehaus.org/groovy-jdk/java/lang/String.html">String</a>: Groovy includes a string class that has some nice methods like padRight and padLeft, handy for making fixed length files.</li>
</ul>
<p>Java:</p>
<ul>
<li><a href="http://java.sun.com/j2se/1.5.0/docs/api/java/io/FileWriter.html">File Writer</a>: The easiest way to create files in java.</li>
</ul>
<h2>The Plan</h2>
<p>Define our file in a map at the top of the file, it will be SQL Alias Name : Length.</p>
<p>Execute our SQL, for each row iterate through our file definition map and pad each value by the appropriate length.</p>
<h2>The Code</h2>
<p>Pretty self explanatory -- a few neat groovy things we use in this script:</p>
<ul>
<li>Triple quotes for a multiline string (our sql)</li>
<li>The format method to easily format a date (bye bye simple date format) for the file name</li>
<li>The elvis operator <code>?:</code> makes the results null safe so we can call padRight.</li>
<li>The each method on Groovy's Map that accepts a closure, we use that to iterate through our file definition.</li>
</ul>
<div class="syntax_hilite">
<div id="java-2">
<div class="java"><span style="color: #a1a100;">import groovy.sql.Sql</span></p>
<p><span style="color: #a1a100;">import java.io.File;</span><br />
<span style="color: #a1a100;">import java.io.FileWriter;</span></p>
<p>&nbsp; &nbsp; def fileName = <span style="color: #ff0000;">"FLATFILE"</span> + <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a>.<span style="color: #006600;">format</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'%tY%&lt;tm%&lt;td'</span>,<span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl%3ADate+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Date</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #ff0000;">".txt"</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; def sql = Sql.<span style="color: #006600;">newInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"jdbc:oracle:thin:@localhost:1521:midb01"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0000;">"xxx"</span>,<span style="color: #ff0000;">"xxx"</span>, <span style="color: #808080; font-style: italic;">//user,pass</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0000;">"oracle.jdbc.driver.OracleDriver"</span><span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">//jdbc driver</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AFileWriter+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">FileWriter</span></a> writer = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl%3AFileWriter+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">FileWriter</span></a><span style="color: #66cc66;">&#40;</span>fileName<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//this map defines the field length based on alias id from the SQL</span><br />
&nbsp; &nbsp; def fileDef = <span style="color: #66cc66;">&#91;</span>COLUMN1:<span style="color: #cc66cc;">14</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; COLUMN2:<span style="color: #cc66cc;">9</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; COLUMN3:<span style="color: #cc66cc;">5</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; COLUMN4:<span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#93;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; def qry = <span style="color: #ff0000;">""</span><span style="color: #ff0000;">"SELECT column1,column2,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; column3,column4 FROM OurTable"</span><span style="color: #ff0000;">""</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; def test = sql.<span style="color: #006600;">eachRow</span><span style="color: #66cc66;">&#40;</span>qry<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>row -&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; fileDef.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#123;</span> k,v-&gt; writer.<span style="color: #006600;">append</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>row<span style="color: #66cc66;">&#91;</span>k<span style="color: #66cc66;">&#93;</span> ?: <span style="color: #ff0000;">" "</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">padRight</span><span style="color: #66cc66;">&#40;</span>v<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; writer.<span style="color: #006600;">append</span> <span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\n</span>"</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; writer.<span style="color: #006600;">close</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></div>
</div>
</div>
<p></p>
<!-- Social Bookmarks BEGIN --><div class="social_bookmark"><em>Bookmark to:</em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.weheartcode.com/2009/01/21/easily-creating-fixed-length-flat-files-with-groovy/&amp;title=Easily+Creating+Fixed+Length+Flat+Files+With+Groovy" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to Del.icio.us"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/delicious.png" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to Del.icio.us" alt="Add 'Easily Creating Fixed Length Flat Files With Groovy' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.weheartcode.com/2009/01/21/easily-creating-fixed-length-flat-files-with-groovy/&amp;title=Easily+Creating+Fixed+Length+Flat+Files+With+Groovy" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to digg"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/digg.png" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to digg" alt="Add 'Easily Creating Fixed Length Flat Files With Groovy' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Easily+Creating+Fixed+Length+Flat+Files+With+Groovy&amp;u=http://www.weheartcode.com/2009/01/21/easily-creating-fixed-length-flat-files-with-groovy/" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to FURL"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/furl.png" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to FURL" alt="Add 'Easily Creating Fixed Length Flat Files With Groovy' to FURL" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.weheartcode.com/2009/01/21/easily-creating-fixed-length-flat-files-with-groovy/&amp;title=Easily+Creating+Fixed+Length+Flat+Files+With+Groovy" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to reddit"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/reddit.png" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to reddit" alt="Add 'Easily Creating Fixed Length Flat Files With Groovy' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.weheartcode.com/2009/01/21/easily-creating-fixed-length-flat-files-with-groovy/" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to Technorati"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/technorati.png" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to Technorati" alt="Add 'Easily Creating Fixed Length Flat Files With Groovy' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.weheartcode.com/2009/01/21/easily-creating-fixed-length-flat-files-with-groovy/&amp;title=Easily+Creating+Fixed+Length+Flat+Files+With+Groovy" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to Google Bookmarks"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/google.png" title="Add 'Easily Creating Fixed Length Flat Files With Groovy' to Google Bookmarks" alt="Add 'Easily Creating Fixed Length Flat Files With Groovy' to Google Bookmarks" /></a></div>
<!-- Social Bookmarks END -->]]></content:encoded>
			<wfw:commentRss>http://www.weheartcode.com/2009/01/21/easily-creating-fixed-length-flat-files-with-groovy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Writing Portable Groovy Scripts with A Magic Runnable Jar</title>
		<link>http://www.weheartcode.com/2009/01/14/writing-portable-groovy-scripts-with-a-magic-runnable-jar/</link>
		<comments>http://www.weheartcode.com/2009/01/14/writing-portable-groovy-scripts-with-a-magic-runnable-jar/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 14:24:57 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.weheartcode.com/2009/01/14/writing-portable-groovy-scripts-with-a-magic-runnable-jar/</guid>
		<description><![CDATA[I've found myself using Java as a "scripting" language lately due to the necessity of working in mixed *nix and windows environments where I can't count on a standard scripting language being installed like python,perl, or ruby. What's more I either don't have the rights to install a binary of said scripting languages or don't [...]]]></description>
			<content:encoded><![CDATA[<p>I've found myself using Java as a "scripting" language lately due to the necessity of working in mixed *nix and windows environments where I can't count on a standard scripting language being installed like python,perl, or ruby. What's more I either don't have the rights to install a binary of said scripting languages or don't want to go through the bureaucracy to request the installation.</p>
<p>The benefits of using Java in these environments is I can package my program as a Runnable Jar easily through Eclipse's Export functionality. I also have a wonderful wealth of libraries for doing almost anything I want -- from FTP libraries, to any Database driver I can dream of. Anyone who's had to deal with the freetds library in perl to connect to a MS SQL database knows what a huge boon being able to use JDBC is.</p>
<p>The cons of using Java is my code is not as terse as it could be, and for common scripting tasks like reading and writing files and database records a simple task now becomes tons of boiler plate exception handling and JDBC calls. I also have to re-compile and re-package my entire program if I want to make a simple change.</p>
<p>What if we could harness the power of any Java Library we wanted, no hassle deployment, but marry the simplicity of a scripting language and flexibility of an interpreted language? </p>
<h2>Enter Groovy</h2>
<p><span id="more-47"></span></p>
<p>Hello world in groovy:</p>
<div class="syntax_hilite">
<div id="java-7">
<div class="java">println <span style="color: #ff0000;">"Hello, I'm a portable Groovy Script!"</span></div>
</div>
</div>
<p></p>
<p>Iterating over an oracle record set in Groovy:</p>
<div class="syntax_hilite">
<div id="java-8">
<div class="java"><span style="color: #a1a100;">import groovy.sql.Sql</span></p>
<p>
def sql = Sql.<span style="color: #006600;">newInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"jdbc:oracle:thin:@localhost:1521:MYSID"</span>,<span style="color: #ff0000;">"xxx"</span>,<span style="color: #ff0000;">"xxx"</span>,<span style="color: #ff0000;">"oracle.jdbc.driver.OracleDriver"</span><span style="color: #66cc66;">&#41;</span></p>
<p>sql.<span style="color: #006600;">eachRow</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"Select * from employees"</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> employee-&gt;<br />
println employee<br />
<span style="color: #66cc66;">&#125;</span></p>
<p>sql.<span style="color: #006600;">close</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></div>
</div>
</div>
<p></p>
<p>I don't want to go into the groovy language, that's another topic, but I think it's obvious that for simple tasks Groovy is superior to Java.</p>
<p>There are many ways to <a href="http://groovy.codehaus.org/Running">Run Groovy Scripts</a>. However, I want a way to run a script without having to install the Groovy Runtime.</p>
<p>Ideal situation:</p>
<ul>
<li>Develop Groovy script in Eclipse</li>
<li>Export Groovy Runtime as Runnable Jar from Eclipse Project</li>
<li>Upload Runnable Jar and Groovy Script to Any Server with a JRE</li>
<li>Run runnable jar server, by specifying path to groovy script</li>
</ul>
<p>This gives me the flexibility of being able to use my favorite IDE, and easily run <em>and change</em> my script on any other machine with a JRE.</p>
<p>If you'd like you can also download the finished <a href="http://www.weheartcode.com/GroovyLauncher.zip">GroovyLauncher</a> eclipse project.</p>
<p><strong>Developing Groovy Scripts in Eclipse</strong><br />
You'll should have a recent version of Eclipse and the <a href="http://groovy.codehaus.org/Eclipse+Plugin">Groovy Plugin</a>.  To create a new project, simply start a new Java Project, then create a new Groovy Class to add any classes/scripts you want to your project. It's important that you add one groovy script to this project even if it's just a simple hello world script, that will prompt Eclipse to add the Groovy Libraries jars to the build path of your project.</p>
<p>Now to run a groovy script in eclipse you just right click on the .groovy file and do "Run as Groovy Script", done and done. However, in order to run our script from a runnable jar we are going to need a Java Class with a Main method. </p>
<p><strong>Launching A Groovy Script with the Groovy Shell</strong></p>
<p>The <a href="http://groovy.codehaus.org/api/groovy/lang/GroovyShell.html">GroovyShell</a> class is a handy Java Class that can run any Groovy Script passed into it's Main method. We're going to wrap this  class in our own Main class called GroovyLauncher.</p>
<p>So I just make a new Java Class called GroovyLauncher and tell eclipse to create a main method for it.</p>
<p>The class looks like this:</p>
<div class="syntax_hilite">
<div id="java-9">
<div class="java"><span style="color: #a1a100;">import groovy.lang.GroovyShell;</span></p>
<p><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> GroovyLauncher <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">static</span> <span style="color: #993333;">void</span> main<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> args<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; GroovyShell.<span style="color: #006600;">main</span><span style="color: #66cc66;">&#40;</span>args<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p><span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<p>So this class will be the Main Class we tell Eclipse to use when creating an exportable jar. This class does nothing inside of eclipse, because it expects the path to a groovy script to be passed into it from the command line. We'll only use this Main class when launching from our deployed location. </p>
<p>In order to create a Runnable Jar from an Eclipse Project we need to create a LaunchConfiguration, the quickest way to do that is just to right click on our GroovyLauncher class and do Run as Java Application. When run it will display some GroovyShell error messages because we didn't pass in any arguments. That's fine, we just want Eclilpse to create a default Launch Configuration for the class.</p>
<p>Now right click on your project and select "Export" in the next dialog choose Runnable Jar.</p>
<p>In the next dialog we need to select the Launch Configuration to use (this is the Main class that the Jar will use when run).</p>
<p><img src="http://content.screencast.com/users/lil-dice/folders/Jing/media/ee0701e8-163f-48d2-8b38-ec692e39ef11/2009-01-14_0910.png" alt="Export Dialog" /></p>
<p>Pull down the drop down and you should see your GroovyLauncher Run Configuration that was created automatically by Eclipse when we tried to run our GroovyLauncher class.</p>
<p>Now just specify the file name for the jar and we're done. What eclipse does during the next step is repackage all the classes from your Build Path into one single jar file. So if we included mysql jdbc drivers in our build path, they'd be repackaged into our own jar. This is a legal gray area, but it's damn cool and simple. We don't have to worry about classpaths anymore when we launch our jar! We just run it with "java -jar filename.jar"</p>
<p>So now to test our GroovyLauncher jar we can run it on our machine or another by running:</p>
<div class="syntax_hilite">
<div id="code-10">
<div class="code">java -jar GroovyLauncher.<span style="">jar</span> ourscript.<span style="">groovy</span></div>
</div>
</div>
<p></p>
<p>Now we can pass in ANY groovy script we want using this same launcher jar, it can reference any Java class that was in our BuildPath of our eclipse project. If you didn't add anything other than the Groovy Libraries you'll just have access to the core Groovy Libraries + the Java API's, if you want to be able to do SQL and other fun stuff you'll need to add the appropriate jars to your Eclipse Project just like normal.</p>
<p><strong>Conclusion</strong><br />
You might make a couple different Runnable Jars based on different needs. You could create a project that just included the Groovy Libraries and the GroovyLauncher class and maybe export that as GroovyLauncherLight.jar and make another project that has your favorite JDBC drivers plus any other common libraries and export that project as GroovyLauncherFull.jar</p>
<p>A word of warning, I haven't benchmarked using the GroovyShell versus the GroovyLauncher, however most of your swiss army type scripts don't need to be blazing fast, they just need to be easily changed and easy to run.</p>
<!-- Social Bookmarks BEGIN --><div class="social_bookmark"><em>Bookmark to:</em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.weheartcode.com/2009/01/14/writing-portable-groovy-scripts-with-a-magic-runnable-jar/&amp;title=Writing+Portable+Groovy+Scripts+with+A+Magic+Runnable+Jar" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to Del.icio.us"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/delicious.png" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to Del.icio.us" alt="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.weheartcode.com/2009/01/14/writing-portable-groovy-scripts-with-a-magic-runnable-jar/&amp;title=Writing+Portable+Groovy+Scripts+with+A+Magic+Runnable+Jar" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to digg"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/digg.png" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to digg" alt="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Writing+Portable+Groovy+Scripts+with+A+Magic+Runnable+Jar&amp;u=http://www.weheartcode.com/2009/01/14/writing-portable-groovy-scripts-with-a-magic-runnable-jar/" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to FURL"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/furl.png" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to FURL" alt="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to FURL" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.weheartcode.com/2009/01/14/writing-portable-groovy-scripts-with-a-magic-runnable-jar/&amp;title=Writing+Portable+Groovy+Scripts+with+A+Magic+Runnable+Jar" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to reddit"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/reddit.png" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to reddit" alt="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.weheartcode.com/2009/01/14/writing-portable-groovy-scripts-with-a-magic-runnable-jar/" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to Technorati"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/technorati.png" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to Technorati" alt="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.weheartcode.com/2009/01/14/writing-portable-groovy-scripts-with-a-magic-runnable-jar/&amp;title=Writing+Portable+Groovy+Scripts+with+A+Magic+Runnable+Jar" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to Google Bookmarks"><img src="http://www.weheartcode.com/wp-content/plugins/social_bookmarks/google.png" title="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to Google Bookmarks" alt="Add 'Writing Portable Groovy Scripts with A Magic Runnable Jar' to Google Bookmarks" /></a></div>
<!-- Social Bookmarks END -->]]></content:encoded>
			<wfw:commentRss>http://www.weheartcode.com/2009/01/14/writing-portable-groovy-scripts-with-a-magic-runnable-jar/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

